我们将在旧版.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参数?