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 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 Server를 문자로 취급합니다). 이것을 변경하십시오 :
command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE '@STATE'));
이에:
command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE @STATE));
제휴하지 않습니다 StackOverflow