У меня есть существующее приложение, которое использует oledb через приложение, теперь требуется обновление для совместимости с TLS1.2.Поэтому я скачал Microsoft® OLE DB Driver 18 для SQL Server®, чтобы он работал, мне нужно было изменить провайдера в строке подключения с
Provider=SQLOLEDB; Server={0}; Database={1}; {2}; Connection Timeout=60;
на
Provider=SQLNCLI11; Server={0}; Database={1}; {2}; Connection Timeout=60;
Это привело к тому, что мои предыдущие запросы с параметрами были добавлены следующим образом:
cmd.Parameters.AddWithValue("@lastRun", lastRun.ToUniversalTime)
столбец, с которым я пытаюсь запросить параметр, имеет тип datetime
, когда я выполняю запросы с такими параметрами, каквсе они терпят неудачу с сообщением об ошибке, подобным этому:
"Преобразование не удалось для параметра команды [0] '', потому что значение данных превысило тип, используемый поставщиком."
с внутренним исключением:
"Дробная часть предоставленного значения времени переполняет масштаб соответствующего параметра или столбца SQL Server. Увеличьте bScale в DBPARAMBINDINFO или масштаб столбца, чтобы исправить эту ошибку."
, а вот трассировка стека: в System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling (OleDbHResult hr) в System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResARDaseMaseDesultStateStateStateStateStateStateStateState)OleDb.OleDbCommand.ExecuteCommandText (Object & executeResult) в System.Data.OleDb.OleDbCommand.ExecuteReaderInternal (поведение CommandBehavior, метод String) в System.Data.OleDb.OleDbCommand.ExecuteReader (Command)(Набор данных DataSet, DataTable [] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, команда IDbCommand, поведение CommandBehavior) в System.Data.Common.DbDataAdapter.Fill (DataTable [] dataTables, Int32 startRecord, Int32 maxRecords, команда IDbCommand, поведение CommandBehavior) в System.Data.Common.DbDataAdapter.Fill (DataTable dataTable)
, если я верну провайдера обратно в SQLOLEDB, тогда он будет работать нормально.До сих пор я обнаружил только проблему с полем даты.Я не проводил подробного тестирования, чтобы убедиться, что другие поля тоже могут иметь эту проблему.Кто-нибудь знает, что является причиной этого и возможных решений без изменения десятков тысяч запросов, которые были ранее написаны?