应用程序通过调用 SQLBindParameter 绑定参数。 SQLBindParameter 一次绑定一个参数。 使用它,应用程序指定以下内容:
参数编号。 参数以 SQL 语句中的递增参数顺序进行编号,从数字 1 开始。 虽然指定的参数编号高于 SQL 语句中的参数数是合法的,但在执行该语句时,参数值将被忽略。
参数类型(输入、输入/输出或输出)。 除过程调用中的参数外,所有参数都是输入参数。 有关详细信息,请参阅本部分后面的 过程参数。
绑定到参数的变量的 C 数据类型、地址和字节长度。 驱动程序必须能够将数据从 C 数据类型转换为 SQL 数据类型或返回错误。 有关支持的转换列表,请参阅附录 D: 数据类型中的将数据从 C 转换为 SQL 数据类型 。
参数本身的 SQL 数据类型、精度和小数位数。
长度/指示器缓冲区的地址。 它提供二进制或字符数据的字节长度,指定数据为 NULL,或指定将使用 SQLPutData 发送数据。 有关详细信息,请参阅 “使用长度/指示器值”。
例如,以下代码将 SalesPerson 和 CustID 绑定到 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 版本映射 SQLSetParam 和 SQLBindParameter 之间的调用。