У меня есть простой запрос с предложением where, который не дает результатов при запуске из кода.
Этот запрос отлично работает, если он запускается из студии управления SQL Server, но когда я передаю некоторые переменные, взятые из параметров GET, этот запрос не покажет никаких результатов.
Connection = new SqlConnection(ConnectionString);
Connection.Open();
Command = new SqlCommand("", Connection);
if (Request.QueryString["q"] != null)
{
Query = Request.QueryString["q"].ToString();
Command.CommandText = "SELECT * FROM [device] WHERE [display_name] LIKE N'%@query%' OR [address] LIKE N'%@query%' ";
Command.Parameters.AddWithValue("@query", Query);
Reader = Command.ExecuteReader();
while (Reader.Read())//Here Reader.HasRows=False
{
//Do Stuff
}
В таблице есть единственная строка, в которой Request.QueryString["q"]
равно NULL
, а Command.ExecuteReader();
равно [display_name]
.
передавая KHR
на страницу, я не получаю результата от этого запроса, хотя на самом деле он должен возвращать одну строку.
@ Стив попробовал это сейчас. до сих пор нет результатов. Однако, если я заменю @query
в '%@query%'
постоянным значением, таким как k, я получу результаты.
[display_name] LIKE N'%@query%'
будет искать строку, где display_name
содержит текст '@query'
нет значение переменной @query
. C# не вводит значение параметра.
Вам нужно сделать что-то вроде этого:
Command.CommandText = "SELECT * FROM [device] WHERE [display_name] LIKE N'%' + @query + N'%' OR [address] LIKE N'%' + @query + N'%';";
Command.Parameters.Add("@query", SqlDbType.NVarChar, 50);
Command.Parameters["@query"].Value = Query;
Обратите внимание, что я также удалил AddWithValue
(Можем ли мы уже отказаться от использования AddWithValue?)
Попробуйте удалить N'% и последний %', затем добавьте в переменную Query%