与IBM数据服务器客户机日期时间字段溢出v9.7fp5

问题描述:

使用的EntityFramework V4.1和IBM数据服务器客户机v9.7fp5,DB基于具有DATE列预先定义的DB2表第一生成代码。在DB2 DATE列的代码生成期间映射到.NET DateTime数据类型。与IBM数据服务器客户机日期时间字段溢出v9.7fp5

当试图INSERT一排,收到以下错误

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

这很有意义,因为.NET没有DATE数据类型,只是DATETIME,并且该属性会有更多的数据,然后DB2 DATE列会预期。

的问题是

  1. 为什么不.NET基础代码自动转换使用ToShortDateString(),并提供DB2什么期待?

  2. 可以使用什么方法来覆盖.NET基础逻辑和在应用程序代码转换值.NET提交SQL事务DB2之前?

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

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

如果由C转换为SQL时出现的秒或秒的小数部分截断,与SQLSTATE 22008和消息“日期时间字段溢出”而生成的诊断记录。

这里的关键点是要确保没有发生在几秒钟内没有truncation /秒的小数部分

DATE数据类型

如果DB2数据库列是DATE数据类型,创建变量作为上市如下:

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

TIMESTAMP DataType

如果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?

DB2 INSERT于DATE和TIMESTAMP

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

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

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

+1

这节省了我们,谢谢!在我们插入任何具有'DATE'类型的列之前,我们只需调用'OurDateValue.Date'并且一切顺利。辉煌,即使有点傻。 – 2013-03-14 16:12:33