SQLGetData

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

SQLGetData se usa para recuperar datos del conjunto de resultados sin enlazar valores de columna. Se puede llamar sucesivamente aSQLGetData en la misma columna para recuperar cantidades grandes de datos de una columna con un tipo de datos text, ntexto image .

No es necesario que una aplicación enlace variables para capturar datos del conjunto de resultados. Los datos de cualquier columna se pueden recuperar del controlador ODBC de SQL Server Native Client mediante SQLGetData.

El controlador ODBC de SQL Server Native Client no admite el uso de SQLGetData para recuperar datos en orden de columna aleatorio. Todas las columnas sin enlazar procesadas con SQLGetData deben tener los ordinales de las columnas más altos que los de las columnas enlazadas en el conjunto de resultados. La aplicación debe procesar datos desde el valor ordinal de la columna sin enlazar más bajo hasta el valor más alto. Al intentar recuperar datos de una columna con un número ordinal más bajo, se genera un error. Si la aplicación está usando cursores de servidor para notificar las filas del conjunto de resultados, la aplicación puede intentar volver a capturar la fila actual y, a continuación, capturar el valor de una columna. Si una instrucción se ejecuta en el valor predeterminado de solo lectura, cursor de solo avance, se debe volver a ejecutar la instrucción para realizar un copia de seguridad de SQLGetData.

El controlador ODBC SQL Server Native Client informa con precisión de la longitud de los datos de texto, ntext e imagen recuperados mediante SQLGetData. La aplicación puede hacer buen uso del parámetro StrLen_or_IndPtr devuelto para recuperar rápidamente los datos largos.

Nota

Para tipos de valor grandes, StrLen_or_IndPtr devolverá SQL_NO_TOTAL en casos de truncamiento de datos.

SQLGetData admite las características mejoradas de fecha y hora

Los valores de columna de resultado de los tipos de fecha y hora se convierten como se describe en Conversiones de SQL a C.

Para obtener más información, vea Mejoras de fecha y hora (ODBC).

SQLGetData admite UDT CLR grandes

SQLGetData admite los tipos definidos por el usuario (UDT) CLR grandes. Para obtener más información, vea Large CLR User-Defined Types (ODBC).

Ejemplo

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

Consulte también

Función SQLGetData
ODBC API Implementation Details