Condividi tramite


SQLGetData

SQLGetData consente di recuperare dati del set di risultati senza associare valori della colonna. Può essere chiamato successivamente sulla stessa colonna per recuperare grandi quantità di dati da una colonna con un tipo di dati text, ntexto image.

Non è necessario che un'applicazione associ le variabili per recuperare i dati del set di risultati. I dati di qualsiasi colonna possono essere recuperati dal driver ODBC di SQL Server Native Client tramite SQLGetData.

Il driver ODBC di SQL Server Native Client non supporta l'utilizzo di SQLGetData per recuperare dati in un ordine di colonne casuale. Tutte le colonne non associate elaborate con SQLGetData devono avere un numero più elevato di ordinali di colonna rispetto alle colonne associate nel set di risultati. L'applicazione deve elaborare i dati dal valore della colonna dell'ordinale non associato più basso al più elevato. Il tentativo di recuperare dati dalla colonna con una numerazione di ordinali più bassa genera un errore. Se l'applicazione sta utilizzando i cursori del server per indicare le righe del set di risultati, può recuperare nuovamente la riga corrente e quindi recuperare il valore di una colonna. Se un'istruzione viene eseguita sul cursore forward-only di sola lettura predefinito, è necessario ripeterla per effettuare il backup di SQLGetData.

Il driver ODBC di SQL Server Native Client riporta in maniera accurata la lunghezza dei dati di tipo text, ntexte image recuperati tramite SQLGetData. L'applicazione può utilizzare la restituzione del parametro StrLen_or_IndPtr per recuperare rapidamente dati di tipo long.

[!NOTA]

Per i tipi di valori di grandi dimensioni, StrLen_or_IndPtr restituirà SQL_NO_TOTAL nei casi di troncamento dei dati.

Supporto di SQLGetData per le funzionalità avanzate di data e ora

I valori della colonna dei risultati dei tipi data/ora vengono convertiti come descritto in Conversioni dai tipi di dati SQL ai tipi di dati C.

Per ulteriori informazioni, vedere Miglioramenti relativi a data e ora (ODBC).

Supporto di SQLGetData per tipi definiti dall'utente CLR di grandi dimensioni

SQLGetData supporta i tipi definiti dall'utente (UDT) CLR di grandi dimensioni. Per ulteriori informazioni, vedere Tipi CLR definiti dall'utente di grandi dimensioni (ODBC).

Esempio

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

Vedere anche

Concetti

Altre risorse