我们正在尝试将ODBC与SQL Server 2012用于我们的新应用程序,因为MS正逐步淘汰OleDb,我们希望尝试将其移植到其他数据库变得容易(更容易?)。
问题是,当我尝试使用ODBC数据访问类时,我在尝试保存日期时遇到以下错误:
好吧,我得到那种。 C#具有比ODBC参数想要使用的更高级别的精度。我知道ODBC实现不喜欢几分之一秒,但是保留日期时间精度的工作是什么?错误[22008] [Microsoft] [SQL Server Native Client 11.0]日期时间字段 溢出。小数秒精度超过指定的刻度 参数绑定。
谢谢,
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
答案 0 :(得分:1)
阅读给定的链接,这些链接可以帮助您
http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/operand-type-clash-date-is-incompatible--2008 http://rightondevelopment.blogspot.in/2009/10/sql-server-native-client-100-datetime.html
答案 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