【发布时间】:2015-07-28 12:54:36
【问题描述】:
使用ExecuteResultSet 或ExecuteReader 调用存储过程时
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