SqlCommand.Parameters.AddWithValue не возвращает правильные результаты - PullRequest
2 голосов
/ 12 февраля 2010

Я признаю, что я новичок (хотя учусь быстро!), Когда дело доходит до использования параметризованных запросов в 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, и это правильно.

Что мне здесь не хватает?

Ответы [ 2 ]

4 голосов
/ 12 февраля 2010

Вам просто нужно заключить в кавычки ваш параметр в выражении SQL (текст в кавычках заставляет SQL Server воспринимать его как литерал). Изменить это:

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

к этому:

command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE @STATE));
1 голос
/ 12 февраля 2010

вам не нужны кавычки вокруг @ STATE

...