Nota
L'accés a aquesta pàgina requereix autorització. Pots provar d'iniciar sessió o canviar de directori.
L'accés a aquesta pàgina requereix autorització. Pots provar de canviar directoris.
Los parámetros de entrada que hacen referencia a datos de caracteres de longitud variable (como nombres de columna, parámetros dinámicos y valores de atributo de cadena) tienen un parámetro de longitud asociado. Si la aplicación finaliza las cadenas con el carácter NULL, como es habitual en C, proporciona como argumento la longitud en bytes de la cadena (no incluido el terminador NULL) o SQL_NTS (Null-Terminated String). Un argumento de longitud no negativa especifica la longitud real de la cadena asociada. El argumento length puede ser 0 para especificar una cadena de longitud cero, que es distinta de un valor NULL. El valor negativo SQL_NTS dirige al controlador para determinar la longitud de la cadena mediante la localización del carácter de terminación NULL.
Cuando los datos de caracteres se devuelven del controlador a la aplicación, el controlador siempre debe finalizarlo en null. Esto proporciona a la aplicación la elección de si se deben controlar los datos como una cadena o una matriz de caracteres. Si el búfer de la aplicación no es lo suficientemente grande como para devolver todos los datos de caracteres, el controlador lo trunca a la longitud en bytes del búfer, menos el espacio necesario para el carácter de terminación nulo, termina los datos truncados con un nulo y los almacena en el búfer. Por lo tanto, las aplicaciones siempre deben asignar espacio adicional para el carácter de terminación NULL en los búferes usados para recuperar datos de caracteres. Por ejemplo, se necesita un búfer de 51 bytes para recuperar 50 caracteres de datos.
Tanto la aplicación como el controlador deben tener especial cuidado al enviar o recuperar datos de caracteres largos en partes con SQLPutData o SQLGetData. Si los datos se pasan como una serie de cadenas terminadas en NULL, los caracteres de terminación NULL de estas cadenas deben quitarse antes de que se puedan volver a ensamblar los datos.
Varios programadores de ODBC han confundido datos de caracteres con cadenas de C. El motivo de esto es que se trata de una consecuencia de usar el lenguaje C al definir funciones ODBC. Si una aplicación o controlador ODBC usa otro lenguaje ( recuerde que ODBC es independiente del lenguaje), es menos probable que surja esta confusión.
Cuando las cadenas de C se usan para contener datos de caracteres, el carácter de terminación null no se considera parte de los datos y no se cuenta como parte de su longitud de bytes. Por ejemplo, los datos de caracteres "ABC" se pueden mantener como la cadena C "ABC\0" o la matriz de caracteres {'A', 'B', 'C'}. La longitud de bytes de los datos es 3, tanto si se trata como una cadena como una matriz de caracteres.
Aunque las aplicaciones y los controladores suelen usar cadenas de C (matrices terminadas en null de caracteres) para contener datos de caracteres, no es necesario hacerlo. En C, los datos de caracteres también se pueden tratar como un arreglo de caracteres (sin terminación nula) y su longitud en bytes se pasa por separado en el búfer de longitud o indicador.
Dado que los datos de caracteres se pueden mantener en una matriz que no termina en null y su longitud en bytes se pasa por separado, es posible insertar caracteres null en los datos de caracteres. Sin embargo, el comportamiento de las funciones ODBC en este caso no está definido y es específico del controlador si un controlador controla esto correctamente. Por lo tanto, las aplicaciones interoperables siempre deben controlar los datos de caracteres que pueden contener caracteres NULL incrustados como datos binarios.