ステートメント ハンドルの割り当て
アプリケーションでステートメントを実行する前に、ステートメント ハンドルを割り当てる必要があります。ステートメント ハンドルを割り当てるには、HandleType パラメータに SQL_HANDLE_STMT を設定し、InputHandle が接続ハンドルを指すように設定して SQLAllocHandle を呼び出します。
ステートメント属性は、ステートメント ハンドルの特徴を表します。ブックマークやカーソルを使用してサンプル ステートメント属性を取り込み、ステートメントの結果セットと共に使用することができます。ステートメント属性は SQLSetStmtAttr を使用して設定し、現在の設定は SQLGetStmtAttr を使用して取得します。アプリケーションでステートメント属性を設定する必要はありません。すべてのステートメント属性には既定値があり、一部の属性は、ドライバ固有の属性になっています。
複数の ODBC ステートメント オプションと接続オプションを使用する場合は、注意が必要です。fOption に SQL_ATTR_LOGIN_TIMEOUT を設定して SQLSetConnectAttr を呼び出すことで、接続の確立を待機している間にアプリケーションが接続試行のタイムアウトを待機する時間を制御します (0 を指定すると、無制限に待機します)。応答時間が遅いサイトでは、この値を高く設定して、接続の完了までに十分な時間を与えることができます。ただしこの間隔は、ドライバが接続できない場合に、妥当な時間内にユーザーに応答できる程度に低く抑える必要があります。
fOption に SQL_ATTR_QUERY_TIMEOUT を設定して SQLSetStmtAttr を呼び出すことでクエリのタイムアウト間隔を設定し、サーバーとユーザーを実行時間の長いクエリから保護します。
fOption に SQL_ATTR_MAX_LENGTH を設定して SQLSetStmtAttr を呼び出すことで、個別のステートメントが取得できる text データと image データの量を制限します。fOption に SQL_ATTR_MAX_ROWS を設定して SQLSetStmtAttr を呼び出すことで、アプリケーションが最初の n 行だけを必要とする場合に、行セットを最初の n 行に限定します。SQL_ATTR_MAX_ROWS を設定すると、ドライバがサーバーに対して SET ROWCOUNT ステートメントを実行することになります。そのため、トリガや更新など、すべての Microsoft SQL Server のステートメントに影響します。
上記のオプションを設定するときは注意が必要です。SQL_ATTR_MAX_LENGTH と SQL_ATTR_MAX_ROWS の場合、接続ハンドルのすべてのステートメント ハンドルが同じ設定になるようにすることをお勧めします。ドライバが、あるステートメント ハンドルから、これらのオプションに異なる値を持つ別のステートメント ハンドルに切り替える場合、適切な SET TEXTSIZE ステートメントと SET ROWCOUNT ステートメントを生成して、設定を変更する必要があります。ユーザー SQL ステートメントには、バッチ内では先頭に含めなければならないステートメントを含めることができるので、ドライバはユーザー SQL ステートメントと同じバッチ内にこれらのステートメントを配置することはできません。ドライバは SET TEXTSIZE ステートメントと SET ROWCOUNT ステートメントを別のバッチで送信する必要があります。その結果、サーバーに対する追加のラウンドトリップが自動的に生成されます。