我有一个带有输入参数的存储过程,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 相关的具体内容。
MYYA
小怪兽爱吃肉
相关分类