DateTime.Now和DirectoryInfo.LastWriteTime的格式/类型之间可能存在差异吗?

时间:2012-05-23 19:18:37

标签: c# .net sql ssis

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

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)出错。返回的列状态为:“转换失败,因为数据值溢出指定的类型。”。

1 个答案:

答案 0 :(得分:2)

SQL Server datetime列接受1753年1月1日至9999年12月31日之间的日期。

如果文件系统条目(在本例中为目录)不存在,LastWriteTime的{​​{1}}可能会返回日期为1601年1月1日午夜12点。确保您获取文件系统中存在的目录的目录信息对象。

DirectoryInfo继承的FileSystemInfo.LastWriteTime的MSDN中记录了此行为:

  

如果FileSystemInfo对象中描述的文件不存在,   这家酒店将于公元1601年1月1日午夜12点返回(C.E.)   协调世界时(UTC),调整为当地时间。


作为旁注,如果您需要一个接受更广泛的日期时间值的列,那么您可以使用更新版本的SQL Server中提供的datetime2数据类型,自2008年版本起,如果我我没弄错。此数据类型支持从公元1月1日到公元9999年12月31日的日期。