Lição 04 - Leitura de dados com o SqlDataReader

Iniciado por ÐλяkFeλя, 26 de Março , 2009, 02:23:38 PM

tópico anterior - próximo tópico

0 Membros e 1 Visitante estão vendo este tópico.

ÐλяkFeλя

Lição 04: Leitura de dados com o SqlDataReader

Esta lição explica como ler os dados com um SqlDataReader
objeto. Aqui estão os objectivos :

Saiba o que é usado para um SqlDataReader.
Saiba como ler dados utilizando um SqlDataReader.
Compreender a necessidade de fechar um SqlDataReader.

Introdução

Um SqlDataReader é um tipo que é bom para a leitura de dados no
forma mais eficiente possível. * * Você pode não usá-lo para
gravar dados. SqlDataReaders são frequentemente descritos como fast -
firehose transmitir-como os fluxos de dados.

Você pode ler a partir de objetos em um SqlDataReader frente-única
forma seqüencial. Depois de ler alguns dados, você deve guardar
porque você não será capaz de voltar e lê-lo novamente.

O desenho da frente só SqlDataReader é o que permite que
para ser rápido. Não tem overhead associado com
percorrendo os dados ou escrevê-lo de volta à fonte de dados.
Portanto, se a sua única exigência para um grupo de dados é de
leitura e uma vez que pretende que o método mais rápido possível, o
SqlDataReader é a melhor escolha. Além disso, se a quantidade de dados
você precisa ler, é maior do que o que você prefere para manter
na memória para além de uma única chamada, então o comportamento do fluxo
o SqlDataReader seria uma boa escolha.

Nota: Observe que eu usei o termo "um tempo" no anterior
parágrafo quando discutindo as razões pelas quais você deve usar um
SqlDataReader. Como com qualquer coisa, há exceções. Em
muitos casos, é mais eficiente para usar um DataSet em cache.
Embora cache está fora do escopo deste tutorial, vamos
DataSet usando objetos discutir na próxima aula.

Criando um Objeto SqlDataReader

Como um exemplo de um SqlDataReader é um pouco diferente
do que a forma como você instantiate ADO.NET outros objetos. Você deve
ExecuteReader chamada sobre um comando objeto, como este:

SqlDataReader rdr = cmd.ExecuteReader();

O método ExecuteReader do objeto SqlCommand, cmd, retorna um SqlDataReader instância. Criando um SqlDataReader com o novo operador não fazer nada por você. Como você aprendeu nas lições anteriores, o objeto SqlCommand e as referências a conexão SQL necessárias para a SqlDataReader obter dados.

Leitura de dados

anterior lições contidas código que é utilizado um SqlDataReader, mas a discussão foi adiada para podermos concentrar no tema específico de uma determinada aula. Esta lição constrói a partir do que viu e explica como utilizar o SqlDataReader.

Tal como explicado anteriormente, o SqlDataReader retorna dados através de um fluxo seqüencial. Para ler estes dados, você deve puxar os dados de uma tabela linha-por-linha. Quando uma linha foi lida, a linha anterior não está mais disponível. Para ler essa linha novamente, você teria que criar uma nova instância do SqlDataReader e ler através do fluxo de dados novamente.

O típico método de leitura a partir de fluxo de dados retornado pelo SqlDataReader é para iterar através de cada linha com um ciclo while. O código a seguir mostra como conseguir isso:

while (rdr.Read())
   {
      // get the results of each column
      string contact = (string)rdr["ContactName"];
      string company = (string)rdr["CompanyName"];
      string city    = (string)rdr["City"];

      // print out the results
      Console.Write("{0,-25}", contact);
      Console.Write("{0,-20}", city);
      Console.Write("{0,-25}", company);
      Console.WriteLine();
   }




Observe a chamada para Ler sobre o SqlDataReader, rdr, na condição em loop, enquanto o código acima. O valor de retorno é do tipo bool Ler e retorna true enquanto existirem mais registros de ler. Após o último registro no fluxo de dados tenha sido lido, Ler retorna false.

Em lições anteriores, é extraído da primeira coluna da linha usando o SqlDataReader indexador, ou seja, rdr [ 0 ]. É possível extrair cada coluna da linha com um indexador numérico como este, mas não é muito legível. O exemplo acima usa uma seqüência indexador, quando a corda é o nome da coluna a partir de consulta SQL (coluna da tabela nome se tiver usado um asterisco, *. String indexadores são muito mais legível, tornando o código mais fácil de manter.

Independentemente do tipo de indexador parâmetro, um indexador SqlDataReader retornará tipo objeto. É por isso que o exemplo acima lança resultados para uma string. Uma vez que os valores são extraídos, você pode fazer o que quiser com eles, tais como a sua impressão com a saída Console tipo métodos.

Encerrando

Lembre-se sempre de fechar o SqlDataReader, exatamente como você necessita para fechar o SqlConnection. Embrulhe código de acesso a dados em um bloco, e tente colocar a estreita cooperação no último bloco, como este:

try
   {
      // data access code
   }
   finally
   {
      // 3. close the reader
      if (rdr != null)
      {
         rdr.Close();
      }

      // close the connection too
   }   


O código acima verifica a SqlDataReader para ter certeza de que ele não é nulo. Após o código sabe que um bom exemplo do SqlDataReader existe, pode fechá-la. Listagem 1 mostra o código para as secções anteriores na sua totalidade.

Listing 1: Usando o SqlDataReader:

using System;
using System.Data;
using System.Data.SqlClient;

namespace Lesson04
{
class ReaderDemo
{
static void Main()
{
ReaderDemo rd = new ReaderDemo();
rd.SimpleRead();
}

public void SimpleRead()
{
// declare the SqlDataReader, which is used in
// both the try block and the finally block
SqlDataReader rdr = null;

// create a connection object
SqlConnection conn = new SqlConnection(
"Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI");

// create a command object
SqlCommand cmd  = new SqlCommand(
"select * from Customers", conn);

try
{
// open the connection
conn.Open();

// 1.  get an instance of the SqlDataReader
rdr = cmd.ExecuteReader();

// print a set of column headers
Console.WriteLine(
"Contact Name             City                Company Name");
Console.WriteLine(
"------------             ------------        ------------");

// 2.  print necessary columns of each record
while (rdr.Read())
{
// get the results of each column
string contact = (string)rdr["ContactName"];
string company = (string)rdr["CompanyName"];
string city    = (string)rdr["City"];

// print out the results
Console.Write("{0,-25}", contact);
Console.Write("{0,-20}", city);
Console.Write("{0,-25}", company);
Console.WriteLine();
}
}
finally
{
// 3. close the reader
if (rdr != null)
{
rdr.Close();
}

// close the connection
if (conn != null)
{
conn.Close();
}
}
}
}
}


Resumo

SqlDataReader objetos permitem ler os dados em um avanço rápido só de forma. Pode obter os dados por ler cada linha de fluxo de dados. Chame o método Close do SqlDataReader para garantir que não existem quaisquer recursos fugas.


CoNTiNuA na Lição 5  8)...

By:  FEAR  8)



Lanus

FF Criações - Web Designer - www.ffcriacoes.com.br