Вам нужно использовать @param2
в качестве «автономного» параметра - не делайте , а не , упакуйте его в строку!
SqlCommand SearchAll = new SqlCommand(
"SELECT Document_Name, Document_Summary FROM Document_Details
WHERE (Document_Id IN
(SELECT Document_Id FROM Search_Index
WHERE (Tag_Id IN (SELECT DISTINCT Tag_Id
FROM Tags
WHERE Tag_Name LIKE @param2))))
UNION
SELECT Document_Name, Document_Summary FROM Document_Details AS Document_Details_1
WHERE Document_Name LIKE @param2");
Если вы хотите найти строку с %
в начале и в конце, вам нужно указать это значение @param2
Кроме того: ваш запрос может работать намного лучше, если вы разбьете эти подвыборы и будете использовать одну инструкцию SQL, используя JOIN для объединения таблиц ...
Обновление: ваш подход имеет очень простой недостаток: вы, вероятно, ожидаете, что если вы используете параметризованный запрос в SqlCommand
, вы получите полный SQL-оператор с заполненным значением параметра при обращении к SearchAll.CommandText
- это просто не тот случай - параметр @param2
будет не заменен его значением!
Так что, по сути, вы не можете сделать это так, как вы делаете это прямо сейчас - вам нужно передать SqlCommand
экземпляр - , а не просто строку! Это будет никогда работать
Обновление № 2: вам нужно сделать что-то вроде этого:
protected void Button1_Click(object sender, EventArgs e)
{
// grab search string from web UI
string searchString = "%" + TextBox1.Text.Trim() + "%";
// get connection string
string connectionString = GetConnectionString();
SqlDataSource ds1 = new SqlDataSource(connectionString);
// get the SqlCommand to do your SELECT
ds1.SelectCommand = GetSelectCommand(connectionString, searchString);
GridView1.DataSource = ds1;
GridView1.DataBind();
}
и
protected SqlCommand GetSelectCommand(string connectionString, string searchValue)
{
// define query string - could be simplified!
string queryStmt = "SELECT Document_Name, Document_Summary FROM Document_Details WHERE (Document_Id IN (SELECT Document_Id FROM Search_Index WHERE (Tag_Id IN (SELECT DISTINCT Tag_Id FROM Tags WHERE Tag_Name LIKE @param2)))) UNION SELECT Document_Name, Document_Summary FROM Document_Details AS Document_Details_1 WHERE Document_Name LIKE @param2";
// set up a SqlCommand based on the query string and the connection string passed in
SqlCommand cmd = new SqlCommand(queryStmt, connectionString);
// define parameter
cmd.Parameters.Add("@param2", SqlDbType.VarChar, 100);
// set value for parameter
cmd.Parameters["@param2"].Value = searchValue;
// pass back SqlCommand to fill the data source
return cmd;
}