直接実行 (ODBC)

直接実行はステートメントを実行する最も簡単な方法です。 ステートメントが実行のために送信されると、データ ソースはそれをアクセス プランにコンパイルし、そのアクセス プランを実行します。

直接実行は、実行時にステートメントをビルドし、実行する汎用アプリケーションでよく使用されます。 たとえば、次のコードは SQL ステートメントをビルドし、それを 1 回実行します。

SQLCHAR *SQLStatement;  
  
// Build an SQL statement.  
BuildStatement(SQLStatement);  
  
// Execute the statement.  
SQLExecDirect(hstmt, SQLStatement, SQL_NTS);  

直接実行は、1 回実行されるステートメントに最適です。 その主な欠点は、SQL ステートメントが実行されるたびに解析されるということです。 さらに、アプリケーションは、ステートメントが実行されるまで、ステートメントによって作成された結果セットに関する情報 (存在する場合) を取得できません。これは、ステートメントが 2 つの別個の手順で準備および実行される場合に可能です。

ステートメントを直接実行するには、アプリケーションは次のアクションを実行します。

  1. 任意のパラメーターの値を設定します。 詳細については、このセクションの後にある「ステートメント パラメーター」を参照してください。

  2. SQLExecDirect を呼び出し、SQL ステートメントを含む文字列を渡してください。

  3. SQLExecDirect が呼び出されると、ドライバーは次のようになります。

    • ステートメントを解析せずにデータ ソースの SQL 文法を使用するように SQL ステートメントを変更します。これには、ODBC のエスケープ シーケンスで 説明されているエスケープ シーケンスの置き換えも含まれます。 アプリケーションは、SQLNativeSql を呼び出すことによって、変更された形式の SQL ステートメントを取得できます。 SQL_ATTR_NOSCAN ステートメント属性が設定されている場合、エスケープ シーケンスは置き換えされません。

    • 現在のパラメーター値を取得し、必要に応じて変換します。 詳細については、このセクションの後にある「ステートメント パラメーター」を参照してください。

    • ステートメントと変換されたパラメーター値をデータ ソースに送信して実行します。

    • エラーが返されます。 これには、SQLSTATE 24000 (無効なカーソル状態)などのシーケンス処理や状態診断、SQLSTATE 42000 などの構文エラー (構文エラーまたはアクセス違反)、SQLSTATE 42S02 (ベース テーブルまたはビューが見つかりません)などのセマンティック エラーが含まれます。