Longitud del búfer de datos

La aplicación pasa la longitud en bytes del búfer de datos al controlador en un argumento, denominado BufferLength o un nombre similar. Por ejemplo, en la siguiente llamada a SQLBindCol, la aplicación especifica la longitud del búfer ValuePtr (sizeof(ValuePtr)):

SQLCHAR      ValuePtr[50];  
SQLINTEGER   ValueLenOrInd;  
SQLBindCol(hstmt, 1, SQL_C_CHAR, ValuePtr, sizeof(ValuePtr), &ValueLenOrInd);  

Un controlador siempre devolverá el número de bytes, no el número de caracteres, en el argumento de longitud del búfer de cualquier función que tenga un argumento de cadena de salida.

Las longitudes de los búferes de datos solo son necesarias para los búferes de salida; el controlador los usa para evitar escribir más allá del final del búfer. Sin embargo, el controlador comprueba la longitud del búfer de datos solo cuando el búfer contiene datos de longitud variable, como datos binarios o de caracteres. Si el búfer contiene datos de longitud fija, como un entero o una estructura de fechas, el controlador omite la longitud del búfer de datos y supone que el búfer es lo suficientemente grande como para contener los datos; es decir, nunca trunca los datos de longitud fija. Por lo tanto, es importante que la aplicación asigne un búfer lo suficientemente grande como para los datos de longitud fija.

Cuando se produce un truncamiento de cadenas de salida que no son de datos (como el nombre del cursor devuelto para SQLGetCursorName), la longitud devuelta en el argumento de longitud del búfer es la longitud máxima de caracteres posible.

Las longitudes de los búferes de datos no son necesarias para los búferes de entrada, ya que el controlador no escribe en estos búferes.

Esta sección contiene los temas siguientes.