使用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列会期望。
问题是
为什么.NET基本代码不能使用ToShortDateString()自动转换并提供DB2期望的内容?
在.NET将SQL事务提交给DB2之前,可以使用哪些方法覆盖.NET基本逻辑并在应用程序代码中转换值?
任何帮助或反馈都将不胜感激。谢谢!
答案 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);
<强>参考强>:
DB2 INSERT for DATE和TIMESTAMP
如果在DB2中插入直接SQL语句,
对于TimeStamp使用格式,如'2012-12-17-16.53.57.285754'
和
用于DATE使用格式,如CAST('2012-12-10'AS DATE)