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 列值。

A 列更新

正常,但在尝试更新 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) 出错。返回的列状态为:"转换失败,因为数据值溢出指定类型。

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

SQL

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

如果文件系统条目(在本例中为目录)不存在,则DirectoryInfoLastWriteTime可能会返回 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 日的日期。