SqlCommand.Parameters.AddWithValue未返回正确的结果

时间:2010-02-11 21:36:57

标签: c# tsql sqlcommand parameterized-query

我承认我在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的计数,这是正确的。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:4)

您只需要在SQL语句中取消引用您的参数(引用文本会使SQL Server将其视为文字)。改变这个:

command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE '@STATE'));

到此:

command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE @STATE));

答案 1 :(得分:1)

@STATE

周围不需要引号