Access数据库的.NET查询将dd / mm / yyyy日期文字错误解释为mm / dd / yyyy

时间:2015-10-13 19:59:31

标签: sql vb.net datetime ms-access globalization

请帮助我了解正在发生的事情

我有一个可视化的基本应用程序,可以从访问数据库中返回数据 我想查询带有此格式的日期的数据库字段" 01/12 / 2015" (12月1日) 这样做我有一个datetimepicker

我的数据库中有此记录 - 2015年12月1日

当我更新我的代码以将datetimepicker值包含在查询中时,它不会返回任何内容,如果我在2015年12月1日放入它找到2015年12月1日的记录

我的查询如下:

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

如果我把一个msgbox返回qrytxt就返回

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

但它仍然会检查db ...

的错误日期

我也有这个Imports System.Globalization,我读了一些关于CultureInfo但我无法在我的查询中使用它。

我还需要包含或做什么吗?

2 个答案:

答案 0 :(得分:1)

  

为什么会这样?

它正在发生,因为日期文字含糊不清,与Access数据库引擎假定的格式不符合模糊日期文字。

无论如何,将日期文字与动态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

答案 1 :(得分:0)

只需在日期值上强制使用格式即可为日期创建字符串表达式:

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