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プロファイラを使用して、私は次のクエリが発行されていることを確認することができます:
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 Serverはリテラルとして扱います)SQL文で、あなたのパラメータをUNQUOTEする必要があります。これを変更します:
command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE '@STATE'));
これに:
command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE @STATE));
所属していません StackOverflow