我有一些C#代码,可从一个数据库复制行并将其插入另一个数据库。它使用DataTable
和SqlBulkCopy
执行此操作。
当导入到我的C#应用程序中时,时间戳列在插入到SQL Server的System.DateTime
中具有数据类型DataTable
。执行SqlBulkCopy.WriteToServer()
后,目标表中的时间戳记值将具有datetimeoffset(6)
类型,并为其添加时区偏移量(... +01:00)。
如何阻止这种情况发生?它并不总是发生,只是最近才开始发生。
UPDATE:
出于我的目的,预期的时区始终是UTC。但是,由于商业原因,我不得不将此存储在datetimeoffset列中。所以我希望+00:00
DataTable data = importer.GetDataTable();
using (SqlBulkCopy copy = new SqlBulkCopy(conn)){
copy.WriteToServer(data);
}
SpecifyKind
不需要具有DateTimeOffset
类型。System.DateTime
列转换(广播)为具有DateTimeOffset
的显式偏移的new TimeSpan(0, 0, 0)
来解决此问题。这消除了C#隐式处理从DateTime
到DbType.DateTimeOffset
的转换的需要,该转换增加了不希望的偏移量。编辑
[阅读评论,@ JohnSkeet本质上建议这样做,但我没有阅读所有人的评论