SqlCommand.Parameters.AddWithValue不返回正确的结果
-
20-09-2019 - |
题
我得承认,我有点新手(虽然学的很快!)当谈到在C#中使用参数化查询,所以我可能只是在这里可以俯瞰东西,但我似乎无法图如何获得一个参数化查询为我工作。
下面是一个更简单的例子。如果需要更多信息,我当然愿意提供它。
using (SqlCommand command = connection.CreateCommand())
{
command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE '@STATE'));
command.Parameters.AddWithValue("@State", "MA");
connection.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
count = Convert.ToInt32(reader[0]);
}
reader.Close();
connection.Close();
}
使用SQL Server Profiler ,我可以看到,下面的查询正在发出:
exec sp_executesql N'SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE ''@STATE''))',N'@STATE nvarchar(2)',@STATE=N'MA'
如果我直接在SQL Server Management Studio中运行该查询,返回0。但是,如果我修改这样的查询:
exec sp_executesql N'SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE ''MA''))',N'@STATE nvarchar(2)',@STATE=N'MA'
和运行它,我得到51回,这是正确的计数。
我是什么在这里失踪?
解决方案
你不需要围绕@STATE报价
其他提示
您只需要解除引用您的参数在SQL语句(报价文本,使SQL服务器把它作为文字)。改变这一:
command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE '@STATE'));
这样:
command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE @STATE));
不隶属于 StackOverflow