VB.NET - O acesso a dados com ASP.NET
Após uma primeira incursão na plataforma .NET da Microsoft onde já abordamos os seguintes artigos :
Voltamos para mostrar o acesso a dados usando o VB.NET utilizando uma aplicação ASP.NET. Para não complicar vamos começar com uma tarefa bem simples: Carregar uma caixa de combinação - DropDownList - e de acordo com a seleção do usuário exibir os dados relacionados em uma caixa de texto - TextBox.
A idéia é acessar o banco de dados Northwind.mdb que vem com o Access (vou usar uma versão em português) e aproveitar o relacionamento existente entre a tabela categorias e produtos e exibir no controle DropDownList o nome das categorias e conforme o usuário selecionar uma categoria exibir os produtos relacionados na caixa de texto. Como disse uma tarefa básica e simples.
Para acompanhar este artigo você vai precisar da Versão Beta 2 ( a versão completa já saiu , mas a versão beta funciona) do Microsoft Visual Studio .Net instalada em sua máquina.
1- Inicie o Microsoft Visual Studio .Net 7.0 e abra um novo projeto selecionando - New Project.
2- Na janela New Project Selecione em Project Type : Visual Basic Projects e em Templates: ASP.NET Web Application . Vamos dar o nome ao nosso projeto de Database_Acesso1. No final clique em OK.
3- Altere o nome do formulário para - Database_Acesso1.aspx e monte o formulário conforme a figura abaixo:
O formulário - Database_Acesso1.aspx | Os controles usados no formulário |
O formulário foi montado usando os seguintes controles :
A conexão com o banco de dados northwind.mdb será feita via OleDb.
Agora vamos a parte mais interessante : o código.
Clique duas vezes no formulário - Database_Acesso1.aspx - Você verá algo parecido com a figura abaixo:
A primeira linha de código será colocada acima da declaração Public Class WebForm1 e vai indicar que vamos usar OLeDB para a conexão com nosso banco de dados:
Imports.System.Data.OleDb
- OleDbConnection
- OleDbCommand
- OleDbDataSet
- OleDbDataReader
- OleDbDataAdapter
As próximas linhas de código serão inseridas na área reservada para o evento Page_Load.
A primeira coisa que você deve ter em mente é que estamos usando ADO.NET e isso trouxe uma grande mudança no modo como os dados são manuseados. Quando você usava a ADO os dados eram armazenados em um Recordset e temos um modelo orientado ao banco de dados.
Com a ADO.NET o modelo usado é orientado aos dados e não mais existe o objeto Recordset mas vários outros objetos que tratam do acesso a dados de forma mais flexivel. O DataSet é um desses novos objetos , ele é uma representação dos dados na memória e é usado para representar tabelas, relacionamentos , stored procedures, etc., de forma que não existe uma conexão com a fonte de dados, ou seja, o DataSet é independente da fonte de dados ; isto permite uma economia de recursos pois não estamos acessando diretamente o banco de dados mas uma cópia dos dados no objeto DataSet.
Abaixo temos o código do evento Page_Load :
Private
Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load If Not IsPostBack Then Dim strSql As String Dim conexao As OleDbConnection Dim dscmd As OleDbDataAdapter Dim ds As DataSet conexao = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=C:\teste\Northwind.mdb;") conexao.Open() Try strSql = "Select distinct NomeDaCategoria From Categorias ORDER BY NomeDaCategoria" dscmd = New OleDbDataAdapter(strSql, conexao) ds = New DataSet() dscmd.Fill(ds, "Categorias") DropCategorias.DataTextField = "NomeDaCategoria" DropCategorias.DataValueField = "NomeDaCategoria" DropCategorias.DataSource = ds.Tables("Categorias").DefaultView DropCategorias.DataBind() DropCategorias.Items.Insert(0, New ListItem("Selecione a Categoria...", "")) Finally conexao.Close() End Try End If End Sub |
Se você clicar no botão Start ou pressionar F5 para executar o projeto deverá obter a seguinte página:
Vamos analisar e explicar o código linha por linha:
- If Not IsPostBack - checa se algum dado foi postado para o servidor , em caso positivo o código a seguir é exectado
Dim
strSql As String Dim conexao As OleDbConnection Dim dscmd As OleDbDataAdapter Dim ds As DataSet |
Definição das variáveis objeto usadas na aplicação |
- conexao = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=C:\teste\Northwind.mdb;")
Definimos a conexão com o banco de dados Northwind.mdb localizado no diretorio c:\teste usando o provoder OLE DB 4.0 ; onde Connection - é a classe que implementa a interface de conexão. (IDbConnection interface).
- Conexao.Open - abrimos a conexão com o banco de dados
- A estrutura Try-Catch-Finally - Dentro do bloco Try colocamos o código que pode apresentar erros . Se ocorrer um erro durante o processamento cada declaração Catch vai ser percorrida em busca do tratamento para o erro em questão. O bloco Finally sempre será executado depois do processamento do bloco Try . (A declaração Throw pode ser usada para gerar um erro.)
- strSql = "Select distinct NomeDaCategoria From Categorias ORDER BY NomeDaCategoria"
Definimos aqui a instrução SQL para selecionar os registros da tabela Categorias a ser exibidos no controle DropDownList
- dscmd = New OleDbDataAdapter(strSql, conexao)
DataAdapter - Fornece dados ao DataSet e propaga as alterações do DataSet para a fonte de dados. O serviço do DataAdpater é adpatar os dados dos objetos Command e incluí-los no DataSet e levar os dados do DataSet à fonte de dados usando objetos Command.
- ds = New DataSet()
Gera um objeto ds do tipo DataSet
- dscmd.Fill(ds, "Categorias")
Aqui temos o objeto Data Adapter - dscmd - usando o método Fill que esta vinculado a instrução SQL.
DropCategorias.DataTextField =
"NomeDaCategoria" DropCategorias.DataValueField = "NomeDaCategoria" DropCategorias.DataSource = ds.Tables("Categorias").DefaultView DropCategorias.DataBind() DropCategorias.Items.Insert(0, New ListItem("Selecione a Categoria...", "")) |
Atribuimos
ao controle os valores que vamos exibir. Perceba que o DataSet esta relacionado com Tabelas ( Tables ) e Relacionamentos ( Relations ) e que as tabelas contidas no DataSet pertence a classe DataTable O DataBind é quem preenche o componente DropDownList |
Vamos agora implementar a exibição dos produtos relacionados com a categoria exibida na caixa de texto . Para fazer isto vamos usar uma instrução SQL para extrair os registros da tabela Produtos de acordo com a categoria selecionada.
O código será inserido no evento SelectedIndexChanged do componente DropDownlist. Clique duas vezes no componente e insira o código abaixo no evento:
Private
Sub DropCategorias_SelectedIndexChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
DropCategorias.SelectedIndexChanged Dim strSql As String Dim conexao As OleDbConnection Dim cmd As OleDbCommand Dim dr As OleDbDataReader strSql = " SELECT Produtos.NomeDoProduto" strSql = strSql & " FROM Categorias INNER JOIN Produtos ON Categorias.CódigoDaCategoria = Produtos.CódigoDaCategoria " strSql = strSql & " WHERE Categorias.NomeDaCategoria= '" & DropCategorias.SelectedItem.Value & "'" conexao = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=C:\teste\Northwind.mdb;") conexao.Open() Try cmd = New OleDbCommand(strSql, conexao) dr = cmd.ExecuteReader() TxtProdutos.Text = "" Try Do While dr.Read() TxtProdutos.Text += dr("NomeDoProduto") & vbCrLf Loop Finally dr.Close() End Try Finally conexao.Close() End Try End Sub End Class |
O resultado do processamento após o usuário selecionar uma Categoria é o seguinte:
Como funciona ?
Dim strSql
As String Dim conexao As OleDbConnection Dim cmd As OleDbCommand Dim dr As OleDbDataReader |
definimos as variáveis objetos e strings que serão usadas no evento |
- strSql = " SELECT
Produtos.NomeDoProduto"
strSql = strSql & " FROM Categorias INNER
JOIN Produtos ON Categorias.CódigoDaCategoria
= Produtos.CódigoDaCategoria "
strSql = strSql & " WHERE
Categorias.NomeDaCategoria= '" &
DropCategorias.SelectedItem.Value & "'"
Construimos aqui a string que irá gerar o comando SQL para selecionar o nome dos produtos para a categoria selecionada
- conexao = New
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DATA
SOURCE=C:\teste\Northwind.mdb;")
conexao.Open()
Criamos a conexão com o banco de dados Northwind.mdb e abrimos a conexão
- A estrutura Try-Catch-Finally - Dentro do bloco Try colocamos o código que pode apresentar erros . Se ocorrer um erro durante o processamento cada declaração Catch vai ser percorrida em busca do tratamento para o erro em questão. O bloco Finally sempre será executado depois do processamento do bloco Try .
cmd = New
OleDbCommand(strSql, conexao) dr = cmd.ExecuteReader() TxtProdutos.Text = "" |
Criamos um novo comando OLeDbCommand usando a string SQL e a conexão criadas |
- Do While dr.Read()
TxtProdutos.Text += dr("NomeDoProduto") & vbCrLf
Loop
Preenchemos o controle TxtProdutos com os nomes dos produtos selecionados e exibimos no formulário do projeto.
Se você esta estranhando um pouco o código , no começo é assim mesmo...(depois piora. )
Embora a plataforma .NET apresente novidades revolucionárias , você só tem uma escolha , arregaçar as mangas e estudar , estudar e ... estudar.
Até a próxima...
José Carlos Macoratti