SQLGetData
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics 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 de SQL Server Native Client notifica con precisión 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 resultados de 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 Tipos definidos por el usuario (ODBC) clR grandes.
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
Detalles de implementación de la API de ODBC