ODBC カーソル ライブラリ
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
一部の ODBC ドライバーでは、既定のカーソル設定のみがサポートされます。これらのドライバーは、 SQLSetPos などの位置指定されたカーソル操作もサポートしていません。 ODBC カーソル ライブラリは、通常はブロック カーソルや静的カーソルがサポートされないドライバーに対して、これらのカーソルを実装するときに使用される MDAC (Microsoft Data Access Components) のコンポーネントです。 また、カーソル ライブラリは、位置指定された UPDATE ステートメントと DELETE ステートメント、および作成するカーソルの SQLSetPos も実装します。
ODBC カーソル ライブラリは、ODBC ドライバー マネージャーと ODBC ドライバーの中間層として実装されます。 ODBC ドライバー マネージャーは、ODBC カーソル ライブラリが読み込まれると、すべてのカーソル関連コマンドをドライバーではなく、読み込んだカーソル ライブラリにルーティングします。 カーソル ライブラリでは、基になるドライバーから結果セット全体をフェッチし、その結果セットをクライアントにキャッシュすることにより、カーソルを実装します。 ODBC カーソル ライブラリを使用しているときは、アプリケーションではカーソル ライブラリのカーソル機能だけをサポートし、基になるドライバーの追加のカーソル機能はサポートしません。
ドライバー自体は ODBC カーソル ライブラリよりも多くのカーソル機能をサポートしているため、SQL Server Native Client ODBC ドライバーで ODBC カーソル ライブラリを使用する必要はほとんどありません。 SQL Server Native Client ODBC ドライバーで 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 ドライバーで設定すると、ODBC カーソル ライブラリによって SQL Server Native Client 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 ドライバー マネージャーは、接続されている ODBC ドライバーが、 SQLFetchScroll のSQL_FETCH_PRIOR オプションをサポートしているかどうかをテストします。 ドライバーでこのオプションがサポートされていない場合、ODBC ドライバー マネージャーは ODBC カーソル ライブラリを読み込みます。 サポートされている場合、ODBC ドライバー マネージャーは ODBC カーソル ライブラリを読み込みません。この場合、アプリケーションではドライバーのネイティブ サポートが使用されます。 SQL Server Native Client ODBC ドライバーはSQL_FETCH_PRIORをサポートしているため、ODBC ドライバー マネージャーは ODBC カーソル ライブラリを読み込まれません。
カーソル ライブラリにより、アプリケーションはスクロール可能なカーソルや更新可能なカーソルを使用できるだけでなく、1 つの接続に対して複数のアクティブ ステートメントを使用できます。 この機能をサポートする場合は、カーソル ライブラリを読み込む必要があります。 SQLSetConnectAttrを使用してカーソル ライブラリの使用方法を指定し、SQLSetStmtAttr を使用してカーソルの種類、コンカレンシー、および行セット のサイズを指定します。