Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a: .NET Framework
.NET
.NET Standard
Para recuperar dados usando um DataReader, crie uma instância do objeto Command e depois crie um DataReader chamando o Command.ExecuteReader para recuperar linhas de uma fonte de dados. O DataReader fornece um fluxo de dados sem buffer que permite à lógica procedural processar eficientemente os resultados de uma fonte de dados sequencialmente.
Observação
O DataReader é uma boa escolha quando está a recuperar grandes quantidades de dados porque os dados não estão armazenados em memória.
O exemplo a seguir ilustra o uso de um DataReader, onde reader representa um DataReader válido e command representa um objeto Command válido.
reader = command.ExecuteReader();
Use o método DataReader.Read para obter uma linha dos resultados da consulta. Você pode acessar cada coluna da linha retornada passando o nome ou o número ordinal da coluna para o DataReader. No entanto, para melhor desempenho, o DataReader fornece uma série de métodos que permitem aceder aos valores das colunas nos seus tipos de dados nativos (GetDateTime, GetDouble, GetGuid, GetInt32, entre outros). Para uma lista de métodos de acesso tipado para DataReaders específicos de fornecedores de dados, consulte SqlDataReader. Usar os métodos de acesso tipados quando se conhece o tipo de dados subjacente reduz a quantidade de conversão de tipo necessária ao recuperar o valor da coluna.
O exemplo seguinte itera através de um objeto DataReader e devolve duas colunas de cada linha.
static void HasRows(SqlConnection connection)
{
using (connection)
{
SqlCommand command = new SqlCommand(
"SELECT CategoryID, CategoryName FROM Categories;",
connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
// Check if the DataReader has any row.
if (reader.HasRows)
{
// Obtain a row from the query result.
while (reader.Read())
{
Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
reader.GetString(1));
}
}
else
{
Console.WriteLine("No rows found.");
}
// Always call the Close method when you have finished using the DataReader object.
reader.Close();
}
}
Feche o DataReader
Chame sempre o Close() método quando terminar de usar o DataReader objeto.
Observação
Se o seu Comando contiver parâmetros de saída ou valores de retorno, esses valores não estão disponíveis até que o DataReader esteja fechado.
Importante
Enquanto um DataReader está aberto, a Ligação é usada exclusivamente por esse DataReader. Não pode executar quaisquer comandos para a Ligação, incluindo a criação de outro Leitor de Dados, até que o Leitor de Dados original esteja fechado.
Observação
Não chame Fechar ou Descartar num Ligação, um DataReader ou qualquer outro objeto gerido no método Finalizar da sua classe. Em um finalizador, libere apenas recursos não gerenciados que sua classe possui diretamente. Se a sua turma não possui recursos não geridos, não inclua o método Finalizar na definição da sua classe. Para obter mais informações, consulte Coleta de lixo.
Recuperar múltiplos conjuntos de resultados usando NextResult
Se o DataReader devolver múltiplos conjuntos de resultados, chame o método NextResult para percorrer sequencialmente os conjuntos de resultados. O exemplo a seguir mostra o SqlDataReader processamento dos resultados de duas instruções SELECT usando o ExecuteReader método.
static void RetrieveMultipleResults(SqlConnection connection)
{
using (connection)
{
SqlCommand command = new SqlCommand(
"SELECT CategoryID, CategoryName FROM dbo.Categories;" +
"SELECT EmployeeID, LastName FROM dbo.Employees",
connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
// Check if the DataReader has any row.
while (reader.HasRows)
{
Console.WriteLine("\t{0}\t{1}", reader.GetName(0),
reader.GetName(1));
// Obtain a row from the query result.
while (reader.Read())
{
Console.WriteLine("\t{0}\t{1}", reader.GetInt32(0),
reader.GetString(1));
}
// Hop to the next result-set.
reader.NextResult();
}
// Always call the Close method when you have finished using the DataReader object.
reader.Close();
}
}
Obtenha informação do esquema através do DataReader
Enquanto um DataReader estiver aberto, pode obter informação de esquema sobre o conjunto de resultados atual usando o método GetSchemaTable . GetSchemaTable devolve um DataTable objeto preenchido com linhas e colunas que contêm a informação do esquema para o conjunto de resultados atual. O DataTable contém uma linha para cada coluna do conjunto de resultados. Cada coluna da tabela de esquemas corresponde a uma propriedade das colunas devolvidas nas linhas do conjunto de resultados, onde o Nome da Coluna é o nome da propriedade e o valor da coluna é o valor da propriedade. O exemplo a seguir escreve as informações de esquema para DataReader.
static void GetSchemaInfo(SqlConnection connection)
{
using (connection)
{
SqlCommand command = new SqlCommand(
"SELECT CategoryID, CategoryName FROM Categories;",
connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
// Retrieve schema information about the current result-set.
DataTable schemaTable = reader.GetSchemaTable();
foreach (DataRow row in schemaTable.Rows)
{
foreach (DataColumn column in schemaTable.Columns)
{
Console.WriteLine(String.Format("{0} = {1}",
column.ColumnName, row[column]));
}
}
// Always call the Close method when you have finished using the DataReader object.
reader.Close();
}
}