SQL-запрос не работает - отсутствует оператор - PullRequest
1 голос
/ 15 сентября 2011

Я посмотрел больше проблем с SQL, чем хотел бы сосчитать, но, похоже, ничего не помогло в этой конкретной проблеме. Я выполняю запрос SELECT к базе данных доступа в C #, используя следующий код:

DateTime starttime = new DateTime(2011, 9, 4);
DateTime endtime = new DateTime(2011, 9, 10);

cmd.CommandText = @"SELECT ACT_ENTRY2CASE,ACT_ENTRY2USER FROM SA_TABLE_ACT_ENTRY WHERE ENTRY_TIME>" + starttime + @" AND ENTRY_TIME<" + endtime + @" AND ACT_ENTRY2CASE IS NOT NULL";
reader = cmd.ExecuteReader();

Я получаю ошибку:

Синтаксическая ошибка (отсутствует оператор) в выражении запроса 'ENTRY_TIME> 04.09.2011, 12:00:00 И ENTRY_TIME <9/10/2011, 12:00:00 И ACT_ENTRY2CASE НЕ НУЛЬ '. </p>

Я пытался окружить мои переменные различными вещами (круглые скобки, 'отметки, [] и т. Д.). Кажется, ничто не заставляет его работать (хотя с некоторыми из этих элементов ошибка меняется на что-то с эффектом «отсутствует или недопустим параметр».

Я уверен, что это какая-то глупая маленькая опечатка с моей стороны, но я не могу найти ее ради своей жизни. Есть идеи?

Ответы [ 3 ]

4 голосов
/ 15 сентября 2011

Прежде всего, ваш код уязвим для SQL-инъекций .

Вы должны параметризовать ваш запрос. Вот кодекс:

cmd.CommandText = @"
   SELECT ACT_ENTRY2CASE,ACT_ENTRY2USER 
   FROM SA_TABLE_ACT_ENTRY 
   WHERE ENTRY_TIME> @starttime 
   AND ENTRY_TIME< @endtime 
   AND ACT_ENTRY2CASE IS NOT NULL";

cmd.Parameters.AddWithValue("@starttime", starttime);
cmd.Parameters.AddWithValue("@endtime ", endtime );

reader = cmd.ExecuteReader();
4 голосов
/ 15 сентября 2011

Вам нужно либо поместить ваше время начала и время окончания в кавычки (если у вас просто есть строковое представление даты в вашей базе данных) или использовать функцию To_Date () sql для преобразования ваших дат в объект даты sql ...

Однако всегда лучше параметризовать свой sql, чтобы сделать его более безопасным и повысить производительность.

0 голосов
/ 15 сентября 2011

Я не знаю, все ли в этом проблема, но я думаю, что вам нужно указывать даты в кавычках.Возможно, вы попробовали это и пропустили один, что даст вам несоответствующие цитаты.

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