簡體   English   中英

將連接字符串中的Provider更改為TLS1.2兼容會導致參數在datetime時失敗

[英]Changing Provider in connection string to be TLS1.2 Compatible causes parameters to fail with datetime

我有一個使用oledb的現有應用程序,現在需要升級到TLS1.2兼容的應用程序。 因此,我下載了用於SQLServer®的Microsoft®OLE DB Driver 18,以使其正常工作,我需要在

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)

我嘗試查詢參數的列具有日期時間類型

當我使用此類參數執行查詢時,它們都將失敗,並顯示以下錯誤消息:

“命令參數[0]的轉換失敗,因為數據值溢出了提供程序使用的類型。”

內部例外:

“提供的時間值的小數部分會溢出相應的SQL Server參數或列的小數位數。增加DBPARAMBINDINFO或列小數位數的bScale可以糾正此錯誤。”

這是堆棧跟蹤:在System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,Object&executeResult)在System.Data.OleDb.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)在System.Data.OleDb.OleDbCommand。 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior行為,String方法)的System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior行為)的System.Data.Common.DbDataAdapter.FillInternal(DataSet數據集,DataTable []的executeResult)數據表,位於System.Data.Common.DbDataAdapter.Fill處的Int32 startRecord,Int32 maxRecords,字符串srcTable,IDbCommand命令,CommandBehavior行為)(位於System.Data處的DataTable [] dataTables,Int32 startRecord,Int32 maxRecords,IDbCommand命令,CommandBehavior行為)。 Common.DbDataAdapter.Fill(數據表dataTable)

如果我將提供程序改回SQLOLEDB,那么它將正常工作。 到目前為止,我只發現日期字段存在問題。 我尚未進行廣泛的測試以驗證其他領域也可能存在此問題。 沒有人知道是什么原因導致了這種情況以及可能的解決方案,而沒有更改以前編寫的成千上萬的查詢嗎?

我遇到了同樣的問題。 似乎有2個解決方案,兩者都在更改代碼

(1)自己管理毫秒,而不要使用DateTime.Now。 以下代碼將獲取Now日期,而無需毫秒

DateTime currentDate = System.DateTime.Now;
currentDate = new DateTime(currentDate.Year, currentDate.Month, currentDate.Day, currentDate.Hour, currentDate.Minute, currentDate.Second);  // removes milliseconds & ticks

(2)設置OleDbParameter的小數位數

OleDbParameter parameter = new OleDbParameter("Price", OleDbType.Decimal); 
parameter.Value = 3.1416; 
parameter.Precision = 8; 
parameter.Scale = 4; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM