Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
SQLGetData é usado para recuperar dados do conjunto de resultados sem valores de coluna de associação. SQLGetData pode ser chamado sucessivamente na mesma coluna para recuperar grandes quantidades de dados de uma coluna com um tipo de dados de texto, ntext ou imagem .
Não há nenhum requisito de que um aplicativo associe variáveis para buscar 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 dá suporte ao uso do SQLGetData para recuperar dados em ordem de coluna aleatória. Todas as colunas não associadas processadas com SQLGetData devem ter ordinais de colunas mais altas do que as colunas associadas no conjunto de resultados. O aplicativo deve processar dados do menor valor de coluna ordinal desvinculado para o mais alto. A tentativa de recuperar dados de uma coluna com numeração ordinal inferior resulta em um erro. Se o aplicativo estiver usando cursores de servidor para relatar linhas do conjunto de resultados, o aplicativo poderá refetar a linha atual e buscar o valor de uma coluna. Se uma instrução for executada no cursor somente leitura e somente encaminhamento padrão, você deverá executar novamente a instrução para fazer backup do SQLGetData.
O driver ODBC do SQL Server Native Client relata com precisão o comprimento dos dados de texto, ntext e imagem recuperados usando SQLGetData. O aplicativo pode fazer um bom uso do retorno do parâmetro StrLen_or_IndPtr para recuperar dados longos rapidamente.
Observação
Para tipos de valor grandes, StrLen_or_IndPtr retornará SQL_NO_TOTAL em casos de truncamento de dados.
Suporte do SQLGetData para recursos avançados de data e hora
Os valores de coluna de resultado de tipos de 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 do SQLGetData para UDTs CLR grandes
O SQLGetData dá suporte a grandes UDTs (tipos definidos pelo usuário) CLR. Para obter mais informações, consulte ODBC (Tipos Definidos pelo Usuário) CLR Grandes.
Exemplo
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.
}
}