Partilhar via


Marcadores de parâmetros de vinculação

A aplicação associa parâmetros chamando SQLBindParameter. O SQLBindParameter associa um parâmetro de cada vez. Com ela, a candidatura especifica o seguinte:

  • O número do parâmetro. Os parâmetros são numerados em ordem crescente dos parâmetros na instrução SQL, começando pelo número 1. Embora seja legal especificar um número de parâmetro superior ao número de parâmetros na instrução SQL, o valor do parâmetro será ignorado quando a instrução for executada.

  • O tipo de parâmetro (entrada, entrada/saída ou saída). Exceto pelos parâmetros nas chamadas de procedimentos, todos os parâmetros são parâmetros de entrada. Para mais informações, consulte Parâmetros de Procedimento, mais adiante nesta secção.

  • O tipo de dado C, o endereço e o comprimento do byte da variável estão ligados ao parâmetro. O driver deve ser capaz de converter os dados do tipo C para o tipo SQL, caso contrário é devolvedo um erro. Para uma lista de conversões suportadas, consulte Conversão de Dados de C para Tipos de Dados SQL no Apêndice D: Tipos de Dados.

  • O tipo de dado SQL, a precisão e a escala do próprio parâmetro.

  • O endereço do buffer de comprimento e indicador. Fornece o comprimento do byte dos dados binários ou de caracteres, especifica que os dados são NULL, ou especifica que os dados serão enviados com SQLPutData. Para mais informações, consulte Utilização de Valores de Comprimento/Indicadores.

Por exemplo, o código seguinte associa SalesPerson e CustID a parâmetros para as colunas SalesPerson e CustID. Como o SalesPerson contém dados de caracteres, que têm comprimento variável, o código especifica o comprimento do byte do SalesPerson (11) e vincula o SalesPersonLenOrInd para conter o comprimento do byte dos dados no SalesPerson. Esta informação não é necessária para o CustID porque contém dados inteiros, que têm comprimento fixo.

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);  

Quando o SQLBindParameter é chamado, o driver armazena esta informação na estrutura da instrução. Quando a instrução é executada, utiliza a informação para recuperar os dados dos parâmetros e enviá-los para a fonte de dados.

Observação

No ODBC 1.0, os parâmetros eram atribuídos ao SQLSetParam. O Gestor de Drivers mapeia chamadas entre SQLSetParam e SQLBindParameter, dependendo das versões de ODBC usadas pela aplicação e pelo driver.