Partager via


Mappage de types de données (ODBC)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Le pilote ODBC SQL Server Native Client mappe les types de données SQL Server à des types de données ODBC SQL. Les sections ci-dessous décrivent les types de données SQL Server et les types de données ODBC SQL auxquels ils sont mappés. Elles décrivent également les types de données SQL ODBC et leurs types de données C ODBC correspondants, ainsi que les conversions prises en charge et par défaut.

Remarque

Le type de données d’horodatage SQL Serverest mappé au type de données SQL_BINARY ou SQL_VARBINARY ODBC, car les valeurs des colonnes timestamp ne sont pas des valeurs datetime, mais des valeurs binary(8) ou varbinary(8) qui indiquent la séquence d’activité SQL Server sur la ligne. Si le pilote ODBC SQL Server Native Client rencontre une valeur SQL_C_WCHAR (Unicode) qui correspond à un nombre impair d’octets, l’octet impair de fin est tronqué.

Traitement du type de données sql_variant dans ODBC

La colonne de type de données sql_variant peut contenir n’importe quel type de données dans SQL Server, à l’exception de grands objets (LOB), tels que du texte, du ntext et de l’image. Par exemple, la colonne peut contenir des valeurs smallintes pour certaines lignes, des valeurs float pour d’autres lignes et des valeurs char/nchar dans le reste.

Le type de données sql_variant est similaire au type de données Variant en Visual Basic.

Récupération de données à partir du serveur

ODBC n’a pas de concept de types de variantes, limitant l’utilisation du type de données sql_variant avec un pilote ODBC dans SQL Server. Dans SQL Server, si la liaison est spécifiée, le type de données sql_variant doit être lié à l’un des types de données ODBC documentés. SQL_CA_SS_VARIANT_TYPE, un nouvel attribut spécifique au pilote ODBC SQL Server Native Client, retourne le type de données d’une instance dans la colonne sql_variant à l’utilisateur.

Si aucune liaison n’est spécifiée, la fonction SQLGetData peut être utilisée pour déterminer le type de données d’une instance dans la colonne sql_variant .

Pour récupérer sql_variant données, procédez comme suit.

  1. Appelez SQLFetch pour positionner la ligne récupérée.

  2. Appelez SQLGetData, en spécifiant SQL_C_BINARY pour le type et 0 pour la longueur des données. Cela force le pilote à lire l’en-tête sql_variant . L’en-tête fournit le type de données de cette instance dans la colonne sql_variant . SQLGetData retourne la taille (en octets) de la valeur.

  3. Appelez SQLColAttribute en spécifiant SQL_CA_SS_VARIANT_TYPE comme valeur d’attribut. Cette fonction retourne le type de données C de l’instance dans la colonne sql_variant au client.

Voici un segment de code qui illustre les étapes précédentes.

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 l’utilisateur crée la liaison à l’aide de SQLBindCol, le pilote lit les métadonnées et les données. Le pilote convertit ensuite les données en un type ODBC approprié tel que spécifié dans la liaison.

Envoi de données au serveur

SQL_SS_VARIANT, un nouveau type de données spécifique au pilote ODBC SQL Server Native Client, est utilisé pour les données envoyées à une colonne sql_variant. Lors de l’envoi de données au serveur à l’aide de paramètres (par exemple, INSERT INTO TableName VALUES (?,?)), SQLBindParameter est utilisé pour spécifier les informations de paramètre, y compris le type C et le type SQL Server correspondant. Le pilote ODBC SQL Server Native Client convertit le type de données C en un des sous-types de sql_variant appropriés.

Voir aussi

Traitement des résultats (ODBC)