SQLGetData

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Az SQLGetData eredményhalmaz adatainak lekérdezésére szolgál kötési oszlopértékek nélkül. Az SQLGetData sorban hívható ugyanazon az oszlopon, hogy nagy mennyiségű adatot szerezzen egy oszlopból, amelynek szöveg, ntext vagy kép adattípusa van.

Nincs követelmény, hogy egy alkalmazás változókat kötjön az eredményhalmaz adatai eléréséhez. Bármely oszlop adatai az SQL Server Native Client ODBC illezőprogramról az SQLGetData segítségével letölthetik.

Az SQL Server Native Client ODBC illezőprogram nem támogatja az SQLGetData használatát az adatok véletlenszerű oszlopsorrendben történő lekérdezésére. Minden SQLGetData-val feldolgozott korlátlan oszlopnak magasabb oszlop ordinálisa kell, mint az eredményhalmaz kötött oszlopainak. Az alkalmazásnak az adatokat a legalacsonyabb korlátlan ordinális oszlopértéktől a legmagasabb értékig kell feldolgoznia. Ha megpróbálunk adatokat visszaszerezni egy alacsonyabb sorrendszámozott oszlopból, hiba keletkezik. Ha az alkalmazás szerver kurzorokat használ az eredményhalmaz sorainak jelentésére, az alkalmazás vissza tudja váltani a jelenlegi sort, majd lekérheti az oszlop értékét. Ha egy utasítást az alapértelmezett csak olvasható, csak továbbítható kurzoron hajtanak végre, újra kell futtatnod az utasítást az SQLGetData menteléséhez.

Az SQL Server Native Client ODBC illezőprogramja pontosan számolja az SQLGetData segítségével letöltött szöveg-, ntext- és képadatok hosszát. Az alkalmazás jól kihasználhatja a StrLen_or_IndPtr paramétervisszaküldést a hosszú adatok gyors lekérésére.

Note

Nagy értékű típusok esetén StrLen_or_IndPtr adat levágás esetén SQL_NO_TOTAL visszaadja a .

SQLGetData támogatása a továbbfejlesztett dátum- és időfunkciókhoz

A dátum/idő típusok eredményoszlop-értékeit az SQL-ről C-re történő átalakítás során leírva alakítják.

További információ: Dátum- és időjavítások (ODBC).

SQLGetData támogatás nagy CLR UDT-k esetén

Az SQLGetData támogatja a nagy CLR felhasználó-definiált típusokat (UDT). További információ: 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.  
        }  
    }