使用VBA在SQL中插入德语日期格式

使用VBA在SQL中插入德语日期格式,sql,sql-server,tsql,vba,Sql,Sql Server,Tsql,Vba,我在这里很沮丧,已经尝试了好几天了。。。 我只希望德国用户能够输入应该存储在SQL Server中的日期。日期采用以下格式“dd.mm.yyyy”。我总是收到这样的错误消息:查询表达式“#23.01.2004 00:07:00”中的日期语法错误目前正在使用Access 我尝试了很多方法(Thread.CultureInfo、CDate()、格式化datetimestyle),但以下是我的最新方法: Dim dTermin As DateTime dTermin = DateTime.Parse(

我在这里很沮丧,已经尝试了好几天了。。。 我只希望德国用户能够输入应该存储在SQL Server中的日期。日期采用以下格式“dd.mm.yyyy”。我总是收到这样的错误消息:查询表达式“#23.01.2004 00:07:00”中的日期语法错误目前正在使用Access

我尝试了很多方法(Thread.CultureInfo、CDate()、格式化datetimestyle),但以下是我的最新方法:

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(自动编号)和Termin(短日期)。使用Jet OLEDB 4.0提供程序。

如果我理解正确,SQL Server日期时间分隔符为“eg”23.03.2009

如果SQL Server具有默认的美式语言环境,则会出现第二个问题

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

我建议在数据库中插入非本地化日期,并仅在显示时对其进行本地化。

我将使用ISO格式的字符串日期:YYYY/MM/DD 几乎每一个系统(以及每一个地区)都毫不含糊地理解ISO格式的日期


请参阅Tibor Karaszi的优秀参考资料:

您不应该在数据库中存储本地化日期。将它们保存在中,然后让ODBC连接器或SQL客户端或您正在使用的任何东西-根据查看它们的人的文化对其进行本地化。

是否希望Access或SQL Server识别日期?不是很清楚,我希望Access能够识别日期,Access数据库已经将表链接到SQLServer@Mitch:yyyy/mm/dd不是ISO。感谢大家的快速响应!这是一个巨大的帮助和感谢!yyyy/mm/dd不是ISO。看到这里,我展示了SQL 2005不承认ISO yyyymmdd也同意gbn:ISO 8601,即使根据链接文章,YYYY-MM-DD.SQL Server 2008也承认“yyyymmdd”和“YYYY/MM/DD”。SQL Server 2008也承认ISO 8601。使用它安全多了,因为它是ISO。当某些软件也接受标准解决方案时,使用其他一些软件恰好接受的东西是没有意义的。虽然ISO 8601也需要时间,但这是事实,我在之前的评论中忽略了这一点。