我正在使用桌面应用程序并使用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>
答案 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
类似问题: