Condividi tramite


SQLGetData

Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure azure Synapse Analytics Analytics Platform System (PDW)

SQLGetData viene usato per recuperare i dati del set di risultati senza associazione di valori di colonna. SQLGetData può essere chiamato successivamente nella stessa colonna per recuperare grandi quantità di dati da una colonna con un tipo di dati text, ntext o 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 usando SQLGetData.

Il driver ODBC di SQL Server Native Client non supporta l'uso di SQLGetData per recuperare i dati in ordine di colonna casuale. Tutte le colonne non associate elaborate con SQLGetData devono avere ordinali di colonna superiori 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 eseguire nuovamente l'istruzione per eseguire il backup di SQLGetData.

Il driver ODBC di SQL Server Native Client segnala in modo accurato la lunghezza dei dati di testo, ntext e immagine recuperati tramite SQLGetData. L'applicazione può usare in modo ottimale il parametro StrLen_or_IndPtr per recuperare rapidamente dati lunghi.

Nota

Per i tipi valore di grandi dimensioni, StrLen_or_IndPtr restituirà SQL_NO_TOTAL in caso di troncamento dei dati.

Supporto di SQLGetData per le caratteristiche avanzate di data e ora

I valori delle colonne dei risultati dei tipi di data/ora vengono convertiti come descritto in Conversioni da SQL a C.

Per altre informazioni, vedere Miglioramenti di data e ora (ODBC).

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

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

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

Vedi anche

Funzione SQLGetData
Dettagli di implementazione dell'API ODBC