Udostępnij za pośrednictwem


SQLGetData

SQLGetData jest używany do pobierania danych zestaw wyników, bez wiązanie z wartości kolumna.SQLGetData mogą być wywoływane kolejno na tej samej kolumnie w celu pobrania dużej ilości danych z kolumna z tekst, ntext, or obraz typ danych.

Nie jest wymagane czy aplikacji powiązania zmiennych, które będą pobierane dane zestaw wyników.Można pobrać dane z dowolnej kolumna z SQL Server Macierzysty sterownik ODBC klient przy użyciu SQLGetData.

The SQL Server Native klient ODBC driver does not support using SQLGetData to retrieve data in random kolumna order.Wszystkie kolumna niezwiązane przetwarzany przy użyciu SQLGetData musi mieć wyższe kolumna liczb porządkowych niż powiązania kolumn zestaw wyników.Aplikacja musi przetwarzać dane z wartość najniższą niezwiązanego porządkowa kolumna do najwyższego.Próba pobrania danych z dolną ordinally numerowane kolumna wyniki w błąd.Jeśli aplikacja korzysta z liczby kursorów serwera do wierszy zestaw wyników raportu, aplikacja może refetch bieżącego wiersza i następnie pobrać wartość kolumna.Następnie wykonaj Jeśli instrukcja jest wykonywana na domyślnego kursor tylko do odczytu, tylko przesyłanie dalej, użytkownik musi ponownie instrukcja do wykonać tworzyć kopię zapasową zapasowej SQLGetData.

The SQL Server Native klient ODBC driver accurately reports the length of text, ntext, and image data retrieved using SQLGetData.Aplikacja może być dobre wykorzystanie StrLen_or_IndPtr parametr powrócić do szybkiego pobierania danych long.

Uwaga

W przypadku typów duża wartość StrLen_or_IndPtr zwróci SQL_NO_TOTAL w przypadku obcinania danych.

Obsługa SQLGetData Data rozszerzony i czas funkcje

Wynik kolumna wartości typu Data/godzina są konwertowane zgodnie z opisem w Podczas konwersji z SQL do C.

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

Obsługa SQLGetData duże UDTs CLR

SQLGetData obsługuje dużą CLR typów zdefiniowanych przez użytkownika (UDTs).Aby uzyskać więcej informacji zobaczDuże CLR typy zdefiniowane 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.
        }
    }