本文介绍了C#日期时间到ODBC日期时间转换错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我们正在尝试将ODBC与SQL Server 2012一起用于我们的新应用程序,因为MS正在逐步淘汰OleDb,我们希望让它变得更简单(更容易?)以移植到其他数据库。
问题是,当我尝试使用ODBC数据访问类时,在尝试保存DateTime时收到以下错误:
错误[22008][微软][SQL Server Native Client 11.0]日期时间字段 溢出来了。中指定的小数位数秒精度 参数绑定。
好的,我明白这一点。C#具有比ODBC参数要使用的更高的精度级别。我知道ODBC实现不喜欢秒的分数,但是有什么办法来保持日期时间的精确度呢?
谢谢,
丁斯代尔
编辑:好的,这里是原始参数构造函数:
String Name = "created";
DateTime DateTimeValue = DateTime.Now;
OdbcCommand cmd = new OdbcCommand();
cmd.CommandType = request.CommandType;
cmd.CommandText = request.Command;
OdbcParameter param;
param = new OdbcParameter(Name, OdbcType.DateTime);
param.Value = DateTimeValue;
cmd.Parameters.Add(param);
此代码生成以下错误:
错误[22008][MICROSOFT][SQL Server Native Client 11.0]日期时间字段溢出。小数秒精度超过参数绑定中指定的小数位数。
修复方法是使用扩展构造函数,如下所示:
param = new OdbcParameter(Name, OdbcType.DateTime, 23, System.Data.ParameterDirection.Input, false, 0, 3, Name, DataRowVersion.Current, DateTimeValue);
再次感谢库莫德! 丁斯代尔
推荐答案
小数秒精度超过参数绑定中指定的小数位数。
表示第二个精度大于OdbcParameter
对象的Scale
属性。
对于DateTime
格式:
yyyy-mm-dd hh:mm
-Precision = 16, Scale = 0
yyyy-mm-dd hh:mm:ss
-Precision = 19, Scale = 0
这里是需要超过Scale
属性的(默认为0
)
yyyy-mm-dd hh:mm:ss.f
-Precision = 21, Scale = 1
yyyy-mm-dd hh:mm:ss.ff
-Precision = 22, Scale = 2
yyyy-mm-dd hh:mm:ss.fff
-Precision = 23, Scale = 3
每个f
都是额外的小数位秒精度
OdbcParameter param = new OdbcParameter( "name", OdbcType.DateTime );
param.Value = DateTime.Now;
param.Precision = 23;
param.Scale = 3; // <-- you need to set this property
这篇关于C#日期时间到ODBC日期时间转换错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!