2015-10-13 3 views
0

Пожалуйста, помогите мне понять, что происходит.NET запрос базы данных Access извращает дд/мм/гггг дата буквального в мм/дд/гггг

У меня есть визуальный базовое приложение, которое возвращает данные из базы данных доступа я хочу для запроса поля БД с датами с этим форматом «01/12/2015» (1 декабря) сделать так, у меня есть DateTimePicker

у меня есть эта запись в моей БД - 01/12/2015

когда я обновляю свой код, чтобы включить его значение datetimepicker в запрос, он ничего не вернет, если я вложу 12/01/2015, он найдет запись w Ith 01/12/2015

мой запрос выглядит следующим образом:

dim dd as date 
dd = datetimepicker.value 
qrytxt = "select * from table where [Date] = #" + dd + "#" 

если я поставил MsgBox вернуть qrytxt возвращает

select * from table where [Date] = #01/12/2015# 

, но он по-прежнему проверяет неправильную дату против дб ...

У меня также есть эта система импорта. Глобализация, и я кое-что прочитал о CultureInfo, но я не мог заставить ее работать в моем запросе.

Есть ли что-нибудь еще, что мне нужно включить или сделать?

+1

* «У меня есть визуальный базовое приложение ...» * - У вас означает приложение VB.NET? –

+0

Ничего страшного из-за его окон, используя визуальную студию 2013 –

+0

Не можете ли вы просто переформатировать дату в своем коде перед передачей ее в БД так, чтобы это формат 'mm/dd/yyyy', как ожидал db? Например, в VB с 'qrytxt =" SELECT ... [Date] = # "+ Format (dd," mm/dd/yyyy ") +" # "' – JNevill

ответ

0

Просто заставить формат на вашей даты значение, чтобы создать строковое выражение для даты:

Dim dd As Date 
dd = datetimepicker.value 
qrytxt = "select * from table where [Date] = #" + dd.ToString("yyyy'/'MM'/'dd") + "#" 
+0

, вероятно, не самый правильный подход, как сказал Горд, но он работает для меня. –

1

почему это происходит?

Это происходит потому, что дата буквальной неоднозначна и не соответствует формату, что база данных Access Engine предполагает для неоднозначных даты литералов.

Использование литерала даты с динамическим SQL в любом случае является неправильным подходом. DateTimePicker возвращает истинное значение System.DateTime (которое всегда однозначна), поэтому вы должны просто использовать его в качестве части параметризованного запроса:

Using cmd As New OdbcCommand("SELECT COUNT(*) AS n FROM Clients WHERE DOB = ?", conn) 
    cmd.Parameters.Add("?", OdbcType.DateTime).Value = DateTimePicker1.Value.Date 
    MessageBox.Show(cmd.ExecuteScalar) 
End Using 
Смежные вопросы