为什么用于SQL Server的SQL OLE DB驱动程序会截断日期时间值的秒和小数秒?

时间:2019-04-10 10:40:31

标签: .net sql-server oledb

我们将在旧版.NET应用程序中引入用于SQL Server的OLE DB驱动程序(MSOLEDBSQL),以支持TLS 1.2。该应用程序使用ADO.NET,到目前为止,它一直在使用过时的SQL Server OLE DB提供程序(SQLOLEDB)连接到SQL Server实例。

简而言之,对于新的提供程序,日期时间对象的值表示

'2019-04-10 12:10:55.340'

将被截断,然后另存为

'2019-04-10 12:10:00.000'

当前,唯一的修改是在连接字符串中,对于MSOLEDBSQL,我们现在使用DataTypeCompatibility=80使驱动程序正确地将新数据类型映射到ADO数据类型。日期时间字段的所有现有OLE DB参数仅定义大小,而不定义比例。

这种组合似乎是截断原因的可行部分。从SQL Native Client 9.x到MSOLEDBSQL(https://docs.microsoft.com/en-us/sql/connect/oledb/applications/updating-an-application-from-sql-server-2005-native-client?view=sql-server-2017)时,至少有人读过更改的行为。

  

如果您绑定到类型标识符为DBTYPE_DBTIMESTAMP( OLE DB)或SQL_TIMESTAMP(ODBC),小数位数为0。

     

例如:

     

输入数据:1994-08-21 21:21:36.000

     

插入的数据:1994-08-21 21:21:00.000

如果上述组合是截断的罪魁祸首,那么如何在不显示OleDBException的情况下指定大于0的小数位数?

  

'提供的时间值的小数部分溢出了相应SQL Server参数或列的小数位数。增加DBPARAMBINDINFO中的bScale或列刻度以纠正此错误。'

此外,是否可以通过某种方式设置默认比例,以用于DBTimeStamp类型的所有OLE DB参数?

0 个答案:

没有答案