我有一个带有输入参数的存储过程,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 关注
- 768 浏览
添加回答
举报
0/150
提交
取消