Ошибка преобразования при преобразовании значения nvarchar в тип данных int - PullRequest
2 голосов
/ 24 августа 2011

Что я здесь не так делаю?

string favorites = "210,213";

sqlCommand.CommandText = "select * from clients (nolock) 
    where Deleted = 0 and ClientID in (@favorites)";
sqlCommand.Parameters.AddWithValue("@favorites", favorites);

Еще одно примечание: «210,213» является лишь примером. Это может быть любая длина чисел. Вот почему я использую оператор SQL IN.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 24 августа 2011

Это не так, как работают параметры. Вы на самом деле пытаетесь получить клиентов, где ClientID равен , равному '210,213'. Ну, это не число, поэтому есть сбой.

Параметризованные запросы и предложение IN на самом деле не тривиально реализуются вместе, если размер списка IN является динамическим, время от времени меняющимся.

Прочтите этот вопрос и ответы: Параметризация предложения SQL IN

Обычно вам нужно динамически собирать SQL-запрос, всегда помня о таких проблемах, как SQL-инъекция .

Дальнейшее чтение:

0 голосов
/ 24 августа 2011

Я совершенно уверен, что вам нужно сгенерировать командный текст со строкой избранного. Для массива нет встроенного типа sql. Вероятно, вы можете защитить себя от SQL-атаки, убедившись, что вы генерируете избранное из списка целых чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...