. net查询Access数据库时,将dd/mm/yyyy日期字元误解为mm/dd/yyyy



请帮助我了解发生了什么

我有一个visual basic应用程序,从访问数据库返回数据我想查询一个数据库字段的日期与此格式"01/12/2015"(12月1日)为此,我有一个日期时间选择器

我的数据库中有此记录- 01/12/2015

当我更新我的代码,包括它的datetimepicker值到一个查询它不会返回什么,如果我在12/01/2015它发现记录与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的东西,但是我不能把它放在我的查询中。

为什么会发生这种情况?

发生这种情况是因为日期字面值是不明确的,并且与Access Database 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

只需在日期值上强制设置格式,为日期创建一个字符串表达式:

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

最新更新