Asignar tipos de datos (ODBC)

El controlador ODBC de SQL Server Native Client asigna los tipos de datos SQL Server SQL a los tipos de datos ODBC SQL. En las secciones siguientes se describen los tipos de datos SQL Server SQL y los tipos de datos ODBC SQL a los que se asignan. También se tratan los tipos de datos ODBC SQL y sus tipos de datos ODBC C correspondientes, así como las conversiones compatibles y predeterminadas.

Nota

El tipo de datos timestamp de SQL Server se asigna al tipo de datos SQL_BINARY o SQL_VARBINARY ODBC porque los valores de las columnas timestamp no son valores datetime, sino binary(8) o varbinary(8) que indican la secuencia de actividad de SQL Server en la fila. Si el controlador ODBC de SQL Server Native Client encuentra un valor SQL_C_WCHAR (Unicode) con un número impar de bytes, se trunca el byte impar final.

Administrar tipos de datos sql_variant en ODBC

La columna de tipo de datos sql_variant puede contener cualquiera de los tipos de datos de SQL Server excepto los objetos grandes (LOB), como text, ntext e image. Por ejemplo, la columna puede contener valores smallint en algunas filas, valores float en otras filas y valores char/nchar en el resto.

El tipo de datos sql_variant es similar al tipo de datos Variant de Microsoft Visual Basic®.

Recuperar datos del servidor

ODBC no conoce el concepto de tipos variant, lo que limita el uso del tipo de datos sql_variant con un controlador ODBC en SQL Server. En SQL Server, si se especifica un enlace, el tipo de datos sql_variant se debe enlazar a uno de los tipos de datos de ODBC documentados. SQL_CA_SS_VARIANT_TYPE, un nuevo atributo específico del controlador ODBC de SQL Server Native Client, devuelve el tipo de datos de una instancia de la columna sql_variant al usuario.

Si no se especifica ningún enlace, se puede utilizar la función SQLGetData para determinar el tipo de datos de una instancia de la columna sql_variant.

Para recuperar datos sql_variant, siga estos pasos.

  1. Llame a SQLFetch para situarse en la fila recuperada.

  2. Llame a SQLGetData, especificando SQL_C_BINARY como tipo y 0 como longitud de los datos. Esto obliga al controlador a leer el encabezado sql_variant. El encabezado proporciona el tipo de datos de la instancia en la columna sql_variant. SQLGetData devuelve el tamaño (en bytes) del valor.

  3. Llame a SQLColAttribute especificando SQL_CA_SS_VARIANT_TYPE como su valor de atributo. Esta función devolverá el tipo de datos de C de la instancia de la columna sql_variant al cliente.

A continuación se incluye un segmento de código que muestra los pasos anteriores.

while ((retcode = SQLFetch (hstmt))==SQL_SUCCESS)
{
    if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
    {
        SQLError (NULL, NULL, hstmt, NULL, 
                    &lNativeError,szError,MAX_DATA,&sReturned);
        printf_s ("%s\n",szError);
        goto Exit;
    }
    retcode = SQLGetData (hstmt, 1, SQL_C_BINARY, 
                                pBuff,0,&Indicator);//Figure out the length
    if (retcode != SQL_SUCCESS_WITH_INFO && retcode != SQL_SUCCESS)
    {
        SQLError (NULL, NULL, hstmt, NULL, &lNativeError, 
                    szError,MAX_DATA,&sReturned);
        printf_s ("%s\n",szError);
        goto Exit;
    }
    printf_s ("Byte length : %d ",Indicator); //Print out the byte length
        
    int iValue = 0;
    retcode = SQLColAttribute (hstmt, 1, SQL_CA_SS_VARIANT_TYPE, NULL, 
                                        NULL,NULL,&iValue);  //Figure out the type
    printf_s ("Sub type = %d ",iValue);//Print the type, the return is C_type of the column]

// Set up a new binding or do the SQLGetData on that column with 
// the appropriate type
}

Si el usuario crea el enlace mediante SQLBindCol, el controlador lee los metadatos y los datos. A continuación, el controlador convierte los datos al tipo ODBC adecuado especificado en el enlace.

Enviar datos al servidor

SQL_SS_VARIANT, un nuevo tipo de datos específico del controlador ODBC de SQL Server Native Client, se utiliza para los datos enviados a una columna sql_variant. Cuándo se envían datos al servidor mediante parámetros (por ejemplo, INSERT INTO nombreDeTabla VALUES (?,?)), se utiliza SQLBindParameter para especificar la información de parámetro incluido el tipo de C y el tipo de SQL Server correspondiente. El controlador ODBC de SQL Server Native Client convertirá el tipo de datos de C en uno de los subtipos sql_variant adecuados.

Vea también

Conceptos