次の方法で共有


高速順方向専用カーソル (ODBC)

SQL Server Native Client ODBC ドライバは、SQL Server のインスタンスに接続すると、順方向専用の読み取り専用カーソルのパフォーマンスを最適化します。高速順方向専用カーソルは、既定の結果セットに類似した方法で、ドライバとサーバーによって内部的に実装されます。高速順方向専用カーソルには、パフォーマンスが高いこと以外にも、次のような特性があります。

  • SQLGetData はサポートされません。結果セットの列を、プログラム変数にバインドする必要があります。

  • サーバーはカーソルの最後に達したことを検出すると、そのカーソルを自動的に閉じます。ただし、アプリケーションでは SQLCloseCursor または SQLFreeStmt (SQL_CLOSE) を呼び出す必要がありますが、ドライバからサーバーへカーソルを閉じる要求を送信する必要はありません。この動作により、ネットワーク経由でのサーバーとのやり取りが抑えられます。

アプリケーションでは、ドライバ固有のステートメント属性 SQL_SOPT_SS_CURSOR_OPTIONS を使用して高速順方向専用カーソルを要求します。SQL_SOPT_SS_CURSOR_OPTIONS 属性に SQL_CO_FFO を設定すると、高速順方向専用カーソルが有効になりますが、autofetch オプションは有効になりません。SQL_CO_FFO_AF を設定すると、autofetch オプションも有効になります。autofetch オプションの詳細については、「autofetch と ODBC カーソルの併用」を参照してください。

autofetch オプションを有効にした高速順方向専用カーソルは、サーバーとのやり取りを 1 度だけ行って小さい結果セットを取得する場合に使用できます。次の手順では、n は返される行数です。

  1. SQL_SOPT_SS_CURSOR_OPTIONS を SQL_CO_FFO_AF に設定します。

  2. SQL_ATTR_ROW_ARRAY_SIZE を n + 1 に設定します。

  3. 結果の列を n + 1 個の要素を持つ配列にバインドします (n + 1 行が実際にフェッチされた場合の防護策です)。

  4. SQLExecDirect または SQLExecute を使用してカーソルを開きます。

  5. 返された状態が SQL_SUCCESS の場合は、SQLFreeStmt または SQLCloseCursor を呼び出してカーソルを閉じます。行のすべてのデータが、バインドされたプログラム変数に格納されます。

これらの手順により、SQLExecDirect または SQLExecute から、autofetch オプションを有効にして、カーソルを開く要求が送信されます。クライアントからこの要求を 1 つ受け取ると、サーバーでは次の手順が実行されます。

  • カーソルを開きます。

  • 結果セットを作成してクライアントに行を送信します。

  • 行セットのサイズを結果セットの行数よりも 1 だけ多いサイズに設定したので、サーバーでカーソルが最後まで達したことが検出され、そのカーソルが閉じられます。