我有一個帶有輸入參數的存儲過程,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 ServerWindows 附帶的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
提交
取消
