1

我正在编写一个脚本作为 SSIS 包的一部分,该包正在更新 SQL Server 数据库中的一些条目。有两列,比如说 A 和 B,都是类型datetime,我设置DateTime.Now为 A 列值和info.LastWriteTimeB 列值。

A 列更新正常,但是当它尝试更新 B 列时出现错误。我的理解是这两个语句都返回一个DateTime对象,那么为什么会info.LastWriteTime给出一个错误,而不是DateTime.Now呢?

更新

info变量是从 中获得的DirectoryInfo info = new DirectoryInfo(path)

给出的实际错误如下:

[DirectoryHistoryTable [39]] 错误:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 10.0” Hresult:0x80004005 描述:“无效的日期格式”。

[DirectoryHistoryTable [39]] 错误:输入“OLE DB 目标输入”(52) 上的输入列“LastModifiedDate”(75) 存在错误。返回的列状态为:“转换失败,因为数据值溢出了指定类型。”。

4

1 回答 1

2

SQL Serverdatetime列接受 1753 年 1 月 1 日到 9999 年 12 月 31 日之间的日期。

如果文件系统条目(在本例中为目录)不存在,则LastWriteTimea可能会返回 1601 年 1 月 1 日午夜 12:00 的日期。DirectoryInfo确保您正在获取文件系统中确实存在的目录的目录信息对象。

此行为记录在 MSDN 中FileSystemInfo.LastWriteTime,从中DirectoryInfo继承:

如果 FileSystemInfo 对象中描述的文件不存在,则此属性将返回 1601 年 1 月 1 日午夜 12:00,协调世界时 (UTC),调整为本地时间。


附带说明一下,如果您需要一个接受更广泛的日期时间值的列,那么您可以使用datetime2SQL Server 最新版本中可用的数据类型,如果我没记错的话,自 2008 版本以来。此数据类型支持从公元 1 月 1 日到 9999 年 12 月 31 日的日期。

于 2012-05-23T19:39:28.403 回答