0

我在 SQL Server 2008中有一个名为CreateDate(DateTime)的列。table1

使用存储过程,我尝试将其更新CreateDate为参数,如下所示:

SqlParameter spdtCreateDate = cmd.Parameters.Add("@dtDreateDate", SqlDbType.DateTime);
spdtCreateDate.Value = dtCreateDate;

从 C# 中的应用程序发送CreateDate='6/29/2012 12:00:00 AM',但是当我签入数据库时​​,CreateDate设置2012-06-28 23:00:00.0002012-06-29 00:00:00.000

谁能告诉我发生了什么?

我怎么解决这个问题?

4

1 回答 1

1

SQL Serverdatetime类型不包括任何时区信息。因此,SQL Server 客户端库假定您总是希望在其中存储本地时间。如果您已将 .NETDateTime值设置为具有 UTC 时区的值,则 SQL Server 客户端会在存储之前帮助您将其转换为本地时间。

可能的解决方案:

  • 更改您的 .NETDateTime值以指定DateTimeKind.UnspecifiedDateTimeKind.Local.
  • 将表列和 sproc 参数数据类型更改为datetimeoffset(SQL 2008 或更高版本)。
于 2012-07-12T11:25:24.880 回答