SqlCommand.Parameters.AddWithValue не возвращает правильные результаты

StackOverflow https://stackoverflow.com/questions/2247901

Вопрос

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