Дефис в инструкции sql select

#c# #sql-server #visual-studio-2010 #sql

#c# #sql-сервер #visual-studio-2010 #sql

Вопрос:

Это моя очень простая инструкция select:

select * from ProductDimensions where Item='100-1000'

При вводе в SSMS он запрашивает нормально и возвращает результаты. При запуске моей программы в VS она ничего не возвращает. Элемент без дефиса возвращается нормально. Требуется ли какой-то специальный синтаксис для того, чтобы это работало в моем коде C #?

Код C #:

 adapter = new SqlDataAdapter("select * from ProductDimensions where Item='100-1000'", conn);
adapter.Fill(dataSet);
  

Как я уже говорил, если я ввожу число без дефиса, например ‘1000’, оно работает нормально.

Комментарии:

1. Является ли Item столбцом varchar или столбцом int?

2. Возможно, не помешает попробовать использовать строковые литералы в вашем коде C #, добавив к вашим строкам символ @.

3. @Andrew Я попробовал, но и там не повезло.

4. @Nick у тебя получилось в конце концов?

Ответ №1:

Попробуйте вместо этого использовать параметризованную строку SQL, и вы избежите подобных проблем, а также других, подобных SQL-инъекции:

 adapter = new SqlDataAdapter("select * from ProductDimensions where Item=@Item";
adapter.Parameters.Add("@Item", SqlDbType.NChar, 15, "100-1000");
  

(Возможно, вам придется настроить SqlDbType и длину)

Комментарии:

1. В течение последнего часа я пробовал этот код и все его перестановки, которые только мог придумать. Те же результаты, что и числа, написанные через дефис, не работают, а числа без дефиса работают. Я пытался изменить тип данных столбца на char, varchar и nvarchar, но безуспешно. В этот момент мне хочется кричать.

2. @Nick Какие данные находятся в этом столбце, по которому вы фильтруете? Это просто обычный текст? Вы же не пытаетесь фильтровать по диапазону, не так ли?

3. Это varchar, я не фильтрую по диапазону, это просто номер детали с дефисом в нем.

4. Я перестроил свою таблицу, и теперь она работает. Если кто-нибудь может сказать мне, что могло вызвать это, это было бы здорово. Спасибо w69rdy за ваши усилия.

5. Вы удаляете ‘, который был у вас вокруг исходной строки? Что произойдет, если вы измените его на LIKE вместо a =? С обеих сторон могут быть пробелы, вы проверили это?