【问题标题】:C# Datetime to ODBC Datetime conversion errorC# Datetime 到 ODBC Datetime 转换错误
【发布时间】:2014-01-08 20:41:27
【问题描述】:

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

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

错误 [22008] [Microsoft][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);

再次感谢 Kumod! 丁斯代尔

【问题讨论】:

  • 您能否举例说明您是如何使用发生这些错误的调用的?

标签: c# sql sql-server datetime odbc


【解决方案1】:

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

表示第二个精度大于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

【讨论】:

    【解决方案2】:

    我最近遇到了这个错误,不想处理精度低于一秒的 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】:

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

      【讨论】:

        【解决方案4】:

        【讨论】:

        • 谢谢库莫德。我没有在参数构造函数中指定比例。一旦我添加了它,它就像一个魅力。
        猜你喜欢
        • 2019-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-16
        • 1970-01-01
        • 2013-06-21
        • 2015-09-05
        • 2019-06-24
        相关资源
        最近更新 更多