バインディング パラメーター マーカー
アプリケーションは、SQLBindParameter を呼び出してパラメーターをバインドします。 SQLBindParameter は、 一度に 1 つのパラメーターをバインドします。 これを使用して、アプリケーションは次を指定します。
パラメーター番号。 パラメーターには、番号 1 から始まる、SQL ステートメント内のパラメーターの増加順の番号が付けられます。 SQL ステートメント内のパラメーターの数より大きいパラメーター番号を指定することは有効ですが、ステートメントの実行時にパラメーター値は無視されます。
パラメーターの型 (入力、入力/出力、または出力)。 プロシージャ呼び出しのパラメーターを除き、すべてのパラメーターは入力パラメーターです。 詳細については、後のセクションの「プロシージャ パラメーター」を参照してください。
パラメーターにバインドされた変数の C データ型、アドレス、バイト長。 ドライバーは、C データ型から SQL データ型にデータを変換できる必要があります。そうでないと、エラーが返されます。 サポートされている変換の一覧については、「付録 D: データ型」の「C データ型から SQL データ型へのデータの変換」を参照してください。
パラメーター自体の SQL データ型、有効桁数、および小数点以下桁数。
長さ/インジケーター バッファーのアドレス。 バイナリ データまたは文字データのバイト長を指定するか、データが NULL であることを指定するか、SQLPutData を使用して データを送信することを指定します。 詳細については、「長さ/インジケーター値の使用」を参照してください。
たとえば、次のコードは、SalesPerson 列と CustID 列のパラメーターに SalesPerson と CustID をバインドします。 SalesPerson には可変長の文字データが含まれているため、コードは SalesPerson (11) のバイト長を指定し、SalesPerson のデータのバイト長を格納するように SalesPersonLenOrInd をバインドします。 CustID には固定長の整数データが含まれているため、この情報は必要ありません。
SQLCHAR SalesPerson[11];
SQLINTEGER SalesPersonLenOrInd, CustIDInd;
SQLUINTEGER CustID;
// Bind SalesPerson to the parameter for the SalesPerson column and
// CustID to the parameter for the CustID column.
SQLBindParameter(hstmt1, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 10, 0,
SalesPerson, sizeof(SalesPerson), &SalesPersonLenOrInd);
SQLBindParameter(hstmt1, 2, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 10, 0,
&CustID, 0, &CustIDInd);
// Set values of salesperson and customer ID and length/indicators.
strcpy_s((char*)SalesPerson, _countof(SalesPerson), "Garcia");
SalesPersonLenOrInd = SQL_NTS;
CustID = 1331;
CustIDInd = 0;
// Execute a statement to get data for all orders made to the specified
// customer by the specified salesperson.
SQLExecDirect(hstmt1,"SELECT * FROM Orders WHERE SalesPerson=? AND CustID=?",SQL_NTS);
SQLBindParameter が呼び出されると、ドライバーはこの情報をステートメントの構造体に格納します。 ステートメントを実行すると、情報を使用してパラメーター データが取得され、データ ソースに送信されます。
Note
ODBC 1.0 では、パラメーターは SQLSetParam でバインドされていました。 ドライバー マネージャーは、アプリケーションとドライバーで使用される ODBC のバージョンに応じて、SQLSetParam と SQLBindParameter の間の呼び出しをマップします。