Continuando os artigos sobre acesso à dados, neste
publico a 2ª parte do artigo que nos mostra como acessar e implementar, de
forma simples, um banco de dados do SQL Server 2005 por meio de uma aplicação
ASP.NET com Visual Studio 2008. Para acessar a parte 1, clique
aqui.
Note que, depois que é criada a aplicação, é criado na
Solution Explorer uma pasta chamada App_Data. Ela é responsável por armazenar
os arquivos relacionados à dados, como arquivos do SQL Server, Access, etc.
Clique com o botão direito nela e clique em Add New
Item. Na janela que aparece, escolha o template SQL Server Database, deixe como
Database.mdf ou renomeie se quiser e clique em Add, como mostra a imagem
abaixo:


Como a imagem acima mostrou, o novo banco de dados foi
criado no Server Explorer e inserido na pasta App_Data. Este procedimento
facilita a distribuição da aplicação, pois desta forma não precisamos
configurar o servidor de dados.
Apague este database pois utilizaremos o Northwind,
criado no artigo
anterior.
Data Provider – o
Data Provider nada mais é do que um conjunto de classes que conectam o banco de
dados à uma aplicação. Os Data Providers nativos são:
Sql Server Data Provider –
fornece acesso ao banco SQL Server. As classes contidas no provider estão
disponíveis no namespace System.Data.SqlClient
Oracle Data Provider – fornece
acesso ao banco Oracle. As classes contidas no provider estão disponíveis no namespace
System.Data.OracleClient.
OLE DB Data Provider – fornece
acesso à dados OLE DB e as versões SQL anteriores à versão 7. As classes
contidas no provider estão disponíveis no namespace
System.Data.OleDb.
ODBC Data Provider –
fornece acesso à dados que aceitam o padrão ODBC, um provider muito antigo e
pouco usado atualmente. As classes contidas neste provider estão disponíveis no
namespace
System.Data.Odbc.
Em nosso exemplo usaremos o SQL Server Data Provider.
Os quatro tipos de objetos principais dos Data Providers
são:
Connection –
como o próprio nome diz, ele é responsável por criar a conexão com o banco de
dados.
Command – executa comando(s)
na base de dados.
DataAdapter –
funciona como uma ligação entre a fonte de dados e o Dataset.
DataReader – fornece
acesso à dados somente leitura, onde ele percorre os dados e os devolve lidos
para o uso na aplicação.
Estes são os objetos disponibilizados por cada Data
Provider. O que muda entre eles são os nomes das classes que implementam cada
objeto e o tipo da implementação feita. No SQL Server Data Provider por exemplo
o objeto Connection citado acima é implementado na classe SqlConnection.
Modelo Conectado –
iremos usar o modelo conectado para acessar os dados do banco Northwind,
executar um comando que retorne o conteúdo da tabela Customers e exibir
os registros retornados em um DropDownList em nossa Default.aspx.
Começando, abra a Default.aspx no modo Designer, clique
na aba Toolbox (CTRL+ALT+X), clique e arraste o controle DropDownList para a
página, clique na aba Propriedades (F4) e mude o ID para ddlCustomers, como
mostra a figura abaixo:
Dê dois cliques em uma parte branca desta página ou
aperte F7 para ir na página de códigos, Default.aspx.cs. Nela, declare o
namespace System.Data.SqlClient. No evento Page_Load, insira o código a seguir
e veja a explicação do mesmo logo abaixo:
protected void
Page_Load(object sender, EventArgs e)
{
//Entra nos códigos abaixo se não for feita
requisição na página
if (!Page.IsPostBack)
{
//Cria a conexão com o banco
SqlConnection conn = new SqlConnection(@"Data
Source=.\SQLEXPRESS;Initial Catalog=Northwind;
Integrated
Security=true");
//Passa as instruções SQL por meio do SqlCommand
SqlCommand cmd = new SqlCommand("SELECT
CustomerID, CompanyName FROM Customers ORDER BY CompanyName",
conn);
//Cria um DataReader quer irá ler os
dados
SqlDataReader dr;
//Abre a conexão
conn.Open();
//Executamos o comando e o associamos ao DataReader
dr = cmd.ExecuteReader();
//Configuramos o DropDownList
this.ddlClientes.DataSource = dr;
this.ddlClientes.DataValueField
= "CustomerID";
this.ddlClientes.DataTextField
= "CompanyName";
//Preenchemos
o DropDownList
ddlClientes.DataBind();
//Fecha o DataReader
dr.Close();
//Fecha a conexão
conn.Close();
}
}
No código acima, instanciamos um objeto do tipo
SqlConnection, passando como parâmetro a string de conexão com o banco de
dados. String de conexão é um conjunto de propriedades e seus respectivos
valores, necessária para se estabelecer uma conexão com uma base de dados.
Neste exemplo usamos três propriedades da string de
conexão:
Data Source – indica
o servidor para o qual a aplicação deve se conectar.
Initial Catalog – é o
nome do banco de dados que iremos nos conectar.
Integrated Security – é a
autenticação integrada do Windows para se conectar ao servidor. Considerada a
mais segura, pois não é preciso passar usuário e senha para se conectar ao servidor.
Seguindo o código definimos um objeto SqlCommand com as
cláusula Select que retorna os campos CustomerID e CompanyName da tabela
Customers, ordenados por CompanyName e o associamos ao objeto de conexão
instanciado anteriormente.
Logo depois, declaramos um objeto do tipo SqlDataReader
e abrimos a conexão com o banco através do uso do método Open() do objeto de
conexão.
Pelo método ExecuteReader() do SqlCommand, o comando é
executado e associamos seu retorno ao objeto SqlDataReader criado anteriormente.
O DataReader, como dito anteriormente, retorna dados somente leitura e de
acesso seqüencial, por isso é indicado quando queremos retornar dados apenas
para consulta, que não irão sofrer alguma alteração. Devido à isso, o uso do
DataReader aumenta a performance da aplicação.
Além do método ExecuteReader(), o objeto SqlCommand tem
outros métodos, entre eles:
ExecuteNonQuery() – executa
uma instrução que não retorna dados, por exemplo um INSERT ou UPDATE.
ExecuteScalar() – usada
quando a consulta retorna uma única linha com uma única coluna.
Agora configuramos o DropDownList ddlClientes
para usar o DataReader dr como fonte de dados. Fazemos isso usando a
propriedade DataSource. Usamos também a propriedade DataValueField para obter o
seu conteúdo do campo CustomerID e a propriedade DataTextField para obter seu
valor do campo CustomerName.
DataTextField se refere ao campo usado para obter o
texto a ser mostrado na página .aspx. Já a propriedade DataValueField é usada
para associar o valor de cada item do DropDownList ao seu respectivo texto.
Assim podemos apresentar um texto mais amigável ao usuário e associado a um
valor, como um código ou a chave primária de uma tabela, que faça mais sentido
para a aplicação.
Finalizando o código, o método DataBind é responsável
por preencher nosso DropDownList com os valores retornados pelo DataReader
quando chamado.
Se você fez como o descrito neste artigo, compile sua
página, apertando a tecla F5. Irá aparecer uma mensagem em sua tela se esta é a
primeira vez que o projeto é compilado, pedindo para modificar o arquivo
Web.Config para permitir a compilação. Clique em Sim e aguarde.

Se tudo deu certo, seu navegador deve exibir algo
parecido com a imagem abaixo:

Quando usamos o DataReader para obter os dados, estamos
usando o modelo conectado de acesso a dados. Tem esse nome porque é
necessário manter uma conexão com o banco de dados aberta enquanto os registros
retornados pela consulta forem manipulados. No exemplo acima, a conexão só é fechada
após os dados retornados pelo DataReader serem vinculados ao nosso
DropDownList, este processo recebe o nome de DataBinding.
Fechamos aqui a Parte 2 de nossa série de Acesso a
Dados com ASP.NET. Na próxima parte iremos criar um exemplo de modelo desconectado
de acesso à dados e falaremos sobre DataSet Tipado e TableAdapter.
Qualquer dúvida, só postar !
Até o próximo artigo!