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 を使用します。