2

EntityFramework v4.1 と IBM Data Server Client を使用してv9.7fp5、DB は最初に、DATE 列を持つ定義済みの DB2 テーブルに基づいてコードを生成しました。DB2 DATE 列は、コード生成中に .NET DateTime データ型にマップされます。

行を試行するとINSERT、次のエラーが表示されます

エラー [22008] [IBM] CLI0114E 日時フィールドのオーバーフロー。SQLSTATE=22008

.NET には DATE データ型がなく、DATETIME だけであり、その属性には DB2 DATE 列が期待するよりも多くのデータが含まれるため、これは理にかなっています。

質問は

  1. .NET ベース コードが ToShortDateString() を使用して自動的に変換し、DB2 が期待するものを提供しないのはなぜですか?

  2. .NET が SQL トランザクションを DB2 に送信する前に、.NET ベース ロジックをオーバーライドし、アプリケーション コード内の値を変換するには、どのような方法を使用できますか?

任意の支援やフィードバックをいただければ幸いです。ありがとう!

4

1 に答える 1

5

datetime データ型変換 (ODBC)を読み取ります。でさまざまなルールを定義しますdatatype conversions。1 つを以下に示します - SQLSTATE 22008。

C から SQL への変換時に秒または小数秒の切り捨てが発生すると、SQLSTATE 22008 およびメッセージ「日時フィールド オーバーフロー」を含む診断レコードが生成されます。

ここでの重要なポイントはtruncation、秒数/小数秒で発生しないことを確認することです

DATEデータ型

DB2 データベース列がDATEデータ型の場合は、以下に示すように変数を作成します。

new DateTime(2012,3,4); //No time part

TIMESTAMP データ型

DB2 データベース列がTIMESTAMPデータ型の場合は、ミリ秒の端数を削除します。

dateTime = new DateTime(dateTime.Ticks - (dateTime.Ticks % TimeSpan.TicksPerSecond),dateTime.Kind);

参考

  1. .NET DateTime からミリ秒を切り捨てる方法
  2. SQL Server がミリ秒を失うのはなぜですか?

DATE および TIMESTAMP の DB2 INSERT

DB2でダイレクトSQL文で挿入する場合、

TimeStamp の場合、「2012-12-17-16.53.57.285754」のような形式を使用します

DATE の場合、CAST ('2012-12-10' AS DATE) のような形式を使用します

于 2013-01-08T12:45:08.203 に答える