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