Establecer valores de parámetro
Para establecer el valor de un parámetro, la aplicación simplemente establece el valor de la variable enlazada al parámetro . No es importante cuando se establece este valor, siempre y cuando se establezca antes de que se ejecute la instrucción . La aplicación puede establecer el valor antes o después de enlazar la variable y puede cambiar el valor tantas veces como desee. Cuando se ejecuta la instrucción , el controlador simplemente recupera el valor actual de la variable. Esto resulta especialmente útil cuando se ejecuta una instrucción preparada más de una vez; la aplicación establece nuevos valores para algunas o todas las variables cada vez que se ejecuta la instrucción. Para obtener un ejemplo de esto, vea Ejecución preparada, anteriormente en esta sección.
Si se ha enlazado un búfer de longitud o indicador en la llamada a SQLBindParameter, debe establecerse en uno de los siguientes valores antes de ejecutar la instrucción:
Longitud de bytes de los datos en la variable enlazada. El controlador comprueba esta longitud solo si la variable es de carácter o binario (ValueType es SQL_C_CHAR o SQL_C_BINARY).
SQL_NTS. Los datos son una cadena terminada en null.
SQL_NULL_DATA. El valor de datos es NULL y el controlador omite el valor de la variable enlazada.
SQL_DATA_AT_EXEC o el resultado de la macro SQL_LEN_DATA_AT_EXEC. El valor del parámetro se va a enviar con SQLPutData. Para obtener más información, consulte Envío de datos largos, más adelante en esta sección.
En la tabla siguiente se muestran los valores de la variable enlazada y el búfer de longitud o indicador que la aplicación establece para una variedad de valores de parámetro.
Parámetro valor |
Parámetro (SQL) tipo de datos |
Variable (C) tipo de datos |
Valor de enlazado variable |
Valor de longitud/indicador búfer[d] |
---|---|---|---|---|
"ABC" | SQL_CHAR | SQL_C_CHAR | ABC\0[a] | SQL_NTS o 3 |
10 | SQL_INTEGER | SQL_C_SLONG | 10 | -- |
10 | SQL_INTEGER | SQL_C_CHAR | 10\0[a] | SQL_NTS o 2 |
1 P.M. | SQL_TYPE_TIME | SQL_C_TYPE_TIME | 13,0,0[b] | -- |
1 P.M. | SQL_TYPE_TIME | SQL_C_CHAR | {t '13:00:00'}\0[a], [c] | SQL_NTS o 14 |
NULL | SQL_SMALLINT | SQL_C_SSHORT | -- | SQL_NULL_DATA |
[a] "\0" representa un carácter de terminación null. El carácter de terminación null solo es necesario si el valor del búfer de longitud o indicador es SQL_NTS.
[b] Los números de esta lista son los números almacenados en los campos de la estructura de TIME_STRUCT.
[c] La cadena utiliza la cláusula fecha de escape de ODBC. Para obtener más información, vea Literales de fecha, hora y marca de tiempo.
[d] Los controladores siempre deben comprobar este valor para ver si es un valor especial, como SQL_NULL_DATA.
Lo que hace un controlador con un valor de parámetro en tiempo de ejecución depende del controlador. Si es necesario, el controlador convierte el valor del tipo de datos de C y la longitud de bytes de la variable enlazada al tipo de datos SQL, la precisión y la escala del parámetro. En la mayoría de los casos, el controlador envía el valor al origen de datos. En algunos casos, da formato al valor como texto e lo inserta en la instrucción SQL antes de enviar la instrucción al origen de datos.