绑定参数标记

应用程序通过调用 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 绑定在一起。 驱动程序管理器会映射 SQLSetParamSQLBindParameter 之间的调用,具体取决于应用程序和驱动程序使用的 ODBC 版本。