为了账号安全,请及时绑定邮箱和手机立即绑定

ODBC varchar(max) 参数似乎为 8000 个字符抛出“HY104 - 无效精度值”

ODBC varchar(max) 参数似乎为 8000 个字符抛出“HY104 - 无效精度值”

C#
皈依舞 2022-01-09 17:39:42
我有一个带有输入参数的存储过程,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 中引入的数据类型。


查看完整回答
反对 回复 2022-01-09
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

虽然我还没有确定确切的原因,但我发现将Size字段设置OdbcParameter为数据的实际大小似乎可以解决问题。

测试值正好是 8000 及以下或以上,只是为了验证。


查看完整回答
反对 回复 2022-01-09
  • 2 回答
  • 0 关注
  • 768 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号