Udostępnij za pośrednictwem


Procedura SQLGetData

Procedura SQLGetData jest używana do pobierania danych zestaw wyników, bez powiązanie kolumna wartości.Procedura SQLGetData mogą być wywoływane kolejno na tej samej kolumna do pobierania dużych ilości danych z kolumn z tekstu, ntext, lub obrazu typu danych.

Nie istnieje wymóg że aplikacji powiązać zmienne do pobierania danych z zestaw wyników.Danych każdej kolumna można pobrać z SQL Server sterownik ODBC macierzystym klienta za pomocą Procedura SQLGetData.

SQL Server Sterownik ODBC macierzystym klienta nie obsługuje korzystania z Procedura SQLGetData do pobierania danych w kolejności losowej kolumna.Przetwarzane wszystkie kolumna niezwiązane z Procedura SQLGetData musi mieć wyższe porządkowe kolumn niż związanych kolumn zestaw wyników.Aplikacja musi przetworzyć danych z wartość najniższą niezwiązany porządkowa kolumna do najwyższego.Próba pobrania danych z niższego ordinally numerowane kolumna wyniki w błąd.Jeśli aplikacja używa serwera kursory wiersze zestaw wyników raportu, aplikacji można refetch bieżącego wiersza, a następnie pobrać wartość kolumna.Jeżeli oświadczenie jest wykonywany na domyślny tylko do odczytu, kursor progresywny, musi ponownego wykonywania instrukcja tworzyć kopię zapasową zapasowej Procedura SQLGetData.

SQL Server Sterownik ODBC macierzystym klienta dokładnie raportuje długość tekstu, ntext, i obrazu danych pobieranych za pomocą Procedura SQLGetData.Aplikację można wprowadzać dobre wykorzystanie StrLen_or_IndPtr zwraca parametr szybko pobrać danych long.

Ostrzeżenie

Dla typów dużą wartość StrLen_or_IndPtr zwróci SQL_NO_TOTAL w przypadkach obcięcie danych.

Procedura SQLGetData obsługę rozszerzonych datę i czas funkcje

Wynikiem wartości w kolumnie Data /czas typy są konwertowane zgodnie z opisem w Konwersje z SQL do c.

Aby uzyskać więcej informacji, zobacz Data/Godzina ulepszenia (ODBC).

Procedura SQLGetData obsługę dużych UDTs CLR

Procedura SQLGetData obsługuje duże CLR zdefiniowane przez użytkownika typów (UDTs).Aby uzyskać więcej informacji, zobacz Duże CLR typów zdefiniowanych przez użytkownika (ODBC).

Przykład

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.
        }
    }