已达到当前连接的最大语句数。 SQLSTATE:HY000,SQLCODE:-1500

时间:2017-12-12 09:10:38

标签: c# oledb

我正在使用桌面应用程序并使用OLEDB提供程序连接到DB2数据库。在尝试使用不同的值执行100次更新语句时,我得到了异常 “已达到当前连接的最大语句数.SQLSTATE:HY000,SQLCODE:-1500。”

我能够成功执行15次更新语句。 如何增加一个连接的语句限制? 我添加了'MARS Connection = True;'在连接字符串中。但它不起作用:(

    OleDbConnection conn = new OleDbConnection("ConnectionString");
        conn.Open();
        DbTransaction  trans = conn.BeginTransaction();
        ConnectionInfo connInfo = new ConnectionInfo(trans);

    DBCommandWrapper cmdUpdate = cmdFactory.CreateDBCommandWrapper(connInfo.Connection, "UpdateAccount", connInfo.Transaction);
        cmdUpdate.SetParameterValue("@CustomerNumber", intToCustomerNumber);
        cmdUpdate.SetParameterValue("@BankNumber", account.BankNumber);
        cmdUpdate.SetParameterValue("@AccountNumber", Convert.ToDouble(account.AccountNumber.Trim()));
        RowsAffected = cmdUpdate.CommandObject.ExecuteNonQuery();

更新查询

 <command name="UpdateAccount" commandType="Text">
  <commandText>
    UPDATE #.ACCOUNT1
    SET CustNum = ?
    WHERE BankNum = ?
    AND AcctNum = ?
  </commandText>
  <parameters>
    <parameter name="@CustomerNumber" dbType="Decimal" scale="0" precision="0" size="0" direction="Input" value="" isNullable="false" sourceColumn="" sourceVersion="Default" />
    <parameter name="@BankNumber" dbType="Decimal" scale="0" precision="0" size="0" direction="Input" value="" isNullable="false" sourceColumn="" sourceVersion="Default" />
    <parameter name="@AccountNumber" dbType="Double" scale="0" precision="0" size="0" direction="Input" value="" isNullable="false" sourceColumn="" sourceVersion="Default" />
  </parameters>
</command>

1 个答案:

答案 0 :(得分:1)

正如Troubleshooting the OLE DB Provider for DB2中所述,SQLCODE:-1500表示DB2OLEDB_MAX_SECTIONS,它解释了此消息:

  

已达到最大语句数(128)   目前的联系。

默认情况下,DB2的OLE DB提供程序使用128个包部分,允许客户端为每个启动的连接执行128个并发预准备语句。如果未完成的并发语句超过默认预定义部分的数量,则无法执行新语句。

对于大多数问题,部分限制似乎是从OLE DB提供程序设置硬编码,但您可以尝试在注册表中找到名为REG_DWORD的{​​{1}}密钥(请参阅this reference)。如果密钥存在,请使用大于128的2个数字(例如256,512等)修改它,然后重新创建包,否则您需要在当前连接中使用较少量的预准备语句来解决此问题。

更新1

NumberOfPackages表示此问题基于DB2 documentation

  

在应用程序输入参数中发现错误   SQL语句。

     

原因:准备立即执行。

换句话说,该消息告诉调用参数列表或SQLDA无效,这与EXECUTE IMMEDIATE命令(通常用于动态SQL字符串)有关。

带有动态查询字符串的DB2更新过程应如下所示:

SQLSTATE: 07002, SQLCODE: -804

类似问题:

The maximum number of statements has been reached for the current connection. SQLSTATE: HY000, SQLCODE:-1500