像子句和预备语句
本文关键字:语句 预备 子句 | 更新日期: 2023-09-27 17:51:05
我正在尝试使用准备好的语句与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());
}
}
}
}
Reader总是空的,我做错了什么
由于您使用单引号,它将您的@pseudopart%
部分视为字符串字面值,而不是参数。
这就是为什么你用@pseudopart%
字符串过滤你的Field
列,而不是pseudoPart
变量的值。这就是为什么你的阅读器是空的。
用它来代替;
string Query = "SELECT TOP 10 Field FROM Table WHERE Field LIKE @pseudopart";
..
Command.Parameters.AddWithValue("@pseudopart", pseudoPart + "%");
顺便说一下,不要使用AddWithValue
方法。它有时可能产生意想不到的结果。使用Add()
方法重载来指定参数SqlDbType
和它的大小。
TABLE
在T-SQL中是一个保留关键字。您应该将它与方括号一起使用,如[TABLE]
。一些数据库管理器不考虑关键字大小写(Table - Table),但据我所知,SQL Server默认会考虑。
最好的选择是更改为non-reserved word.
您应该在您的参数中添加%
, ado.net提供程序将在您的sql查询中为您解决它,例如:
string Query = "SELECT TOP 10 Field FROM Table WHERE Field LIKE @pseudopart";
using (SqlCommand Command = new SqlCommand(Query, Connection))
{
Command.Parameters.AddWithValue("@pseudopart", string.Concat(pseudoPart, "%"));