Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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’est pas nécessaire qu’une application lie des variables pour extraire les données du 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 de colonne ordinale non entrante la plus basse vers la valeur la plus élevée. La tentative d’extraction de données à partir d’une colonne numérotée inférieure entraîne une erreur. Si l’application utilise des curseurs serveur pour signaler les lignes du jeu de résultats, l’application peut réfuter la ligne active, 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 des données.
Prise en charge de SQLGetData pour les fonctionnalités de date et d’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 de SQLGetData pour les UDT CLR volumineux
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.
}
}