プロが教える店舗&オフィスのセキュリティ対策術

VB2005 Express SQLServer2003で開発している初心者です。

ループをし、その中でDBへの登録を行いたいと思い、下記のようにコーディング
しましたところ、2回目で下記のエラーになりました。

このカーソルの種類を使用している場合は、トランザクションに複数の Recordset を含むことはできません。カーソルの種類を変更する、トランザクションをコミットする、または Recordset のいずれかを閉じてください。

自分なりに調べて、接続文字列を変数Bにしたところ、エラーが発生しなくなりました。
どうして変数Aだとエラーで、変数Bだとエラーにならないのでしょうか。

すみませんが、どなたかご教授下さい。宜しくお願いします。

変数A="DRIVER=SQL Server;UID=aaa;DATABASE=ccc;Password=bbb;SERVER=ddd"
変数B="Provider=SQLOLEDB.1;Password=bbb;Persist Security Info=True;User ID=aaa;Initial Catalog=ccc;Data Source=ddd"


Dim cn As New ADODB.Connection

cn.Open(変数A)
cn.BeginTrans()

For intCnt = 0 To intRow - 1
 SQL文作成
 cn.Execute(作成したSQL文)
Next

cn.CommitTrans()

A 回答 (1件)

>このカーソルの種類を使用している場合は、トランザクションに複数の Recordset を含むことはできません。

カーソルの種類を変更する、トランザクションをコミットする、または Recordset のいずれかを閉じてください。

このエラーは、SQL Server2003だから仕方ないみたいですね。
「SQL Server 2005 では、データベース エンジンにアクセスするアプリケーションで複数のアクティブな結果セット (MARS) がサポートされるようになりました」と下のURLにあります。
http://msdn.microsoft.com/ja-jp/library/ms131686 …

>変数A="DRIVER=SQL Server;UID=aaa;DATABASE=ccc;Password=bbb;SERVER=ddd"
>変数B="Provider=SQLOLEDB.1;Password=bbb;Persist Security Info=True;User ID=aaa;Initial Catalog=ccc;Data Source=ddd"

変数AはODBC接続、変数BはOledb経由の接続。
変数Bでのみうまく動くのは、SQLOLEDB側で対応できているからでは?
    • good
    • 0
この回答へのお礼

お礼が遅くなってすみません。少しばかり体調を崩してまして。

なるほど。SQLOLEDBでの対応ですか。
もう少し勉強してみます。

ご回答いただき有難うございます。

お礼日時:2012/06/19 14:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています