Hoje eu vou falar um pouco sobre o objeto de leitura de dados desconectado do banco de dados. Em artigos anteriores, eu falei sobre o ADO.NET e seus objetos responsáveis por enviar, buscar e guardar dados, e agora eu vou falar e mostrar como trabalhar com o DataAdapter e DataSet.


Este artigo dá continuação ao que foi falado anteriormente com ADO.NET. Estes objetos se conectam para pegar os dados e depois podem ser desconectados e os dados ainda ficam na memória.


Eu vou mostrar na prática como fazer para conectar e pra deixar tudo bonito e performático. Se você ainda não leu o artigo anterior, favor acesse o link abaixo e leia primeiro antes de prosseguir com este. 


Link ADO.NET:

http://www.ecode10.com/artigo/1930/ADO-NET-e-conexao-SQL-Server 


Veja o que foi utilizado neste artigo:

  • Ferramenta Visual Studio
  • Linguagem C#
  • Plataforma Web Forms
  • Banco de dados SQL Server
  • Objetos DataAdapter e DataSet
  • Conexão com o banco


Usando DataAdapter e DataSet, a forma de pegar os dados do banco é diferente do DataReader. Eu não vou perder muito tempo na parte teórica porque já foi falado no primeiro artigo de ADO.NET. Dúvidas, favor acessar o artigo.


Parte Prática


O que será mostrado aqui é bem simples. Eu tenho um banco de dados chamado BDTeste e nele possui uma tabela chamada de Usuario. Foi cadastro alguns usuários aleatórios dentro da tabela, mas a tabela é bem pequena, possui apenas dois campos IdUsuario e NoUsuario.


O exemplo mostra como conectar ao banco de dados, o uso de SELECT simples e um loop percorrendo os dados do banco de dados para mostrar na página. Veja o código 1.


using (SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConexaoSQLServerLocal"].ToString()))

            {

                DataSet dtSet = new DataSet();

                try

                {

                    connection.Open();


                    SqlDataAdapter adapter = new SqlDataAdapter();

                    adapter.SelectCommand = new SqlCommand("SELECT NoUsuario FROM Usuario", connection);

                    adapter.Fill(dtSet);


                    DataTable dtTable = dtSet.Tables[0];


                    for (int i = 0; i < dtTable.Rows.Count; i++)

                    {

                        Response.Write("
Nome: "
+ dtTable.Rows[i]["NoUsuario"].ToString());

                    }

                    

                }

                catch (Exception ex)

                {

                    throw ex;

                }

                finally

                {

                    connection.Close();

                }

            }

Código 1 - Buscando dados no banco e usando DataAdater


A primeira linha de código serve para conectar ao banco de dados através da String de conexão contida no arquivo de configuração. Se você quiser saber mais sobre ela, acesse o primeiro artigo por gentileza.


Depois desta linha, foi necessário criar uma instância de DataSet chamada dtSet para ser utilizado posteriormente. Dentro try a conexão é aberta pelo método Open() do próprio framework da Microsoft e depois uma instância de SqlDataAdapter foi criada.


O adaptador é objeto que está preparando para buscar os dados e preencher o DataSet. Com o SqlDataAdapter, você pode utilizar SelectCommand para buscar dados do banco. Note que a linha cria uma instância de SqlCommand passando como parâmetro a instrução e o objeto de conexão. Se o objeto de conexão não for passado, o SELECT não será feito. Veja o código 2.


adapter.SelectCommand = new SqlCommand("SELECT NoUsuario FROM Usuario", connection);

Código 2 - Utilizando o Adapter para mandar a instrução SQL


Existem outras opções e outras maneiras de fazer isso, mas eu escolhi começar do início. Lembre-se que o nome do campo e tabela precisam ser iguais para ter acesso. Caso coloque errado o nome do campo e da tabela, o código voltará um erro.


adapter.Fill(dtSet);

Código 3 - Preenchendo os dados retornados para o objeto DataSet.


Bom, depois de enviar o comando para o banco e receber através do DataAdapter, precisamos preencher o DataSet que é um objeto desconectado. Para isso, você precisa utilizar o um método chamado Fill. Veja o código 3.


Depois deste momento, você pode desconectar do banco de dados e continuar trabalhando normalmente como se estivesse conectado. Tudo que está no DataAdapter foi parar no DataSet com esse preenchimento.


Você tem a opção de trabalhar com o DataSet ou então pegar a primeira linha de dentro do DataTable, ou seja, pegar a linha zero. Geralmente é utilizado pegando a primeira linha, depende muito do DBA que fez o select  pois o DataSet pode ter mais de uma linha de Table. Este é um outro assunto para ser discutido em outro artigo. Veja o código 4.


DataTable dtTable = dtSet.Tables[0];

Código 4 - Pegando a primeira linha da tabela no DataSet


Tendo a primeira linha, basta fazer o for com a quantidade de linhas da tabela para exibir o nome que precisa. Veja o código 5.


for (int i = 0; i < dtTable.Rows.Count; i++)

{

  Response.Write(" Nome: " + dtTable.Rows[i]["NoUsuario"].ToString());

}

Código 5 - Fazer um loop para pegar os dados.


Note que no código 5 um loop diferente é feito. Usando o for, é necessário pegar a quantidade de linhas dentro o objeto DataTable. Como é quantidade de linhas, utilizei o Rows.Count. Basta imaginar um documento em excel preenchido com linhas e colunas. 


Para exibir dados do usuário tenho que saber que a linha deve ser dinâmica, isto é, pelo número do formulário. Devido a isso, o campo é pego pelo dtTable.Rows[i][“NoUsuario”]; o i é o valor que está rodando a cada loop de código e o limite é o Count.

Fica bem simples essa escrita na tela. Em outro artigo, vou te mostrar como carregar estes dados dentro de um objeto de layout através do DataTable. A figura 1 mostra como ficou o resultado.



Figura 1 - Resultado do For


Eu não posso deixar de comentar que toda vez que você utilizar o using SqlConnection, você estará utilizando automaticamente o pool de conexão e comunicação com o banco de dados. Isso significa que, o sistema aproveita a conexão criada anteriormente evitando assim muita comunicação ou requisição com o banco de dados. Aproveita a memória utilizada anteriormente e gasta menos memória para uma nova requisição.


Vou ficar por aqui e qualquer dúvida pode entrar em contato pelo site www.mauriciojunior.org. Espero que tenha gostado do que viu e procure fazer o mesmo exercício falado aqui no artigo.