2013-06-03 3 views
2

Я пытаюсь получить запись 3 июня 2013 года из моей базы данных, которая создается в ms-доступе. Даты хранятся в формате дд/мм/гггг, ниже мой запросaccess mdb date/time issue

AND (a.Date = #" + date + "#)) order by e.E_ID asc 

Но удивительная вещь я вставили запись о дате 03/06/2013, которая дата сегодняшней, в то время как он принимает это как 6 марта 2013 года, я исправил свои региональные настройки, по-прежнему та же проблема. Также в моем запросе я запрос для совпадения даты, я использую dd/MM/yyyy. Это ошибка от Microsoft? пожалуйста, помогите

ответ

2

Даты сохраняются в формате дд/мм/гггг

Я подозреваю, что это не так. Я подозреваю, что они хранятся в некотором родном формате даты/времени, который, несомненно, намного эффективнее, чем 10-символьная строка. (Я предполагаю, что вы используете, например, подходящий тип поля, а не varchar.) Важно различать неотъемлемый характер данных и «как он отображается при преобразовании в текст».

Но удивительная вещь

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

Вы должны:

  • Использование параметризованных SQL для запросов по многим причинам, - самое главное, чтобы избежать атак с внедрением SQL, но также избежать ненужным преобразования строк такого рода
  • Укажите значение параметра, как DateTime, что позволяет избежать преобразования строки

вы не указали, какой тип поставщика вы используете - моя догадка OleDbConnection и т. д. Обычно, если вы посмотрите на документацию для свойства Parameters соответствующего класса команд, вы найдете соответствующий пример. Например, OleDbCommand.Parameters показывает параметризованный запрос на OleDbConnection. Одна вещь, которую стоит отметить, из документации:

Поставщик OLE DB .NET провайдер не поддерживает именованные параметры для передачи параметров в операторе SQL или хранимой процедуры, называемой помощью OleDbCommand когда CommandType установлен в Text. В этом случае необходимо использовать знак вопроса (?). [...] Следовательно, порядок, в котором OleDbParameter объектов добавляется к OleDbParameterCollection, должен непосредственно соответствовать позиции заполнителя вопросительного знака для параметра в тексте команды.

+0

Без сомнения, лучший ответ, который я получил .... – greatmajestics