C#日期时间到ODBC日期时间转换错误 [英] C# Datetime to ODBC Datetime conversion error

查看:34
本文介绍了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日期时间转换错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆