문제

나는 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));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top