DateTime.Now 和 DirectoryInfo.LastWriteTime 的格式/类型之间可能存在差异
本文关键字:之间 存在 类型 Now DirectoryInfo LastWriteTime 格式 DateTime | 更新日期: 2023-09-27 18:35:12
我正在编写一个脚本作为 SSIS 包的一部分,该包正在更新 SQL Server 数据库中的某些条目。有两列,假设 A 和 B,都是 datetime
类型,我将 DateTime.Now
设置为 A 列值,info.LastWriteTime
设置为 B 列值。
正常,但在尝试更新 B 列时出现错误。我的理解是,这两个语句都返回一个DateTime
对象,那么为什么info.LastWriteTime
会给出错误,而不是DateTime.Now
呢?
更新:
info
变量是从 DirectoryInfo info = new DirectoryInfo(path)
获得的
给出的实际错误如下:
[目录历史记录表 [39]] 错误: SSIS 错误代码DTS_E_OLEDBERROR。 发生 OLE DB 错误。错误代码:0x80004005。OLE DB 记录可用。 源:"Microsoft SQL Server 本机客户端 10.0" 结果: 0x80004005 说明:"日期格式无效"。
[目录历史记录表 [39]] 错误:输入"OLE DB 目标输入"(52) 上的输入列"上次修改日期"(75) 出错。返回的列状态为:"转换失败,因为数据值溢出指定类型。
Server datetime
列接受 1753 年 1 月 1 日到 9999 年 12 月 31 日之间的日期。
如果文件系统条目(在本例中为目录)不存在,则DirectoryInfo
的LastWriteTime
可能会返回 1601 年 1 月 1 日午夜 12:00 的日期。确保获取文件系统中确实存在的目录的目录信息对象。
MSDN 中记录了此行为,用于从DirectoryInfo
继承的FileSystemInfo.LastWriteTime
:
如果 FileSystemInfo 对象中描述的文件不存在, 此属性将于公元 1601 年 1 月 1 日午夜 12:00 返回。 协调世界时 (UTC),调整为当地时间。
作为旁注,如果您需要一个接受范围更广的日期时间值的列,如果我没记错的话,您可以使用较新版本的 SQL Server 中可用的datetime2
数据类型,因为 2008 版本。此数据类型支持从公元 1 月 1 日到公元 9999 年 12 月 31 日的日期。