我正在尝试使用预备语句使用LIKE子句发出SQL请求.
这是代码:
using (SqlConnection Connection = new SqlConnection(ConnectionString))
{
Connection.Open();
string Query = "SELECT TOP 10 Field FROM Table WHERE Field LIKE '@pseudopart%'";
using (SqlCommand Command = new SqlCommand(Query, Connection))
{
Command.Parameters.AddWithValue("@pseudopart", pseudoPart);
using (SqlDataReader Reader = Command.ExecuteReader())
{
if (!Reader.HasRows)
return PossibleMatch;
while (Reader.Read())
{
PossibleMatch.Add(Reader["Field"].ToString());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
读者永远是空的,我做错了什么?
由于您使用单引号,因此它将您的@pseudopart%部件视为字符串文字,而不是参数.
这就是您Field使用@pseudopart%字符串过滤列而不是pseudoPart变量值的原因.这就是为什么你的读者是空的.
请改用它;
string Query = "SELECT TOP 10 Field FROM Table WHERE Field LIKE @pseudopart";
..
Command.Parameters.AddWithValue("@pseudopart", pseudoPart + "%");
Run Code Online (Sandbox Code Playgroud)
顺便说一句,不要使用AddWithValue方法.它可能有时会产生意外结果.使用Add()方法重载来指定参数SqlDbType及其大小.
我必须说,TABLE是T-SQL中的保留关键字.你应该像方括号一样使用它[TABLE].一些数据库管理员不考虑关键字情况(表 - 表),但据我所知,SQL Server默认考虑它.
最佳选择是将其更改为非保留字.