Поделиться через


Привязка маркеров параметров

Приложение привязывает параметры путем вызова 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, используемых приложением и драйвером.