我有一個(gè)帶有輸入?yún)?shù)的存儲(chǔ)過(guò)程,varchar(max)我們將此參數(shù)插入到類型為表的列中varchar(max)(例如,長(zhǎng)度設(shè)置為-1)。我正在使用 ODBC,因?yàn)槲覀儽慌渲脼槭褂?DSN(它是一個(gè)遺留應(yīng)用程序)。MyOdbcParameter被指定為OdbcType.VarChar。這就是所謂的與ExecuteNonQuery當(dāng)數(shù)據(jù)是完全8000個(gè)字符,它拋出以下異常:InnerException:消息:錯(cuò)誤 [HY104] [Microsoft][ODBC SQL Server Driver]無(wú)效的精度值 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()我無(wú)法在本地重新創(chuàng)建它(錯(cuò)誤發(fā)生在我們的生產(chǎn)系統(tǒng)中,所以我無(wú)法在那里運(yùn)行手動(dòng)測(cè)試)。在研究代碼時(shí),我注意到當(dāng)我們創(chuàng)建 OdbcParameter 時(shí),我們沒(méi)有設(shè)置Size參數(shù)。我正在嘗試找出如何停止錯(cuò)誤。到目前為止,我的想法是:創(chuàng)建時(shí)指定大小OdbcParameter;如果長(zhǎng)度正好是 8000,則在末尾附加一個(gè)空格(它是 XML,所以當(dāng)它被讀回時(shí),它會(huì)被解析成一個(gè),XDocument所以我認(rèn)為附加的空格不會(huì)有任何區(qū)別);也許嘗試使用 aSqlConnection而不是 an OdbcConnection,看看問(wèn)題是否消失。但是因?yàn)槲覠o(wú)法重新創(chuàng)建錯(cuò)誤,所以這一切都是在黑暗中刺傷。錯(cuò)誤的實(shí)際原因可能是什么,修復(fù)它的最佳方法是什么?我知道數(shù)據(jù)頁(yè)發(fā)生了某種變化,或者長(zhǎng)度超過(guò) 8000 的 varchar 發(fā)生了某種變化,但我找不到任何與 ODBC 相關(guān)的具體內(nèi)容。
2 回答

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

小怪獸愛(ài)吃肉
TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊
雖然我還沒(méi)有確定確切的原因,但我發(fā)現(xiàn)將Size
字段設(shè)置OdbcParameter
為數(shù)據(jù)的實(shí)際大小似乎可以解決問(wèn)題。
測(cè)試值正好是 8000 及以下或以上,只是為了驗(yàn)證。
- 2 回答
- 0 關(guān)注
- 744 瀏覽
添加回答
舉報(bào)
0/150
提交
取消