4

我正在使用 MS SQL 2000、VS2008、MVC 和 C#。

我正在尝试使用存储过程插入和更新一些数据。有些列是日期时间类型。服务器和客户端的区域设置均设置为荷兰语(比利时),这意味着默认日期格式为 dd/mm/yyyy。

当我尝试使用例如日期插入或更新时。28/03/2009,我收到以下错误:

插入:将数据类型 nvarchar 转换为日期时间时出错

更新:将 char 数据类型转换为 datetime 数据类型导致 datetime 值超出范围

当我尝试使用像 01/03/2009 这样的日期时,我没有收到任何错误,但日期保存为 03/01/2009,这是美国日期格式。这是区域设置问题的典型行为。但两者都设置为荷兰语(比利时)。

为什么它以美国格式保存日期?
我在这里想念什么?

谢谢!
斯蒂金

4

4 回答 4

3

您应该使用 DateTime 对象而不是字符串将数据插入数据库。您的客户端代码应使用客户端的区域设置将客户端的日期条目转换为 DateTime 对象,然后应将 DateTime 结构添加到最终发送到数据库的参数中。

于 2010-03-01T13:10:03.170 回答
1

SQL 实例有自己的语言环境设置,默认为“us_english”

现在,如果您使用 varchar 而不是本机 datetime 来存储数据值,通常会发生这种情况。如果您的代码/表使用日期时间列并且您将参数定义为日期时间,那么您将不会收到错误。

于 2010-03-01T13:10:58.380 回答
1

我也有这个问题,它与你的 SQL 服务器的日期格式有关,

我通过像这样格式化要插入的日期字符串来解决它

DateTime.Now.ToString("MM/dd/yyyy HH:mm")

希望有帮助

于 2010-03-01T13:12:05.540 回答
1

以上所有建议都是正确的,但我发现如果您将日期时间添加为字符串/varchar,最安全的方法是格式为 'YYYY-MM-DD'

所以例如。

  Update MyTable
  Set MyDate = '2010-03-01'
于 2010-03-01T13:13:49.763 回答