Share via


ODBC カーソル ライブラリ

ODBC ドライバの中には、既定のカーソル設定しかサポートしないものがあります。このようなドライバでは、SQLSetPos などのカーソルの位置指定操作もサポートされません。ODBC カーソル ライブラリは、通常はブロック カーソルや静的カーソルがサポートされないドライバに対して、これらのカーソルを実装するときに使用される MDAC (Microsoft Data Access Components) のコンポーネントです。また、カーソル ライブラリでは、作成するカーソル用の位置指定の UPDATE ステートメントや DELETE ステートメント、および SQLSetPos も実装されます。

ODBC カーソル ライブラリは、ODBC ドライバ マネージャと ODBC ドライバの中間層として実装されます。ODBC ドライバ マネージャは、ODBC カーソル ライブラリが読み込まれると、すべてのカーソル関連コマンドをドライバではなく、読み込んだカーソル ライブラリにルーティングします。カーソル ライブラリでは、基になるドライバから結果セット全体をフェッチし、その結果セットをクライアントにキャッシュすることにより、カーソルを実装します。ODBC カーソル ライブラリを使用しているときは、アプリケーションではカーソル ライブラリのカーソル機能だけをサポートし、基になるドライバの追加のカーソル機能はサポートしません。

SQL Server Native Client ODBC ドライバでは、ODBC カーソル ライブラリよりも多くのカーソル機能をサポートしているので、ODBC カーソル ライブラリを SQL Server Native Client ODBC ドライバと併用する必要はほとんどありません。ODBC カーソル ライブラリを SQL Server Native Client ODBC ドライバと併用する唯一の理由は、ドライバのカーソル サポートがサーバー カーソルを介して実装されており、サーバー カーソルですべての SQL ステートメントはサポートされていないためです。ストアド プロシージャ、バッチ、または COMPUTE、COMPUTE BY、FOR BROWSE、INTO などを含む SQL ステートメントで静的カーソルを使用する必要がある場合は、ODBC カーソル ライブラリの使用を検討してください。ただし、カーソル ライブラリを使用する場合、結果セット全体がクライアントにキャッシュされるので、大量のメモリが使用され、パフォーマンスが低下することがあるので注意が必要です。

アプリケーションでは、SQLSetConnectAttr を使用して接続ごとにカーソル ライブラリを呼び出し、データ ソースへの接続前に SQL_ATTR_ODBC_CURSORS 接続属性を設定します。SQL_ATTR_ODBC_CURSORS には、次の 3 つの値のいずれかを設定します。

  • SQL_CUR_USE_ODBC
    SQL Server Native Client ODBC ドライバとの併用時にこのオプションを設定すると、SQL Server Native Client ODBC ドライバのネイティブ カーソル サポートよりも ODBC カーソル ライブラリが優先されます。接続で使用できるのは、カーソル ライブラリでサポートされているカーソルのみで、サーバー カーソルは使用できません。

  • SQL_CUR_USE_DRIVER
    このオプションを設定すると、SQL Server Native Client ODBC ドライバ固有のすべてのカーソル サポートを接続に使用できます。この場合、ODBC カーソル ライブラリは使用できません。すべてのカーソルはサーバー カーソルとして実装されます。

  • SQL_CUR_USE_IF_NEEDED
    このオプションを設定した場合の効果は、SQL Server Native Client ODBC ドライバを併用するときに、SQL_CUR_USE_DRIVER を設定した場合と同じになります。ODBC ドライバ マネージャでは、接続時に SQLFetchScroll の SQL_FETCH_PRIOR オプションが接続先の ODBC ドライバによってサポートされているかどうかをテストします。ドライバでこのオプションがサポートされていない場合、ODBC ドライバ マネージャは ODBC カーソル ライブラリを読み込みます。サポートされている場合、ODBC ドライバ マネージャは ODBC カーソル ライブラリを読み込みません。この場合、アプリケーションではドライバのネイティブ サポートが使用されます。SQL Server Native Client ODBC ドライバでは SQL_FETCH_PRIOR がサポートされているので、ODBC ドライバ マネージャは ODBC カーソル ライブラリを読み込みません。

カーソル ライブラリにより、アプリケーションはスクロール可能なカーソルや更新可能なカーソルを使用できるだけでなく、1 つの接続に対して複数のアクティブ ステートメントを使用できます。この機能をサポートする場合は、カーソル ライブラリを読み込む必要があります。また、カーソル ライブラリの使用方法を指定するときは SQLSetConnectAttr を使用し、カーソルの種類、同時実行、および行セット サイズを指定するときは SQLSetStmtAttr を使用します。