【问题标题】:DB2Command with no results ends with no error code .Net没有结果的 DB2Command 以没有错误代码.Net 结尾
【发布时间】:2015-07-28 12:54:36
【问题描述】:

使用ExecuteResultSetExecuteReader 调用存储过程时

using (DB2Connection conn = new DB2Connection(connstr))
{
    conn.Open();
    DB2Command cmd = conn.CreateCommand();
    cmd.Transaction = conn.BeginTransaction();

    DB2Parameter db2param = new DB2Parameter("@ENTERPRISE_ID_PR091", DB2Type.Char, 15);
    db2param.Direction = ParameterDirection.InputOutput;
    db2param.Value = enterpriseID.ToCharArray();
    cmd.Parameters.Add(db2param);

    //... many parameters

    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.CommandText = "XXISCHMA.XXIPW09D"; 

    DB2ResultSet dr = cmd.ExecuteResultSet(DB2ResultSetOptions.Scrollable);
}

在 Web API 中抛出异常:

SQL0035N 无法打开文件“C:\Users\documents\visual studio 2013\Projects\App\Web\msg\en_US\db2nmp.xml”

在其他应用程序中抛出异常:

错误 [22023] [IBM][DB2] SQL0310N SQL 语句包含太多 宿主变量。

我认为异常文本不正确...

这是设计使然吗?

在COBOL中返回-310的SQL代码,即“DECIMAL HOST VARIABLE OR PARAMETER number CONTAINS NON-DECIMAL DATA”。

【问题讨论】:

  • 我认为错误信息是正确的:cmd.CommandText = "XXISCHMA.XXIPW09D"中没有参数标记,所以你使用cmd.Parameters.Add(db2param)是没有意义的。
  • 它在 sp 找到一行时起作用。据我了解,参数标记用于 cmandtype 文本,即“CALL spname(?,?,?)”
  • 好的,我可以在 Web API 控制器中捕获异常。那么为什么ExecuteResultSet首先抛出异常的问题。
  • SQL0035N 是关于缺少错误消息文件 -- see if this helps
  • 感谢有关 SQL0035N 的信息 - 现在我收到异常 ERROR [22023] [IBM][DB2] SQL0310N SQL 语句包含太多主机变量。 @mustaccio

标签: c# .net db2 cobol db2-connect


【解决方案1】:

原来返回到 COBOL 测试程序的错误 -310 是要查看的错误。

所以我们将 COBOL 存储过程中的 DECIMAL TO NUMBER 更改为返回参数而不是异常。

仍然不知道为什么只有在选择找不到任何记录时才会出现问题。我只看世界的 c# 方面。 Oy veh!

【讨论】:

    猜你喜欢
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2021-01-16
    相关资源
    最近更新 更多