IBM Data Server Client v9.7fp5的日期时间字段溢出

Mic*_*art 2 .net db2 datetime odbc

使用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基本逻辑并在应用程序代码中转换值?

任何帮助或反馈将不胜感激.谢谢!

LCJ*_*LCJ 5

读取datetime数据类型转换(ODBC).它定义了各种规则datatype conversions.下面列出了一个 - SQLSTATE 22008.

如果在从C转换为SQL时发生截断秒或小数秒,则会使用SQLSTATE 22008和消息"Datetime field overflow"生成诊断记录.

这里的关键是确保truncation在秒/小秒内没有发生

DATE数据类型

如果DB2数据库列是DATE数据类型,请创建您的变量,如下所示:

new DateTime(2012,3,4); //No time part
Run Code Online (Sandbox Code Playgroud)

TIMESTAMP数据类型

如果DB2数据库列是TIMESTAMP数据类型,则删除几毫秒:

dateTime = new DateTime(dateTime.Ticks - (dateTime.Ticks % TimeSpan.TicksPerSecond),dateTime.Kind);
Run Code Online (Sandbox Code Playgroud)

参考:

  1. 如何截断.NET DateTime的毫秒数
  2. 为什么SQL Server会丢失一毫秒?

DB2 INSERT for DATE和TIMESTAMP

如果在DB2中插入直接SQL语句,

对于TimeStamp使用格式如'2012-12-17-16.53.57.285754'

对于DATE使用格式如CAST('2012-12-10'AS DATE)