Привязка маркеров параметров
Приложение привязывает параметры путем вызова SQLBindParameter. SQLBindParameter привязывает один параметр за раз. С его помощью приложение указывает следующее:
Номер параметра. Параметры нумеруются в увеличении порядка параметров в инструкции SQL, начиная с числа 1. Хотя он является законным, чтобы указать номер параметра, превышающий число параметров в инструкции SQL, значение параметра будет игнорироваться при выполнении инструкции.
Тип параметра (входные, входные и выходные данные или выходные данные). За исключением параметров в вызовах процедур, все параметры являются входными параметрами. Дополнительные сведения см. в разделе "Параметры процедуры" далее в этом разделе.
Тип данных C, адрес и длина байтов переменной, привязанной к параметру. Драйвер должен иметь возможность преобразовать данные из типа данных C в тип данных SQL или возвращается ошибка. Список поддерживаемых преобразований см. в разделе "Преобразование данных из C в типы данных SQL" в приложении D: Типы данных.
Тип данных 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, используемых приложением и драйвером.