我承认在 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,这是正确的。
我在这里想念什么?