我有一個帶有輸入參數的存儲過程,varchar(max)我們將此參數插入到類型為表的列中varchar(max)(例如,長度設置為-1)。我正在使用 ODBC,因為我們被配置為使用 DSN(它是一個遺留應用程序)。MyOdbcParameter被指定為OdbcType.VarChar。這就是所謂的與ExecuteNonQuery當數據是完全8000個字符,它拋出以下異常:InnerException:消息:錯誤 [HY104] [Microsoft][ODBC SQL Server Driver]無效的精度值 StackTrace:在 System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle,RetCode retcode)在 System.Data.Odbc.OdbcParameter.Bind( System.Data.Odbc.OdbcParameterCollection.Bind(OdbcCommand command, CMDWrapper cmdWrapper, CNativeBuffer parameterBuffer) 在 System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior 行為, String System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior 行為, String 方法, Boolean needReader) 在 System.Data.Odbc.OdbcCommand.ExecuteNonQuery()我無法在本地重新創建它(錯誤發生在我們的生產系統中,所以我無法在那里運行手動測試)。在研究代碼時,我注意到當我們創建 OdbcParameter 時,我們沒有設置Size參數。我正在嘗試找出如何停止錯誤。到目前為止,我的想法是:創建時指定大小OdbcParameter;如果長度正好是 8000,則在末尾附加一個空格(它是 XML,所以當它被讀回時,它會被解析成一個,XDocument所以我認為附加的空格不會有任何區別);也許嘗試使用 aSqlConnection而不是 an OdbcConnection,看看問題是否消失。但是因為我無法重新創建錯誤,所以這一切都是在黑暗中刺傷。錯誤的實際原因可能是什么,修復它的最佳方法是什么?我知道數據頁發生了某種變化,或者長度超過 8000 的 varchar 發生了某種變化,但我找不到任何與 ODBC 相關的具體內容。
2 回答

MYYA
TA貢獻1868條經驗 獲得超4個贊
SQL Server
Windows 附帶的ODBC 驅動程序尚未針對 SQL 2000 之后引入的新功能進行更新,并且僅適用于需要向后兼容為 SQL 2005 之前的世界開發的舊應用程序的情況。
嘗試使用現代 ODBC 驅動程序,例如ODBC Driver 17 for SQL Server
直接支持varchar(MAX)
SQL 2005 中引入的數據類型。

小怪獸愛吃肉
TA貢獻1852條經驗 獲得超1個贊
雖然我還沒有確定確切的原因,但我發現將Size
字段設置OdbcParameter
為數據的實際大小似乎可以解決問題。
測試值正好是 8000 及以下或以上,只是為了驗證。
- 2 回答
- 0 關注
- 743 瀏覽
添加回答
舉報
0/150
提交
取消