我在这里非常沮丧,已经尝试了好几天了...... 我想要的只是德国用户能够输入应该存储在SQL Server中的日期。日期采用以下格式“dd.mm.yyyy”。我总是收到类似这样的错误消息:查询表达式'#23.01.2004 00:07:00#'中的日期语法错误。 - 暂时使用Access。
我已经尝试了很多方法(Thread.CultureInfo,CDate(),Formatting DateTimeStyles),但这是我最新的:
Dim dTermin As DateTime
dTermin = DateTime.Parse(txtTermin.Text)
sSQL = "INSERT INTO Termin (Termin) VALUES ("
sSQL = sSQL & "#" & dTermin & "#)"
这也给了我一个错误。如果我硬编码像“10-04-2004”这样的日期,那么它的确有效。它是一个Access 2000 db,有两个字段:ID(自动编号)和终端(ShortDate)。使用Jet OLEDB 4.0 Provider。
答案 0 :(得分:6)
我建议在数据库中插入非本地化日期,并仅在显示时将其本地化。
答案 1 :(得分:4)
您不应该在数据库中存储本地化的日期。将它们保存在standard format中,然后让ODBC连接器或SQL客户端或您正在使用的任何内容 - 根据查看它们的人的文化对其进行本地化。
答案 2 :(得分:2)
如果我理解正确,SQL Server日期时间分隔符为'eg '23。03.2009'
如果SQL Server具有默认的us_enlish语言环境,那么您有第二个问题。
SET LANGUAGE us_english
GO
DECLARE @dt datetime
SET @dt = '23.03.2009' --error
GO
SET LANGUAGE german
GO
DECLARE @dt datetime
SET @dt = '23.03.2009' --ok
GO
使用yyyydddd或者
SET LANGUAGE us_english
SET DATEFORMAT DMY
GO
DECLARE @dt datetime
SET @dt = '23.03.2009' --ok
GO
答案 3 :(得分:2)
我会使用ISO格式的字符串日期:YYYY / MM / DD 几乎每个系统(以及每个语言环境)都非常理解ISO格式的日期。
见Tibor Karaszi的精彩参考:The ultimate guide to the datetime datatypes