簡體   English   中英

SqlCommand.Parameters.AddWithValue不返回正確的結果

[英]SqlCommand.Parameters.AddWithValue Not Returning Correct Results

我承認,在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的計數,這是正確的。

我在這里想念什么?

您只需要在SQL語句中取消對參數的引用(引用文本會使SQL Server將其視為文字)。 更改此:

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

對此:

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

您不需要@STATE周圍的引號

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM