VB .NET - Acesso e Navegação de dados para novatos - I
Há alguns dias recebi um email solicitando alguns esclarecimentos sobre o acesso e a navegação dos dados na linguagem VB .NET.
Era um programador que estava migrando do Visual Basic para o VB .NET que estava começando a usar ADO .NET para acessar dados.
Ele logo percebeu que algumas coisas mudaram no VB .NET.
Onde estão os objetos Recordsets e os métodos MoveNext, MovePrevious, MoveFirst e MoveLast da ADO ?
Obs: Neste meu artigo - VB.NET - Usando ADO para acesso e manutenção de dados eu mostro que ainda podemos usar os recursos da ADO, mas sinceramente eu não recomendo você seguir esse caminho seria como ter uma Ferrari e andar sempre em primeira marcha.
Agora eu tenho duas notícias para você :
Primeira : A ADO.NET não possui recursos de movimentação pelos registros nem suporta cursores. Os recursos de navegação pelos registros tais como MoveFirst , MoveNext , etc. não são suportados.
Segunda : A linguagem VB .NET possui recursos mais avançados para acessar e navegar pelos dados.
Então como acessar os dados e fazer a navegação usando VB .NET ?
Eu mesmo já passei por isso quando dos meus primeiros passos no VB .NET e sei como é.
Por isso resolvi escrever este artigo mostrando como realizar o acesso e a navegação de dados usando ADO .NET e a linguagem VB .NET.
Vou usar uma linguagem bem informal para tratar de assunto básicos mas importantes.
Eu não vou entrar em detalhes sobre ADO .NET, suas classes, métodos e propriedades para isso sugiro que leia os artigos citados nas referências.
Neste artigo eu vou mostrar uma das muitas maneiras que você pode usar para acessar e navegar pelos dados.
Bem, vamos começar abrindo o Visual Studio 2012 Express for desktop que á a última versão estável da plataforma .NET que permite criar programas nas linguagens C# e VB .NET.
Nota : A nova versão esta sendo disponibilizada como uma release candidate - RC - e poderia também ser usada para criar o exemplo deste artigo visto que não houve alterações no assunto que iremos tratar.
Criando o projeto no Visual Studio 2012 Express
Abra o Visual Studio 2012 Express for desktop e clique em New Project;
Selecione o template Visual Basic -> Windows -> Windows Forms Application e informe o nome AcessoDadosVBNET e clique no botão OK;
Isso irá criar uma solução com um projeto Windows Forms contendo um formulário Form1.vb pronto para ser usado.
Quando você criava um projeto no VB6 também era criado um projeto com um formulário form1.vbp.
Agora podemos começar a criar o nosso código no formulário para acessar e navegar pelos dados , certo ?
Errado !!!
Uma coisa que você tem que aprender é não misturar código de acesso a dados com interface de usuário.
Se você colocar o código de acesso aos dados no formulário, vai funcionar mas isso vai lhe trazer dois grandes problemas :
Aprenda uma coisa : SEPARE SEMPRE O CÓDIGO DE APRESENTAÇÃO DO CÓDIGO DE ACESSO AOS DADOS
Separar é a palavra chave que vai garantir mais tarde que você possa reutilizar o código de acesso aos dados que você criou e também via facilitar dar manutenção na sua aplicação.
Agindo assim estamos SEPARANDO RESPONSABILIDADES. Interface cuida da apresentação e interação com o usuário e código de acesso a dados cuida de acesso aos dados.
Outra coisa importante a lembrar é que se você colocar o código de acesso aos dados no formulário isso vai afetar a abertura do formulário se houverem muitos dados para acessar.
Como podemos SEPARAR ?
No VB .NET podemos fazer isso de duas formas básicas:
Eu vou usar a segunda opção.
Criando a camada de Acesso aos dados
No menu File clique em Add -> New Project e selecione o template Class Library e informe o nome DAL:
DAL significa Data Access Layer ou camada de acesso aos dados. Usei esse nome por que ele é quase um padrão mas você pode dar o nome que desejar ao novo projeto.
O projeto foi criado com uma classe padrão Class1.vb vamos alterar esse para SQLHelper.vb.
Nessa classe vamos colocar todo o código de acesso aos dados. Eu usei esse nome por que ele é um nome padrão usado para definir uma classe cuja responsabilidades é somente acessar e persistir informações no banco de dados.
A própria Microsoft disponibilizava um recurso conhecido como Microsoft .NET Data Access Application Block onde existem classes que cuidam do acesso aos dados e a classe SQLHelper é uma delas. Você pode usar essa classe em seu projeto se desejar, embora existam atualmente na plataforma .NET outros recursos como o Entity Framework que cuidam do acesso aos dados.
Nota: Se você se interessar em conhecer esse recurso pode fazer o download da Enterprise Library neste link: http://msdn.microsoft.com/library/cc467894.aspx
Antes de continuar vamos decidir qual banco de dados vamos acessar.
Podemos dizer que a plataforma .NET da suporte nativo para você acessar o SQL Server e o Microsoft Access.
Se você for acessar o SQL Server vai ter que usar as classes do namespaces System.Data.SqlClient.
Se você for acessar o Microsoft Access vai ter que usar as classes do namespace System.Data.Oledb.
E se eu quiser acessar outros banco de dados ? Não posso ?
Sim pode ! Mas neste caso você terá que instalar o provedor específico para o banco de dados. Os principais banco de dados disponibilizam um conector para a plataforma .NET.
Vamos acessar um banco de dados SQL Server.
Para este exemplo eu vou criar um banco de dados chamado Cadastro.mdf e uma tabela Clientes com a seguinte estrutura:
Estou criando esse banco de dados no próprio Visual Studio 2012 Express for desktop usando o Database Explorer.
Então vamos definir o código da nossa classe SQLHelper.vb.
Eu quero apenas acessar o banco de dados e selecionar todos os registros da tabela Clientes para exibir no formulário form1.vb.
Vamos definir os namespaces que iremos usar nesta classe:
Imports System.Data
Imports System.Configuration
Imports System.Data.SqlClient
Para acessar o banco de dados eu tenho primeiro que definir a string de conexão e aqui vamos aprender outra coisa muito importante: NUNCA COLOQUE A STRING DE CONEXÃO FIXA NO SEU CÓDIGO.
Se você colocar a string fixa no seu código se precisar alterá-la vai ter que mexer no código e isso não é bom. O Ideal é colocar a string de conexão fora do código em um local central que possa ser acessado pela aplicação.
Um bom local para colocar a string de conexão é no arquivo de configuração da aplicação, no nosso caso, o arquivo App.Config do projeto Windows forms que criamos no início.
Vamos abrir esse arquivo e definir o código abaixo :
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <connectionStrings> <add name="ClientesSQLServer" connectionString="Data Source=(LocalDB)\v11.0;Initial Catalog=Cadastro;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration> |
Entre as tags <connectionStrings> eu defini o nome da conexão em name como ClientesSQLServer e a string de conexão em connectionString como :
"Data Source=(LocalDB)\v11.0;Initial Catalog=Cadastro;Integrated Security=True"
E como eu sabia que essa era a string de conexão ???
Simples. Quando eu criei o banco de dados no DataBase Explorer basta eu selecionar o banco de dados e visualizar a janela de propriedades e obter o valor da propriedade Connection String.
Agora temos um local onde armazenamos a string de conexão que pode ser acessado de qualquer parte da solução. Se eu tiver que alterar esse valor basta alterar o arquivo App.Config.
Agora podemos definir o código no arquivo SQLHelper.vb conforme abaixo:
Imports System.Data Imports System Imports System.Collections.Generic Imports System.Text Imports System.Configuration Imports System.Data.SqlClient Namespace DAL Public Class SQLHelper Private conexao As SqlConnection Private dap As SqlDataAdapter Private cmd As SqlCommand Public Sub New() Dim strConexao As String = ConfigurationManager.ConnectionStrings("ClientesSQLServer").ConnectionString conexao = New SqlConnection(strConexao) End Sub ''' <summary> ''' carrega todos os registros do banco de dados ''' </summary> ''' <returns></returns> Public Function GetDados(ByVal sql As String) As DataTable dap = New SqlDataAdapter(sql, conexao) dap.SelectCommand.CommandType = CommandType.Text Dim ds As New DataSet() Try dap.Fill(ds, "Clientes") Return ds.Tables("Clientes") Catch Throw Finally ds.Dispose() dap.Dispose() conexao.Close() conexao.Dispose() End Try End Function End Class End Namespace |
Nesta classe definimos:
1- Um construtor - Sub New - que irá abrir o arquivo App.Config e obter a string de conexão
2- Um método GetDados - que recebe uma string sql que representa o comando SQL e retorna um DataTable
Em um projeto mais complexo eu criaria métodos para incluir, atualizar e excluir registros.
Pronto ! Criamos a nossa camada de acesso a dados separada da interface.
Definindo a Interface
Lembra quando você criava a interface no formulário do Visual Basic 6 ?
Aqui é a quase mesma coisa, usamos o caixa de ferramentas e arrastamos e soltamos os controles que vamos usar no formulário.
Em nosso formulário eu vou exibir os registros em um controle DataGridView para mostrar todos os registros e em caixas de texto para exibir detalhes de um registro.
Assim iremos usar os seguintes controles:
O leiaute do formulário pode ser visto abaixo:
Dessa forma já temos dois projetos na solução:
Então vamos acessar a camada de acesso a dados diretamente da camada de interface ?
Não.
Na próxima parte deste artigo vamos criar a camada de negócios que será chamada pela camada de interface.
Joã_3:3
Respondeu-lhe Jesus: Em verdade, em verdade te digo que se alguém não nascer de novo, não pode ver o reino de Deus.Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#