パラメーターのバインド (ODBC)

SQL ステートメントの各パラメーターは、ステートメントを実行する前にアプリケーション内の変数に関連付ける、つまりバインドする必要があります。 アプリケーションが変数をパラメーターにバインドすると、その変数 (アドレス、C データ型など) がドライバーに記述されます。 また、パラメーター自体 (SQL データ型、精度など) についても説明します。 ドライバーは、そのステートメントに対して保持する構造体にこの情報を格納し、ステートメントの実行時に変数から値を取得する情報を使用します。

パラメーターは、ステートメントの実行前にいつでもバインドまたは再バインドできます。 ステートメントの実行後にパラメーターがリバインドされた場合、ステートメントが再度実行されるまでバインディングは適用されません。 パラメーターを別の変数にバインドするには、アプリケーションで新しい変数を使用してパラメーターを再バインドするだけです。前のバインディングが自動的に解放されます。

変数は、別の変数がパラメーターにバインドされるまで、SQL_RESET_PARAMS オプションを指定して SQLFreeStmt を呼び出すことによってすべてのパラメーターがバインド解除されるまで、またはステートメントが解放されるまで、パラメーターにバインドされたままになります。 このため、アプリケーションは、変数がバインド解除されるまで解放されないようにする必要があります。 詳細については、「バッファーの割り当てと解放」を参照してください。

パラメーター バインディングは、ステートメントのドライバーによって維持される構造に格納されている情報に過ぎないため、任意の順序で設定できます。 また、実行される SQL ステートメントからも独立しています。 たとえば、アプリケーションが 3 つのパラメーターをバインドし、次の SQL ステートメントを実行するとします。

INSERT INTO Parts (PartID, Description, Price) VALUES (?, ?, ?)  

アプリケーションがすぐに SQL ステートメントを実行する場合

SELECT * FROM Orders WHERE OrderID = ?, OpenDate = ?, Status = ?  

同じステートメント ハンドルでは、INSERT ステートメントのパラメーター バインディングが使用されます。これは、それらがステートメント構造に格納されているバインディングであるためです。 ほとんどの場合、これは不適切なプログラミング手法であり、避ける必要があります。 代わりに、アプリケーションで SQLFreeStmt を SQL_RESET_PARAMS オプションと共に呼び出して、すべての以前のパラメーターのバインドを解除してから、新しいパラメーターをバインドする必要があります。

このセクションでは、次のトピックを扱います。