我正在编写一个脚本作为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)出错。返回的列状态为:“转换失败,因为数据值溢出指定的类型。”。
答案 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日的日期。