Почему драйвер SQL OLE DB для SQL Server усекает секунды и доли секунды для значений даты и времени? - PullRequest
0 голосов
/ 10 апреля 2019

Мы представляем драйвер OLE DB для SQL Server (MSOLEDBSQL) в нашем устаревшем приложении .NET для поддержки TLS 1.2.Приложение использует ADO.NET и до сих пор использует устаревший поставщик OLE DB для SQL Server (SQLOLEDB) для подключения к экземплярам SQL Server.

Короче говоря, у нового поставщика есть объект datetime со значениемпредставляющий

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

будет усечен и затем сохранен как

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

В настоящее время единственные изменения находятся в строке подключения, где у нас теперь для MSOLEDBSQL есть DataTypeCompatibility=80 для драйвераправильно сопоставить новые типы данных с типами данных ADO.Все существующие параметры OLE DB для полей даты и времени определяют только размер, но не масштаб.

Эта комбинация может показаться допустимой частью причины усечения.По крайней мере, если вы читаете измененное поведение при переходе от собственного клиента SQL 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).

Приложение, созданное с драйвером OLE DB для SQL Server, которое подключается к серверу SQL Server 2005будет обрезать секунды и доли секунды для временной части данных, отправляемых на сервер, если вы связываетесь со столбцом datetime с идентификатором типа DBTYPE_DBTIMESTAMP (OLE DB) или SQL_TIMESTAMP (ODBC) и шкалой 0.

Дляпример:

Входные данные: 1994-08-21 21: 21: 36.000

Вставленные данные: 1994-08-21 21: 21: 00.000

Если приведенная выше комбинация является причиной усечения, то как вы можете указать масштаб> 0, не получая OleDBException со следующим сообщением?

'Дробная частьуказанное значение времени переполняет масштаб соответствующего параметра или столбца SQL Server. Увеличьте bScale в DBPARAMBINDINFO или масштаб столбца, чтобы исправить эту ошибку. '

Adвозможно ли как-то установить масштаб по умолчанию, который будет использоваться для всех параметров OLE DB типа DBTimeStamp?

...