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.