Share via


バインディング パラメーター マーカー

アプリケーションは、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 のバージョンに応じて、SQLSetParamSQLBindParameter の間の呼び出しをマップします。