我在查询/ SQL代码中处理日期时遇到问题。我的区域设置格式为#dd / mm / yyyy#,因此在插入日期访问数据库时,它看起来像#dd / mm / yyyy#但是使用选择查询我得到#mm / dd / yyyy#
Query = "Select EmpEndDate From Employees_Details Where EmpCode = '" & EmpCode & "';"
Objcmd = New OleDbCommand(Query, ObjConnection)
ObjSelect = Objcmd.ExecuteReader
ObjSelect.Read()
Dim EndDate As DateTime
If Convert.ToString(ObjSelect.GetValue(0)) = vbNullString Then
EndDate = DateTime.Now
Else
EndDate = ObjSelect.GetValue(0)
End If
答案 0 :(得分:2)
我的区域设置格式为#dd / mm / yyyy#,因此在插入日期访问数据库时,它看起来像#dd / mm / yyyy#
编辑:感谢Plutonix下面的评论,我意识到您的问题不清楚是指的是VB.NET #date_literal#
还是Access SQL {{1} }。我的答案是关于Access SQL中的日期文字:
重要的是要意识到Access数据库引擎忽略Windows中的区域设置,始终将Access SQL语句中的模糊#date_literal#
日期文字解释为#xx/yy/zzzz#
。这可以通过Windows中使用默认“英语(英国)”设置的机器上的以下VB.NET代码来说明:
#mm/dd/yyyy#
该代码产生
Imports System.Data.OleDb
Imports System.Globalization
Module Module1
Sub Main()
Console.WriteLine("Culture name:")
Console.WriteLine(" {0}", CultureInfo.CurrentCulture.Name)
Console.WriteLine("Short date pattern:")
Console.WriteLine(" {0}", CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern)
Using con As New OleDbConnection
con.ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;" &
"Data Source=C:\Users\Public\mdbTest.mdb;"
con.Open()
Using cmd As New OleDbCommand
cmd.Connection = con
' try updating to November 2, 2010 as #dd/mm/yyyy#
cmd.CommandText =
"UPDATE Employees_Details " &
"SET EmpEndDate=#02/11/2010# " &
"WHERE EmpCode=1"
Console.WriteLine("UPDATE command:")
Console.WriteLine(" {0}", cmd.CommandText)
cmd.ExecuteNonQuery()
' read value back and display
cmd.CommandText =
"SELECT EmpEndDate " &
"FROM Employees_Details " &
"WHERE EmpCode=1"
Dim EndDate As DateTime = Convert.ToDateTime(cmd.ExecuteScalar)
Console.WriteLine("Retrieved date:")
Console.WriteLine(" {0}", EndDate.ToLongDateString)
End Using
con.Close()
End Using
End Sub
End Module
显示Culture name:
en-GB
Short date pattern:
dd/MM/yyyy
UPDATE command:
UPDATE Employees_Details SET EmpEndDate=#02/11/2010# WHERE EmpCode=1
Retrieved date:
11 February 2010
已写入Access数据库为“2010年2月11日”,而不是“2010年11月2日”。
更好的方法是使用parameterized queries来避免Access SQL语句中的日期文字。如果必须在Access SQL语句中使用日期文字 ,请始终选择明确的#02/11/2010#
格式。