Convertir datos de SQL a tipos de datos C

Cuando una aplicación llama a SQLFetch, SQLFetchScroll o SQLGetData, el controlador recupera los datos del origen de datos. Si es necesario, convierte los datos del tipo de datos en el que el controlador lo recuperó al tipo de datos especificado por el argumento TargetType en SQLBindCol o SQLGetData. Por último, almacena los datos en la ubicación a la que apunta el argumento TargetValuePtr en SQLBindCol o SQLGetData (y el campo SQL_DESC_DATA_PTR del ARD).

En la tabla siguiente se muestran las conversiones admitidas de tipos de datos DE ODBC SQL a tipos de datos ODBC C. Un círculo relleno indica la conversión predeterminada de un tipo de datos SQL (el tipo de datos C al que se convertirán los datos cuando el valor de TargetType sea SQL_C_DEFAULT). Un círculo hueco indica una conversión admitida.

En el caso de una aplicación ODBC 3.x que funciona con un controlador ODBC 2.x , es posible que no se admita la conversión de tipos de datos específicos del controlador.

El formato de los datos convertidos no se ve afectado por la configuración de país o región de Windows.

En las tablas de las secciones siguientes se describe cómo el controlador o el origen de datos convierte los datos recuperados del origen de datos; Los controladores son necesarios para admitir conversiones a todos los tipos de datos ODBC C de los tipos de datos ODBC SQL que admiten. Para un tipo de datos ODBC SQL determinado, la primera columna de la tabla enumera los valores de entrada legales del argumento TargetType en SQLBindCol y SQLGetData. En la segunda columna se enumeran los resultados de una prueba, a menudo mediante el argumento BufferLength especificado en SQLBindCol o SQLGetData, que el controlador realiza para determinar si puede convertir los datos. Para cada resultado, las columnas tercera y cuarta enumeran los valores colocados en los búferes especificados por targetValuePtr y StrLen_or_IndPtr argumentos especificados en SQLBindCol o SQLGetData después de que el controlador haya intentado convertir los datos. (El StrLen_or_IndPtr argumento corresponde al campo SQL_DESC_OCTET_LENGTH_PTR del ARD). La última columna enumera sqlSTATE devuelta para cada resultado por SQLFetch, SQLFetchScroll o SQLGetData.

Si el argumento TargetType de SQLBindCol o SQLGetData contiene un identificador para un tipo de datos ODBC C que no se muestra en la tabla para un tipo de datos SQL ODBC determinado, SQLFetch, SQLFetchScroll o SQLGetData devuelve SQLSTATE 07006 (infracción de atributo de tipo de datos restringido). Si el argumento TargetType contiene un identificador que especifica una conversión de un tipo de datos SQL específico del controlador a un tipo de datos ODBC C y esta conversión no es compatible con el controlador, SQLFetch, SQLFetchScroll o SQLGetData devuelve SQLSTATE HYC00 (característica opcional no implementada).

Aunque no se muestra en las tablas, el controlador devuelve SQL_NULL_DATA en el búfer especificado por el argumento StrLen_or_IndPtr cuando el valor de datos SQL es NULL. Para obtener una explicación del uso de StrLen_or_IndPtr cuando se realizan varias llamadas para recuperar datos, consulte la descripción de la función SQLGetData . Cuando los datos SQL se convierten en datos de caracteres C, el recuento de caracteres devuelto en *StrLen_or_IndPtr no incluye el byte de terminación null. Si TargetValuePtr es un puntero nulo, SQLGetData devuelve SQLSTATE HY009 (uso no válido del puntero nulo); en SQLBindCol, esto desenlace la columna.

En las tablas se usan los términos y convenciones siguientes:

  • La longitud de bytes de los datos es el número de bytes de datos de C disponibles para devolver en *TargetValuePtr, independientemente de si los datos se truncarán o no antes de que se devuelvan a la aplicación. En el caso de los datos de cadena, esto no incluye el espacio para el carácter de terminación null.

  • La longitud del byte de caracteres es el número total de bytes necesarios para mostrar los datos en formato de caracteres. Esto es como se define para cada tipo de datos de C en la sección Tamaño de presentación, excepto que la longitud de bytes de caracteres está en bytes mientras el tamaño de presentación está en caracteres.

  • Las palabras en cursiva representan argumentos de función o elementos de la gramática SQL. Para obtener la sintaxis de los elementos de gramática, vea Apéndice C: Gramática SQL.

Esta sección contiene los temas siguientes.