Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server
Base de Dados SQL do Azure
Azure SQL Managed Instance
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
O SQLGetData é usado para recuperar dados do conjunto de resultados sem atribuir valores de colunas. O SQLGetData pode ser chamado sucessivamente na mesma coluna para recuperar grandes quantidades de dados de uma coluna com um tipo de dado de texto, ntext ou imagem .
Não é necessário que uma aplicação associe variáveis para obter dados do conjunto de resultados. Os dados de qualquer coluna podem ser recuperados do driver ODBC do SQL Server Native Client usando SQLGetData.
O driver ODBC do SQL Server Native Client não suporta a utilização de SQLGetData para recuperar dados por ordem aleatória de colunas. Todas as colunas não vinculadas processadas com SQLGetData devem ter ordinais de coluna superiores às colunas limitadas no conjunto de resultados. A aplicação deve processar dados desde o valor ordinal não vinculado mais baixo até ao mais alto. Tentar recuperar dados de uma coluna de número ordinal inferior resulta num erro. Se a aplicação estiver a usar cursores do servidor para reportar linhas do conjunto de resultados, pode recuperar a linha atual e depois obter o valor de uma coluna. Se uma instrução for executada no cursor padrão de apenas leitura e apenas avançado, deve reexecutar a instrução para fazer backup do SQLGetData.
O driver ODBC do SQL Server Native Client reporta com precisão o comprimento dos dados de texto, ntext e imagem recuperados usando SQLGetData. A aplicação pode tirar bom proveito do retorno de parâmetro StrLen_or_IndPtr para recuperar dados longos rapidamente.
Note
Para tipos de valor grande, StrLen_or_IndPtr devolverá SQL_NO_TOTAL em casos de truncamento de dados.
Suporte SQLGetData para funcionalidades melhoradas de data e hora
Os valores das colunas dos resultados dos tipos data/hora são convertidos conforme descrito em Conversões de SQL para C.
Para obter mais informações, consulte Melhorias de data e hora (ODBC).
Suporte SQLGetData para grandes CLR UDTs
O SQLGetData suporta grandes tipos CLR definidos pelo utilizador (UDTs). Para obter mais informações, consulte 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.
}
}