Compartilhar via


Marcadores de parâmetro de ligação

O aplicativo associa parâmetros chamando SQLBindParameter. SQLBindParameter associa um parâmetro de cada vez. Com ele, o aplicativo especifica o seguinte:

  • O número do parâmetro. Os parâmetros são numerados em ordem de parâmetro crescente na instrução SQL, começando com o número 1. Embora seja legal especificar um número de parâmetro maior que o 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 para parâmetros em chamadas de procedimento, todos os parâmetros são parâmetros de entrada. Para obter mais informações, consulte Parâmetros de Procedimento, mais adiante nesta seção.

  • O tipo de dados C, o endereço e o comprimento de bytes da variável associada ao parâmetro. O driver deve ser capaz de converter os dados do tipo de dados C para o tipo de dados SQL ou um erro é retornado. Para obter uma lista de conversões com suporte, consulte Converter dados de C para tipos de dados SQL no Apêndice D: Tipos de Dados.

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

  • O endereço de um buffer de comprimento/indicador. Ele fornece o comprimento de bytes de dados binários ou de caracteres, especifica que os dados são NULL ou especifica que os dados serão enviados com SQLPutData. Para obter mais informações, consulte Como usar valores de comprimento/indicador.

Por exemplo, o código a seguir associa SalesPerson e CustID a parâmetros para as colunas SalesPerson e CustID. Como SalesPerson contém dados de caractere, que são de comprimento variável, o código especifica o comprimento de byte de SalesPerson (11) e associa SalesPersonLenOrInd para conter o comprimento de bytes dos dados no SalesPerson. Essas informações não são necessárias para CustID porque contêm dados inteiros, que são de 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 SQLBindParameter é chamado, o driver armazena essas informações na estrutura da instrução. Quando a instrução é executada, ela usa as informações para recuperar os dados do parâmetro e enviá-los para a fonte de dados.

Observação

No ODBC 1.0, os parâmetros eram associados ao SQLSetParam. O Gerenciador de Driver mapeia chamadas entre SQLSetParam e SQLBindParameter, dependendo das versões do ODBC usadas pelo aplicativo e pelo driver.