Partage via


SQLGetData

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

SQLGetData est utilisé pour récupérer les données du jeu de résultats sans liaison de valeurs de colonne. SQLGetData peut être appelé successivement sur la même colonne pour récupérer de grandes quantités de données d’une colonne avec un texte, ntext ou un type de données image .

Il n'y a aucune spécification exigeant qu'une application lie des variables pour extraire des données de jeu de résultats. Les données de n’importe quelle colonne peuvent être récupérées à partir du pilote ODBC SQL Server Native Client à l’aide de SQLGetData.

Le pilote ODBC SQL Server Native Client ne prend pas en charge l’utilisation de SQLGetData pour récupérer des données dans l’ordre de colonne aléatoire. Toutes les colonnes non liées traitées avec SQLGetData doivent avoir des ordinals de colonnes plus élevés que les colonnes liées dans le jeu de résultats. L'application doit traiter les données de la valeur d'ordinal de colonne indépendante la plus basse à la plus élevée. Toute tentative d'extraction de données d'une colonne d'ordinal inférieur provoque une erreur. Si l'application utilise des curseurs côté serveur pour signaler les lignes de jeu de résultats, l'application peut réextraire la ligne actuelle, puis extraire la valeur d'une colonne. Si une instruction est exécutée sur le curseur en lecture seule et en lecture seule par défaut, vous devez réexécuter l’instruction pour sauvegarder SQLGetData.

Le pilote ODBC SQL Server Native Client signale avec précision la longueur du texte, du ntext et des données d’image récupérées à l’aide de SQLGetData. L’application peut utiliser correctement le retour du paramètre StrLen_or_IndPtr pour récupérer rapidement des données longues.

Remarque

Pour les types de valeurs volumineuses, StrLen_or_IndPtr retourne SQL_NO_TOTAL en cas de troncation de données.

Prise en charge de SQLGetData pour les fonctionnalités Date et Heure améliorées

Les valeurs de colonne de résultat des types date/heure sont converties comme décrit dans Conversions de SQL en C.

Pour plus d’informations, consultez Améliorations de date et d’heure (ODBC).

Prise en charge SQLGetData pour les types CLR volumineux définis par l'utilisateur

SQLGetData prend en charge les grands types clR définis par l’utilisateur (UDT). Pour plus d’informations, consultez Les types CLR définis par l’utilisateur (ODBC) volumineux.

Exemple

SQLHDBC     hDbc = NULL;  
SQLHSTMT    hStmt = NULL;  
long        lEmpID;  
PBYTE       pPicture;  
SQLINTEGER  pIndicators[2];  
  
// Get an environment, connection, and so on.  
...  
  
// Get a statement handle and execute a command.  
SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);  
  
if (SQLExecDirect(hStmt,  
    (SQLCHAR*) "SELECT EmployeeID, Photo FROM Employees",  
    SQL_NTS) == SQL_ERROR)  
    {  
    // Handle error and return.  
    }  
  
// Retrieve data from row set.  
SQLBindCol(hStmt, 1, SQL_C_LONG, (SQLPOINTER) &lEmpID, sizeof(long),  
    &pIndicators[0]);  
  
while (SQLFetch(hStmt) == SQL_SUCCESS)  
    {  
    cout << "EmployeeID: " << lEmpID << "\n";  
  
    // Call SQLGetData to determine the amount of data that's waiting.  
    if (SQLGetData(hStmt, 2, SQL_C_BINARY, pPicture, 0, &pIndicators[1])  
        == SQL_SUCCESS_WITH_INFO)  
        {  
        cout << "Photo size: " pIndicators[1] << "\n\n";  
  
        // Get all the data at once.  
        pPicture = new BYTE[pIndicators[1]];  
        if (SQLGetData(hStmt, 2, SQL_C_DEFAULT, pPicture,  
            pIndicators[1], &pIndicators[1]) != SQL_SUCCESS)  
            {  
            // Handle error and continue.  
            }  
  
        delete [] pPicture;  
        }  
    else  
        {  
        // Handle error on attempt to get data length.  
        }  
    }  

Voir aussi

SQLGetData, fonction
Détails de l’implémentation d’API ODBC