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

时间:2012-07-18 20:39:18

标签: .net datetime odbc db2

使用EntityFramework v4.1和IBM Data Server Client v9.7fp5,DB首先根据具有DATE列的预定义DB2表生成代码。在代码生成期间,DB2 DATE列将映射到.​​NET DateTime数据类型。

尝试INSERT行时,收到以下错误

  

ERROR [22008] [IBM] CLI0114E日期时间字段溢出。 SQLSTATE = 22008

这是有道理的,因为.NET没有DATE数据类型,只有DATETIME和那个属性会有更多的数据,那么DB2 DATE列会期望。

问题是

  1. 为什么.NET基本代码不能使用ToShortDateString()自动转换并提供DB2期望的内容?

  2. 在.NET将SQL事务提交给DB2之前,可以使用哪些方法覆盖.NET基本逻辑并在应用程序代码中转换值?

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

1 个答案:

答案 0 :(得分:5)

阅读datetime Data Type Conversions (ODBC)。它在datatype conversions中定义了各种规则。下面列出了一个 - SQLSTATE 22008。

  

如果从C转换为SQL时发生截断秒或小数秒,则会生成SQLSTATE 22008和消息“Datetime field overflow”的诊断记录。

这里的关键是确保在几秒或小秒内没有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. How to truncate milliseconds off of a .NET DateTime
  2. Why is SQL Server losing a millisecond?

  3. DB2 INSERT for DATE和TIMESTAMP

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

      

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

      

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