使用 EntityFramework v4.1 和 IBM 数据服务器客户端v9.7fp5
,DB 首先根据预定义的具有 DATE 列的 DB2 表生成代码。 DB2 DATE 列在代码生成期间映射到 .NET DateTime 数据类型。
当尝试INSERT
一行,收到以下错误
错误 [22008] [IBM] CLI0114E 日期时间字段溢出。 SQLSTATE=22008
这是有道理的,因为 .NET 没有 DATE 数据类型,只有 DATETIME,并且该属性将包含比 DB2 DATE 列期望的更多数据。
问题是
为什么 .NET 基本代码不使用 ToShortDateString() 自动转换并提供 DB2 所期望的内容?
在 .NET 将 SQL 事务提交到 DB2 之前,可以使用哪些方法来覆盖 .NET 基本逻辑并转换应用程序代码中的值?
任何帮助或反馈将不胜感激。谢谢!
Read 日期时间数据类型转换 (ODBC) http://msdn.microsoft.com/en-us/library/bb677233.aspx。它定义了各种规则datatype conversions
。下面列出了其中之一 - SQLSTATE 22008。
如果从 C 转换为 SQL 时发生秒或小数秒截断,则会生成带有 SQLSTATE 22008 和消息“日期时间字段溢出”的诊断记录。
这里的关键点是确保不会发生truncation
以秒/小数秒为单位
日期数据类型
如果 DB2 数据库列是DATE
数据类型,创建变量,如下所示:
new DateTime(2012,3,4); //No time part
时间戳数据类型
如果 DB2 数据库列是TIMESTAMP
数据类型,删除毫秒小数部分:
dateTime = new DateTime(dateTime.Ticks - (dateTime.Ticks % TimeSpan.TicksPerSecond),dateTime.Kind);
参考:
- 如何从 .NET DateTime 中截断毫秒 https://stackoverflow.com/questions/1004698/how-to-truncate-milliseconds-off-of-a-net-datetime
- 为什么 SQL Server 会丢失一毫秒? https://stackoverflow.com/questions/715432/why-is-sql-server-losing-a-millisecond
DB2 INSERT 获取日期和时间戳
如果在 DB2 中直接使用 SQL 语句插入,
对于时间戳,请使用“2012-12-17-16.53.57.285754”等格式
and
对于 DATE,请使用 CAST ('2012-12-10' AS DATE) 等格式
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)