.NET - O eterno problema de acesso e exibição dos dados
Iniciamos este artigo com a pergunta recorrente : Como acessar um banco de dados e exibir os dados na internet ou num formulário Windows ?
Há anos parece que esta pergunta não quer calar...
Com o advento da plataforma .NET , do Visual Basic 2005 Express e do Visual Web Developer Express o que teria mudado ?
Depende... Você deseja saber O QUE FAZER ou COMO FAZER ?
Se nos atermos ao QUE FAZER podemos afirmar que não houve alterações significativas..
Senão vejamos...
Os ingredientes para a receita de bolo : "O que fazer para acessar um banco de dados e exibir os dados" são:
E quanto as etapas básicas quais seriam ?
Vamos passo a passo efetuar cada etapa do processo ?
1- Banco de dados
a - SQL Server - SQL Server .NET Data Provider :
Você deverá usar o seguinte namespace:
Aplicação Web | Aplicação Windows Forms |
<%@ Import Namespace="System.Data.SQLClient" %> | Imports System.Data.SqlClient |
b - Microsoft Access - OleDB .NET Data Provider :
Você deverá usar o seguinte namespace:
Aplicação Web | Aplicação Windows Forms |
<%@ Import Namespace="System.Data.OleDb" %> | Imports System.Data.OleDb |
Nota:
Você
pode usar qualquer outro banco de dados como Oracle,
FireBird, PosteGreeSQL , MySQL , etc. Nestes casos , com exceção do Oracle , você deverá usar um provedor de terceiros e se orientar pela documentação fornecida para o provedor. Lembrando que muitos destes provedores estão em suas versões beta. Abaixo a localização para download de alguns provedores: |
2- String de conexão
Exemplo de string de conexão com o banco de dados Northwind
a - SQL Server :
Aplicação Web e Aplicação Windows Forms |
Dim strConn as string = "server=(local);uid=sa;pwd=pwd;database=Northwind" |
b - Microsoft Access -:
Aplicação Web e Aplicação Windows Forms |
Dim strConn as string = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\dados\northwind.mdb" |
3- Conexão
a - SQL Server :
Exemplo de string de conexão com o banco de dados Northwind
Aplicação Web e Aplicação Windows Forms |
Dim Conexao as New SQLConnection(strConn) |
b - Microsoft Access -:
Você deverá usar o seguinte namespace:
Aplicação Web e Aplicação Windows Forms |
Dim Conexao as New OleDBConnection(strConn) |
4- Consulta SQL
Exemplo de consulta SQL selecionando todos os registros da tabela Customers
a - SQL Server :
Aplicação Web e Aplicação Windows Forms |
Dim sql as String = " Select * from Customers |
b - Microsoft Access -:
Aplicação Web e Aplicação Windows Forms |
Dim sql as String = " Select * from Customers |
5- Abrindo a conexão
a- Usando o DataReader
Usar um controle DataReader implica em um acesso conectado de somente-leitura com a fonte de dados, ou seja , a conexão deverá existir durante o processo e não poderão ser feitas alterações na fonte de dados.
Com DataReader você pode efetuar o tratamento para exibição dos dados de duas formas :
1- Receber o DataReader gerado e percorrê-lo linha por linha manipulando os dados para exibição;
Abaixo um exemplo de conexão com o banco de dados SQL Server Northwind.mdf onde percorremos a tabela Customers e exibimos o código e nome do contato em um controle ListBox:
Private
Sub Button1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click Dim codigo As String Dim nome As String Dim strconn As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\dados\NORTHWND.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim Conexao As New SqlConnection(strConn) Dim sql As String = " Select * from Customers" Dim dr As SQLDataReader Dim cmd As New SQLCommand(Sql, conexao) conexao.Open() dr = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection) While dr.Read() codigo = dr("CustomerID") nome = dr("ContactName") ListBox1.Items.Add(codigo & vbTab & nome) End While End Sub |
2- Receber o DataReader gerado e vinculá-lo a um controle para exibição de dados como DataGridView, GridView, etc.
Private
Sub Button2_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click Dim dt as new DataTable Dim strconn As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\dados\NORTHWND.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim Conexao As New SqlConnection(strconn) Dim sql As String = " Select CustomerID, ContactName from Customers" Dim dr As SqlDataReader Dim cmd As New SqlCommand(sql, Conexao) Conexao.Open() dr = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection) dt.Load(dr) DataGridView1.DataSource = dt End Sub |
Acima estamos usando um DataTable para receber o resultado pelo DataReader.
Nota:
Porque
não podemos vincular um DataReader diretamente a um
DataGridView ? A fonte de dados vinculada ao um controle DataGridView pode ser de qualquer tipo que implemente as seguintes interfaces:
Por isso usamos um objeto DataTable para receber o DataReader e em seguida abribuir o datatable ao DataGridView. Poderiamos também usar um BindingSource da seguinte forma:
|
b- Usando o DataSet
Usar um DataSet é muito simples. Usando somente código efetuamos as seguintes etapas:
- definimos o DataSet;
- Definimos consulta SQL que irá obter os dados da tabela;
- Criamos um objeto Command com base na consulta SQL e na conexão obtida
a partir do arquivo de configuração;(Para acessar
clique com botão direito do mouse sobre My Project e selecione Open)
- Preenchemos o DataSet a partir do objeto
Command;
- Exibimos o resultado no controle DataGridView via propriedade
DataSource;
Private
Sub Button1_Click(ByVal
sender As
System.Object, ByVal
e As
System.EventArgs) Handles
Button1.Click Dim ds As DataSet = New DataSet() Dim sql As String = "Select * from Categories" Dim Cmd As New OleDbDataAdapter(sql, My.Settings.connBD)
End Sub
|
A conexão esta definida no arquivo de configuração app.config como : Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Dados\Northwind.mdb
Executando o projeto iremos ter o DataGridView preenchido com os dados da tabela Categories:
Se desejar obter o mesmo resultado em uma página web usando ASP.NET o código muda pouca coisa. Veja o código :
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click'define o dataset, a instrução sql e a string de conexao Dim ds As DataSet = New DataSet() Dim sql As String = "Select * from Categories" Dim connstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Dados\Northwind.mdb" 'define o objeto connection e objeto dataadpater Dim con As New OleDbConnection(connstring) Dim da As OleDbDataAdapter = New OleDbDataAdapter(sql, con) 'preenche o dataset da.Fill(ds, "Categorias")'exibe os dados no grid usando o modo padrão GridView1.DataSource = ds.Tables( "Categorias").DefaultViewGridView1.DataBind() End Sub |
Você notou que embora O COMO FAZER tenha mudado substancialmente O QUE FAZER praticamente continua da mesma forma. Será que o modelo fornecido pode ser considerado realmente um modelo legítimo de acesso aos dados orientado a objetos. Notou que velhos esqueletos ainda permanecem , talvez como uma herança dos velhos tempos , até quando vamos continuar nesse esquema ???
Eu sei , é apenas .NET , mas eu gosto...
José Carlos Macoratti