ODOSドライバを利用したアプリケーション運用中に発生するエラー「JYP2008E」の原因と対処について

ODOSドライバを利用したアプリケーション運用中に「JYP2008E 同時に操作できるSQL文の数を超えました.」というエラーが発生します。
原因と対処方法を教えてください。
1つのコネクションオブジェクト内で同時に保持できる以下のオブジェクトの数が、CLI_MAX_SQLの設定値を超えたために発生するエラーです。

  • RDOの場合 rdoQueryオブジェクト、rdoResultsetオブジェクト
  • ADOの場合 Commandオブジェクト、Recordsetオブジェクト
  • ADO.NETの場合 OdbcCommandオブジェクト、OdbcDataAdapterオブジェクト

上記オブジェクトが不要になった場合には、必ずNothingキーワードやDisposeメソッドでオブジェクトを明示的に破棄するようにしてください。
また、SQL文を複数回実行する場合には、オブジェクトの作成と実行を繰り返すのではなく、以下のプロパティを変更し実行するようにしてください。

  • RDOの場合 rdoQuery.SQLプロパティ
  • ADOの場合 Command.CommandTextプロパティ
  • ADO.NETの場合 OdbcCommand.CommandTextプロパティ

【繰り返しSQL文を実行する例(RDO)】

'オブジェクト宣言
Dim Env As rdoEnvironment
Dim Con As rdoConnection
Dim Qry As rdoQuery

'rdoEnvironmentオブジェクトの生成

Set Env = rdoEngine.rdoEnvironments(0)

'コネクション接続
Set Con = Env.OpenConnection("DSN01", rdDriverNoPrompt, _False, "UID=USER01;PWD=PASS01;")

'rdoQueryオブジェクトの生成
Set Qry = Con.CreateQuery("", "")

'1回目のSQL文設定と実行
Qry.SQL = _"INSERT INTO TESTTBL VALUES(200,1000.025,DATE'2005-12-31','INSERT DATA')"
Qry.Execute (rdExecDirect)

'2回目のSQL文設定と実行
Qry.SQL = _"INSERT INTO TESTTBL VALUES(201,2000.025,DATE'2005-12-31','INSERT DATA2')"
Qry.Execute (rdExecDirect)

'rdoQueryオブジェクトの破棄
Set Qry = Nothing

'コネクション切断
Con.Close

'オブジェクトの破棄
Set Con = Nothing
Set Env = Nothing

【繰り返しSQL文を実行する例(ADO)】

'オブジェクト宣言
Dim Con As Connection
Dim Com As Command

'Connectionオブジェクトの生成
Set Con = New Connection
Con.ConnectionString = "DSN=DSN01;UID=USER01;PWD=PASS01;"

'コネクション接続
Con.Open

'Commandオブジェクトの生成と設定
Set Com = New Command
Com.ActiveConnection = Con
Com.CommandType = adCmdText

'1回目のSQL文設定と実行
Com.CommandText = _"INSERT INTO TESTTBL VALUES(200,1000.025,DATE'2005-12-31','INSERT DATA')"
Com.Execute

'2回目のSQL文設定と実行
Com.CommandText = _"INSERT INTO TESTTBL VALUES(201,2000.025,DATE'2005-12-31','INSERT DATA2')"
Com.Execute

'Commandオブジェクトの破棄
Set Com = Nothing

'コネクション切断
Con.Close

'Connectionオブジェクトの破棄
Set Con = Nothing

【繰り返しSQL文を実行する例(ADO.NET)】

'オブジェクト宣言
Dim con As Microsoft.Data.Odbc.OdbcConnection
Dim com As Microsoft.Data.Odbc.OdbcCommand

Dim i As Integer

'OdbcConnectionオブジェクトの生成
con = New Microsoft.Data.Odbc.OdbcConnection("DSN=DSN01;UID=USER01;PWD=PASS01")

'コネクション接続
con.Open()

'OdbcCommandオブジェクトの生成
com = New System.Data.Odbc.OdbcCommand
com.Connection = con

'1回目のSQL文設定と設定
com.CommandText = _"INSERT INTO TESTTBL VALUES(200,1000.025,DATE'2005-12-31','INSERT DATA')"
com.ExecuteNonQuery()

'2回目のSQL文設定と設定
com.CommandText = _"INSERT INTO TESTTBL VALUES(201,2000.025,DATE'2005-12-31','INSERT DATA2')"
com.ExecuteNonQuery()

'OdbcCommandオブジェクトの破棄
com.Dispose()

'コネクション切断
con.Close()

'OdbcConnectionオブジェクトの破棄
con.Dispose()
製品・サービス区分 Symfoware
製品・サービス情報
対象製品 Symfoware Server (Native Interface)
プラットフォーム Windows, Solaris, Linux
アンサー種別 運用/保守
このページの先頭へ