绑定参数标记

应用程序通过调用 SQLBindParameter 绑定参数。 SQLBindParameter 一次绑定一个参数。 使用它,应用程序指定以下内容:

  • 参数编号。 参数以 SQL 语句中的递增参数顺序进行编号,从数字 1 开始。 虽然指定的参数编号高于 SQL 语句中的参数数是合法的,但在执行该语句时,参数值将被忽略。

  • 参数类型(输入、输入/输出或输出)。 除过程调用中的参数外,所有参数都是输入参数。 有关详细信息,请参阅本部分后面的 过程参数

  • 绑定到参数的变量的 C 数据类型、地址和字节长度。 驱动程序必须能够将数据从 C 数据类型转换为 SQL 数据类型或返回错误。 有关支持的转换列表,请参阅附录 D: 数据类型中的将数据从 C 转换为 SQL 数据类型

  • 参数本身的 SQL 数据类型、精度和小数位数。

  • 长度/指示器缓冲区的地址。 它提供二进制或字符数据的字节长度,指定数据为 NULL,或指定将使用 SQLPutData 发送数据。 有关详细信息,请参阅 “使用长度/指示器值”。

例如,以下代码将 SalesPersonCustID 绑定到 SalesPerson 和 CustID 列的参数。 由于 SalesPerson 包含字符数据(长度可变),因此代码指定 SalesPerson (11) 的字节长度,并绑定 SalesPersonLenOrInd 以包含 SalesPerson 中的数据的字节长度。 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 时,驱动程序会将此信息存储在语句的结构中。 执行语句时,它使用信息检索参数数据并将其发送到数据源。

注释

在 ODBC 1.0 中,参数与 SQLSetParam 绑定。 驱动程序管理器根据应用程序和驱动程序使用的 ODBC 版本映射 SQLSetParamSQLBindParameter 之间的调用。