Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 已达到当前连接的最大语句数。SQLSTATE:HY000,SQLCODE:-1500_C#_Oledb - Fatal编程技术网

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

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"&

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

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

更新查询是

 <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;