Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQLGetData służy do pobierania danych zbioru wyników bez wiązania wartości kolumn. SQLGetData można wywoływać kolejno na tej samej kolumnie, aby pobrać duże ilości danych z kolumny zawierającej typ tekstu, ntextu lub obrazu .
Nie ma wymogu, aby aplikacja wiązała zmienne do pobierania danych zbioru wyników. Dane dowolnej kolumny można pobrać z natywnego sterownika ODBC klienta SQL Server za pomocą SQLGetData.
Natywny sterownik ODBC klienta SQL Server nie obsługuje użycia SQLGetData do pobierania danych w losowej kolejności kolumn. Wszystkie kolumny niezwiązane przetwarzane za pomocą SQLGetData muszą mieć wyższe kolumny porządkowe niż kolumny powiązane w zbiorze wyników. Aplikacja musi przetwarzać dane od najniższej niepowiązanej wartości kolumny porządkowej do najwyższej. Próba pobrania danych z kolumny o niższym numerze zwyczajowym skutkuje błędem. Jeśli aplikacja używa kursorów serwera do raportowania wierszy zbioru wyników, może pobrać aktualny wiersz, a następnie pobrać wartość kolumny. Jeśli instrukcja zostanie wykonana na domyślnym kursorze tylko do odczytu i do przodu, musisz ponownie wykonać polecenie, aby zrobić kopię zapasową SQLGetData.
Sterownik ODBC SQL Server Native Client dokładnie raportuje długość tekstu, ntextu i obrazów pobieranych za pomocą SQLGetData. Aplikacja potrafi dobrze wykorzystać powrót parametrów StrLen_or_IndPtr , aby szybko pobierać długie dane.
Note
Dla typów dużych wartości StrLen_or_IndPtr zwraca SQL_NO_TOTAL w przypadku obcięcia danych.
Wsparcie SQLGetData dla ulepszonych funkcji dat i godzin
Wartości kolumn wyników typów dat/godziny są konwertowane zgodnie z opisem w Konwersjach z SQL do C.
Aby uzyskać więcej informacji, zobacz ulepszenia daty i godziny (ODBC).
Wsparcie SQLGetData dla dużych CLR UDT
SQLGetData obsługuje duże typy CLR zdefiniowane przez użytkownika (UDT). Aby uzyskać więcej informacji, zobacz large CLR User-Defined Types (ODBC).
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.
}
}