我得承认,我有点新手(虽然学的很快!)当谈到在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));
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top