1

SQL Server データベースのいくつかのエントリを更新する SSIS パッケージの一部としてスクリプトを作成しています。A と B の 2 つの列があり、どちらもタイプで、列 A の値と列 B の値としてdatetime設定しています。DateTime.Nowinfo.LastWriteTime

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 Destination Input" (52) の入力列 "LastModifiedDate" (75) でエラーが発生しました。返された列のステータスは、「データ値が指定された型をオーバーフローしたため、変換に失敗しました。」でした。

4

1 に答える 1

2

SQL Serverdatetime列は、1753 年 1 月 1 日から 9999 年 12 月 31 日までの日付を受け入れます。

LastWriteTimeDirectoryInfo、ファイル システム エントリ (この場合はディレクトリ) が存在しない場合、1601 年 1 月 1 日深夜 12:00 の日付を返すことがあります。ファイル システムに存在するディレクトリのディレクトリ情報オブジェクトを取得していることを確認してください。

この動作は、継承元の MSDN に記載されFileSystemInfo.LastWriteTimeています。DirectoryInfo

FileSystemInfo オブジェクトに記述されているファイルが存在しない場合、このプロパティは、現地時間に調整された西暦 1601 年 1 月 1 日 (CE) 協定世界時 (UTC) の午前 12:00 を返します。


補足として、より幅広い範囲の日時値を受け入れる列が必要な場合はdatetime2、2008 バージョン以降の SQL Server の最新バージョンで使用できるデータ型を使用できます。このデータ型は、西暦 1 月 11 日から西暦 9999 年 12 月 31 日までの日付をサポートします。

于 2012-05-23T19:39:28.403 に答える