C# 已达到当前连接的最大语句数。SQLSTATE:HY000,SQLCODE:-1500
我正在开发一个桌面应用程序,并使用OLEDB提供程序连接到DB2数据库。当尝试使用不同的值执行update语句100次时,我遇到了异常 已达到当前连接的最大语句数。SQLSTATE:HY000,SQLCODE:-1500 我能够成功地执行update语句15次。 如何增加一个连接的语句限制? 我添加了'MARS Connection=True;'在连接字符串中。但它不起作用:( 更新查询是C# 已达到当前连接的最大语句数。SQLSTATE:HY000,SQLCODE:-1500,c#,oledb,C#,Oledb,我正在开发一个桌面应用程序,并使用OLEDB提供程序连接到DB2数据库。当尝试使用不同的值执行update语句100次时,我遇到了异常 已达到当前连接的最大语句数。SQLSTATE:HY000,SQLCODE:-1500 我能够成功地执行update语句15次。 如何增加一个连接的语句限制? 我添加了'MARS Connection=True;'在连接字符串中。但它不起作用:( 更新查询是 <command name="UpdateAccount" commandType="Text"&
<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>
更新#.ACCOUNT1
设置CustNum=?
其中BankNum=?
和AcctNum=?
如中所述,SQLCODE:-1500
表示DB2OLEDB\u MAX\u节
,这解释了此消息:
已达到的语句的最大数目(128)
电流连接
默认情况下,OLE DB provider for DB2使用128个包节,这允许客户端为每个启动的连接执行128条并发准备的语句。如果未完成的并发语句超过默认预定义节的数量,则无法执行新语句
对于大多数问题,分区限制似乎是从OLE DB提供程序设置中硬编码的,但您可以尝试在注册表中找到名为NumberOfPackages
的REG\u DWORD
项(请参阅)。如果该项存在,请使用128以上的2个数字的幂来修改它(例如256、512等)然后重新创建包,否则您需要在当前连接中使用较少的准备语句进行变通,以避免出现异常
更新1
SQLSTATE:07002,SQLCODE:-804
表示此问题基于:
在的应用程序输入参数中发现错误
SQL语句
原因:准备立即执行
换句话说,消息告诉我们调用参数列表或SQLDA无效,这与命令有关(通常用于动态SQL字符串)
带有动态查询字符串的DB2更新过程应如下所示:
CREATE OR REPLACE PROCEDURE UpdateDDATransferAccount(IN [parameter_name] [data_type](size) ...)
-- query settings
BEGIN
DECLARE statement = VARCHAR(2000) -- size of query string
SET statement = 'UPDATE [schema].' || '[table_name]' || ' SET [field_name] = ' || '[parameter_name]' || ' ... ' WHERE ' || '[field_name]' || ' = ' || '[parameter_name_or_value]';
EXECUTE IMMEDIATE statement;
END;
类似问题:
该异常已解决。现在我得到了该异常,“当前请求的应用程序参数无效。原因代码03。SQLSTATE:07002,SQLCODE:-804”请检查
UpdatedDataransferAccount
存储过程,并将其发布在问题正文中(如果可以的话),以便进一步分析。此时,我用您当前的异常消息更新了信息。谢谢您,山本哲也。主要问题,“当前连接已达到最大语句数”已解决。因此,我将此标记为已解决。我已在上提供了有关第二个异常的更多信息
CREATE OR REPLACE PROCEDURE UpdateDDATransferAccount(IN [parameter_name] [data_type](size) ...)
-- query settings
BEGIN
DECLARE statement = VARCHAR(2000) -- size of query string
SET statement = 'UPDATE [schema].' || '[table_name]' || ' SET [field_name] = ' || '[parameter_name]' || ' ... ' WHERE ' || '[field_name]' || ' = ' || '[parameter_name_or_value]';
EXECUTE IMMEDIATE statement;
END;