- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLServerへの接続子による違いについて)
SQLServerへの接続子による違いとは?
このQ&Aのポイント
- VB2005 Express SQLServer2003で開発している初心者です。ループをし、その中でDBへの登録を行いたいと思い、接続文字列を変数Bにしたところ、エラーが発生しなくなりました。変数Aだとエラーで、変数Bだとエラーにならない理由を教えてください。
- カーソルの種類を使用している場合は、トランザクションに複数の Recordset を含めることはできません。変数Aの接続文字列にはカーソルの種類が含まれており、エラーが発生します。一方、変数Bの接続文字列にはカーソルの種類が含まれていないため、エラーが発生しません。
- 接続文字列の違いによるエラーの原因は、カーソルの種類の違いにあります。接続文字列の変数Aでは、カーソルの種類が指定されており、トランザクションに複数の Recordset を含めることができないためエラーが発生します。一方、変数Bではカーソルの種類が指定されていないため、エラーが発生しません。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>このカーソルの種類を使用している場合は、トランザクションに複数の Recordset を含むことはできません。カーソルの種類を変更する、トランザクションをコミットする、または Recordset のいずれかを閉じてください。 このエラーは、SQL Server2003だから仕方ないみたいですね。 「SQL Server 2005 では、データベース エンジンにアクセスするアプリケーションで複数のアクティブな結果セット (MARS) がサポートされるようになりました」と下のURLにあります。 http://msdn.microsoft.com/ja-jp/library/ms131686.aspx >変数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側で対応できているからでは?
お礼
お礼が遅くなってすみません。少しばかり体調を崩してまして。 なるほど。SQLOLEDBでの対応ですか。 もう少し勉強してみます。 ご回答いただき有難うございます。