カーソル オプションの設定 (ODBC)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
カーソル オプションを設定するには、SQLSetStmtAttrを呼び出して、カーソルの動作を制御するステートメント オプションを取得SQLGetStmtAttr を設定またはします。
属性 | 指定内容 |
---|---|
SQL_ATTR_CURSOR_TYPE | カーソルの種類。順方向専用、静的、動的、キーセット ドリブンのいずれか |
SQL_ATTR_CONCURRENCY | コンカレンシー制御オプション。読み取り専用、ロック、タイムスタンプを使用するオプティミスティック、値を使用するオプティミスティックのいずれか |
SQL_ATTR_ROW_ARRAY_SIZE | フェッチごとに取得される行数 |
SQL_ATTR_CURSOR_SENSITIVITY | 他の接続によるカーソル行の更新を、カーソルで表示するかしないか |
SQL_ATTR_CURSOR_SCROLLABLE | カーソルを前後にスクロール可能 |
これらの属性の既定値 (順方向専用、読み取り専用、行セット サイズ 1) では、サーバー カーソルを使用しません。 サーバー カーソルを使用するには、少なくともこれらの属性のいずれかを既定値以外に設定する必要があります。また、実行するステートメントを、単一の SELECT ステートメントか、単一の SELECT ステートメントを含むストアド プロシージャにする必要があります。 サーバー カーソルの使用時に、サーバー カーソルによってサポートされていない句 (COMPUTE、COMPUTE BY、FOR BROWSE、および INTO) を SELECT ステートメントで使用することはできません。
使用するカーソルの種類は、SQL_ATTR_CURSOR_TYPEとSQL_ATTR_CONCURRENCYを設定するか、SQL_ATTR_CURSOR_SENSITIVITYとSQL_ATTR_CURSOR_SCROLLABLEを設定して制御できます。 カーソルの動作を指定するこの 2 つの方法を組み合わせて実行しないでください。
例
A. 動的カーソルを設定する
次のサンプルでは、ステートメント ハンドルを割り当て、行のバージョンに基づくオプティミスティック コンカレンシーを使用する動的カーソルを種類として設定してから、SELECT を実行します。
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_DYNAMIC, SQL_IS_INTEGER);
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CONCURRENCY, SQLPOINTER)SQL_CONCUR_ROWVER, SQL_IS_INTEGER);
retcode = SQLExecDirect(hstmt1, SELECT au_lname FROM authors", SQL_NTS);
B. スクロール可能で機密性の高いカーソルを設定する
次のサンプルでは、ステートメント ハンドルを割り当て、スクロール可能な反映型カーソルを設定してから、SELECT を実行します。
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);
// Set the cursor options and execute the statement.
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_SCROLLABLE, SQLPOINTER)SQL_SCROLLABLE, SQL_IS_INTEGER);
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_SENSITIVITY, SQLPOINTER)SQL_INSENSITIVE, SQL_IS_INTEGER);
retcode = SQLExecDirect(hstmt1, select au_lname from authors", SQL_NTS);