0

当我试图从 AS400 中删除数据时,我遇到了一个奇怪的错误。当我执行这个程序时,在状态 cmd.ExecuteNonQuery() 我得到算术运算导致溢出。
我在这里没有使用任何数字,但我得到了这样的错误。
我试过调试这个程序,但是执行 cmd.ExecuteNonQuery() 语句时没有问题。但是当我运行可执行文件时,总是会出现错误。我不明白我犯了什么错误。希望有人可以帮助我。谢谢...


这是源代码:

...                
using (OdbcCommand cmd = new OdbcCommand())
{
   cmd.Connection = conn;
   cmd.CommandText = "DELETE FROM MDPDTAM.IWMDPOC";
   cmd.ExecuteNonQuery();
}
...

我尝试从 AS400 手动执行查询,它工作正常。

4

2 回答 2

3

你有实际的 SQL 错误代码吗?您可以使用SQL 消息查找器获取更多详细信息。

我建议从收集 ODBC 跟踪 (SQL.LOG)开始以识别任何问题。

如果这没有帮助,我将使用Server-side ODBC diagnostic and performance tools中概述的步骤检查QZDASOINIT 作业日志

于 2012-11-26T04:31:54.823 回答
3

迟到了这个问题,但我会留下这个以防其他人遇到这个问题。在调用 AS400 程序时,我也遇到了算术溢出,该程序没有返回任何数据并且正在使用ExecuteNonQuery.

关键是堆栈跟踪:

   at System.Data.Odbc.OdbcStatementHandle.RowCount(SQLLEN& rowCount)
   at System.Data.Odbc.OdbcDataReader.GetRowCount()
   at System.Data.Odbc.OdbcDataReader.FirstResult()
   at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod)
   at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader)
   at System.Data.Odbc.OdbcCommand.ExecuteNonQuery()

即使调用没有返回任何行,也会抛出异常处理返回代码。

我发现该项目已切换到创建 64 位应用程序而不是 32 位(甚至 vshost 可执行文件也是 64 位)。正在使用的 ODBC 驱动程序是 32 位的,因此不匹配会导致异常。将项目更改为 x86 解决了该问题。

于 2015-05-07T11:53:29.610 回答