算术运算导致溢出。在AS400中删除数据时

时间:2012-11-26 02:53:52

标签: c# db2 ibm-midrange

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


这是源代码:

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

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

2 个答案:

答案 0 :(得分:3)

您是否有实际的SQL错误代码?您可以使用SQL message finder获取更多详细信息。

我建议从Collecting an ODBC Trace (SQL.LOG)开始确定任何问题。

如果这无济于事,我会使用Server-side ODBC diagnostic and performance tools中列出的步骤检查 QZDASOINIT作业日志

答案 1 :(得分:2)

迟到这个问题,但我会留下这个以防其他人遇到这个问题。在调用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解决了这个问题。