Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytický platformní systém (PDW)
SQLGetData se používá k získávání dat výsledné sady bez vázání hodnot sloupců. SQLGetData lze postupně volat na stejném sloupci pro získání velkého množství dat ze sloupce s textem,ntextem nebo obrazovým datovým typem.
Aplikace nemusí vázat proměnné pro načítání dat o výsledné sadě. Data z libovolného sloupce lze získat z ovladače SQL Server Native Client ODBC pomocí SQLGetData.
Nativní klientský ODBC ovladač SQL Server nepodporuje použití SQLGetData pro získávání dat v náhodném pořadí sloupců. Všechny nevázané sloupce zpracované pomocí SQLGetData musí mít vyšší sloupcové ordinály než vázané sloupce ve výsledné množině. Aplikace musí zpracovávat data od nejnižší neomezené hodnoty sloupce až po nejvyšší. Pokus o získání dat z níže číslovaného sloupce vede k chybě. Pokud aplikace používá serverové kurzory k hlášení řádků výsledků, může znovu načíst aktuální řádek a poté získat hodnotu sloupce. Pokud je příkaz vykonán na výchozím kurzoru pouze pro čtení a dopředu, musíte příkaz znovu spustit pro zálohování SQLGetData.
Ovladač ODBC pro nativního klienta SQL Server přesně hlásí délku textových, ntextových a obrazových dat získaných pomocí SQLGetData. Aplikace dokáže dobře využít návrat parametrů StrLen_or_IndPtr k rychlému načtení dlouhých dat.
Note
Pro typy s velkými hodnotami StrLen_or_IndPtr vrátí SQL_NO_TOTAL v případech ořezávání dat.
Podpora SQLGetData pro vylepšené funkce data a času
Hodnoty výsledků sloupců typů dat/času jsou převedeny podle popisu Konverze ze SQL do C.
Další informace naleznete v tématu vylepšení data a času (ODBC).
Podpora SQLGetData pro velké CLR UDT
SQLGetData podporuje velké uživatelsky definované typy CLR (UDT). Další informace najdete v tématu
Example
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.
}
}