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