C#Datetime到ODBC日期时间转换错误

时间:2013-12-20 03:46:22

标签: c# sql sql-server datetime odbc

我们正在尝试将ODBC与SQL Server 2012用于我们的新应用程序,因为MS正逐步淘汰OleDb,我们希望尝试将其移植到其他数据库变得容易(更容易?)。

问题是,当我尝试使用ODBC数据访问类时,我在尝试保存日期时遇到以下错误:

  

错误[22008] [Microsoft] [SQL Server Native Client 11.0]日期时间字段   溢出。小数秒精度超过指定的刻度   参数绑定。

好吧,我得到那种。 C#具有比ODBC参数想要使用的更高级别的精度。我知道ODBC实现不喜欢几分之一秒,但是保留日期时间精度的工作是什么?

谢谢,

Dinsdale

编辑:好的,这是原始参数构造函数:

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);

再次感谢Kumod! Dinsdale

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

我想出了如何解决我遇到的问题。我打算早点发帖,但没有机会。我最终使用了SQLDataAdapter并解决了所有问题。出于某种原因,ODBCDataAdapter不喜欢做我想做的事情。无论如何,希望这有助于其他人最终

答案 2 :(得分:0)

我最近遇到了这个错误,没有任何希望将精度的DateTime值处理到不到一秒的时间。所以我将失败的日期时间值输入以下方法:

public static object SetSafeDBDate(System.DateTime dtIn)
    {
        if (dtIn == new DateTime(0))
            return System.DBNull.Value;
        else
            return new DateTime(dtIn.Year,dtIn.Month,dtIn.Day,dtIn.Hour,dtIn.Minute,dtIn.Second);
    }

这解决了我的问题。

答案 3 :(得分:0)

  

小数秒精度超过参数绑定中指定的小数。

这意味着第二个精度大于Scale对象的OdbcParameter属性。 对于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