Marcadores de parámetros de enlace

La aplicación enlaza columnas llamando a SQLBindCol. SQLBindParameter enlaza un parámetro a la vez. Con ella, la aplicación especifica lo siguiente:

  • El número de parámetros. Los parámetros se numeran en orden creciente de parámetros en la instrucción SQL, empezando por el número 1. Aunque se puede especificar un número de parámetro mayor que el número de parámetros de la instrucción SQL, el valor del parámetro se omitirá cuando se ejecute la instrucción.

  • El tipo de parámetro (entrada, entrada/salida o salida). A excepción de los parámetros de las llamadas a procedimiento, todos los parámetros son parámetros de entrada. Para obtener más información, consulte Parámetros de procedimientos más adelante en esta sección.

  • El tipo de datos C, la dirección y la longitud de bytes de la variable enlazada al parámetro. El controlador debe poder convertir los datos del tipo de datos C al tipo de datos SQL o se devuelve un error. Para obtener una lista de conversiones admitidas, consulte Convertir datos C en tipos de datos SQL en el Anexo D: Tipos de datos.

  • Tipo de datos SQL, precisión y escala del propio parámetro.

  • Dirección de un búfer de longitud/indicador. Proporciona la longitud de bytes de datos binarios o de caracteres, especifica que los datos son NULL o especifica que los datos se enviarán con SQLPutData. Para obtener más información, vea Usar valores de longitud/indicador.

Por ejemplo, el código siguiente enlaza SalesPerson y CustID a los parámetros de las columnas SalesPerson y CustID. Dado que SalesPerson contiene datos de caracteres, que son de longitud variable, el código especifica la longitud de bytes de SalesPerson (11) y enlaza SalesPersonLenOrInd para que contenga la longitud de bytes de los datos en SalesPerson. Esta información no es necesaria para CustID porque contiene datos enteros, que son de longitud fija.

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

Cuando se llama a SQLBindParameter, el controlador almacena esta información en la estructura de la instrucción. Cuando se ejecuta la instrucción, usa la información para recuperar los datos del parámetro y enviarlos al origen de datos.

Nota:

En ODBC 1.0, los parámetros se enlazaban con SQLSetParam. El Administrador de controladores asigna llamadas entre SQLSetParam y SQLBindParameter, en función de las versiones de ODBC que usan la aplicación y el controlador.