Desenvolvimento - Visual Basic .NET
Operações básicas com Banco de dados e VB.NET
Neste artigo vamos aprender como usar as classes ADO.NET para realizar as tarefas básicas como : acessar , obter dados , incluir dados , excluir dados e atualizar dados em páginas ASP.NET ( o código usado é VB.NET). Neste artigo vou me ater aos banco de dados Access e SQL Server por questão de tempo e para não tornar o artigo muito extenso.
por José Carlos MacorattiSempre que formos trabalhar com banco de dados em páginas ASP.NET deveremos importar os seguintes namespaces:
Banco de dados Access | Banco de Dados SQL Server |
System.Data
System.Data.OleDb |
System.Data
System.Data.SqlClient |
Nota: Você pode usar o namespace System.Data.OleDb com o Microsoft SQL Server e também se for acessar o Oracle. É claro que não terá acesso as funcionalidades do namespace System.Data.SqlClient.
Criando um conexão com o banco de dados
Você já deve estar careca de saber que a primeira coisa que você precisa fazer para acessar um banco de dados é criar uma conexão com o banco de dados.
SQL Server | Access |
<%@ Import Namespace="System.Data"
%> <%@ Import NameSpace="System.Data.SqlClient" %> <% Dim conexao As SqlConnection conexao = New SqlConnection( "server=localhost;database=Pubs;uid=sa" ) conexao.Open() %> |
<%@ Import Namespace="System.Data"
%> <%@ Import NameSpace="System.Data.OleDb" %> <% Dim conexao As OleDbConnection conexao = New OleDbConnection( "PROVIDER=Microsoft.Jet.OLEDB.4.0; DATASource=c:\teste.mdb" ) conexao.Open() %> |
Como funciona ?
- A classe conexao é inicializada passando a string de conexão como parâmetro ao construtor da classe XXXConnection
- A conexão é então aberta via método Open da classe XXXConnection
Nota: Você não precisa definir um parâmetro Provider para a conexão usando as classes SQLConnection. Estas classes trabalham diretamente com o protocolo TDS (Tabular Data Stream). Você também não pode usar um Data Source Name (DSN) quando abrir uma conexão com a classe SQLConnection , para isto , use o namespace System.Data.OleDb
Na conexão com o Access temos que informar o nome do provedor OLEDB - Microsoft.Jet.OLEDB.4.0 - e o caminho do banco de dados no servidor. Para conectar com outro banco de dados deverá usar um provedor específico. Assim para conectar com o Oracle existe o provedor MSDAORA.
Para usar um DSN com a classe OleDbConnection podemos usar o seguinte código :
Conexao = New OleDbConnection( "DSN=Nome_DSN" )Neste caso você é forçado a usar o OLEDB para o provedor ODBC e não o provedor OLEDB nativo do banco de dados. Isto pode afetar o desempenho de acesso aos dados.
Ao invocar o método Open , a conexão tem 15 segundos para ser efetivada antes de expirar por time out. Para alterar este valor padrão você pode definir outro valor , o código abaixo aumenta o valor para 90 segundos:
Incluindo dados com ADO.NET
Agora que já sabemos como criar uma conexão com um banco de dados , vamos usar esta conexão para incluir dados em uma tabela do banco de dados. Vamos usar o comando SQL - Insert - cuja sintaxe é a seguinte :
INSERT NomeDaTabela ( coluna1, coluna2... ) VALUES ( valor1, valor2... )Exemplo :
INSERT Teste ( Nome , Endereco, Telefone ) VALUES ( "Macoratti", "Rua Teste 100", "11-1234-7852 )As etapas necessárias para que o comando SQL INSERT seja executado em uma página ASP.NET são:
- Criar e abrir um conexão com um banco de dados
- Criar um comando que representa a cláusula SQL -Insert - que deverá ser executada.
- Executar o comando.
SQL Server |
<%@
Import Namespace="System.Data" %> <%@ Import NameSpace="System.Data.SqlClient" %> <% Dim conexao As SqlConnection Dim comando As SqlCommand conexao = New SqlConnection("server=localhost;uid=sa;pwd=senha;database=TesteDB") conexao.Open() comando = New SqlCommand( "Insert Teste ( coluna ) Values ( "Teste" )", conexao ) comando.ExecuteNonQuery() conexao.Close() %> |
-A classe SqlCommand é inicializada com dois parâmetros : o comando que vai executar e a conexão.
-A cláusula Insert vai incluir um novo registro na tabela Teste do banco de dados TesteDB
- O comando é executado invocando o método ExecuteNonQuery da classe SqlCommand. Este método é usado para enviar para executar um comando SQL que não retorna registros.
Access |
<%@ Import Namespace="System.Data"
%> <%@ Import NameSpace="System.Data.OleDb" %> <% Dim conexao As OleDbConnection Dim myCommand As OleDbCommand conexao = New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATASource=c:\Teste.mdb" ) conexao.Open() comando = New OleDbCommand( "Insert INTO Teste ( Nome ) Values ( "Macoratti" )", conexao ) comando.ExecuteNonQuery() conexao.Close() %> |
Nota: Se a string que você estiver incluindo na tabela contiver uma apóstrofe interna (") você deve tomar cuidado. Se você usar a sintaxe padrão :
INSERT INTO Teste ( Nome ) Values ( "Macdonald"s" )Vai obter um erro por que o apostrofe (") interna de Macdonald"s é interpretada como final da string. Para contornar este problema devemos usar dois sinais de apostrofes. Assim :
INSERT INTO Teste ( Nome ) Values ( "Macdonald""s" )Atualizando dados com ADO.NET
Para atualizar os registros existente em uma tabela de um banco de dados usamos o comando SQL UPDATE. A sintaxe é a seguinte :
UPDATE tabela SET coluna1 = valor1, coluna2 = valor2... WHERE criterioExemplo :
UPDATE Teste SET Nome = "Macoratti" WHERE Nome = "Jose"Para executar um comando UPDATE em uma página ASP.NET temos os seguintes passos:
- Criar e abrir uma conexão com o banco de dados
- Criar um comando que representa a cláusula SQL -Update - que deverá ser executada.
- Executar o comando.
SQL Server |
<%@ Import Namespace="System.Data"
%> <%@ Import NameSpace="System.Data.SqlClient" %> <% Dim conexao As SqlConnection Dim comando As SqlCommand conexao = New SqlConnection( "server=localhost;uid=sa;pwd=senha;database=TesteDB" ) conexao.Open() comando = New SqlCommand( "UPDATE Teste SET Nome="Macoratti" WHERE Nome="Jose"", conexao ) comando.ExecuteNonQuery() conexao.Close() %> |
Access |
<%@ Import Namespace="System.Data"
%> <%@ Import NameSpace="System.Data.OleDb" %> <% Dim conexao As OleDbConnection Dim comando As OleDbCommand conexao = New OleDbConnection( "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATASource=c:\teste.mdb" ) conexao.Open() comando = New OleDbCommand( "UPDATE Teste SET Nome="Macoratti" WHERE Nome = "Jose"", conexao ) comando.ExecuteNonQuery() conexao.Close %> |
- O comando UPDATE pode afetar mais de um registro. Quando você executa um comando Update ele altera cada registro que satisfaz a cláusula Where.
- Podemos determinar o número de registros afetados por um comando Update em uma página ASP.NET capturando o valor retornado pelo método ExecuteNonQuery(). Basta incluir o código abaixo :
registrosAfetados =
comando.ExecuteNonQuery()
Response.Write( "O comando UPDATE modificou " &
registrosAfetados.toString() & " registros!" )
Excuindo dados com ADO.NET
Para excluir dados de uma tabela de um banco de dados usamos o comando DELETE cuja sintaxe básica é :
DELETE tabela WHERE criterioExemplo:
DELETE Teste WHERE Nome = "Macoratti"
SQL Server |
<%@ Import Namespace="System.Data"
%> <%@ Import NameSpace="System.Data.SqlClient" %> <% Dim conexao As SqlConnection Dim comando As SqlCommand conexao = New SqlConnection( "server=localhost;uid=sa; pwd=senha;database=TesteDB" ) conexao.Open() comando = New SqlCommand( "DELETE Teste WHERE Nome="Macoratti"", conexao ) comando.ExecuteNonQuery() conexao.Close() %> |
Access |
<%@ Import Namespace="System.Data"
%> <%@ Import NameSpace="System.Data.OleDb" %> <% Dim conexao As OleDbConnection Dim comando As OleDbCommand conexao = New OleDbConnection( "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATASource=c:\testeDB.mdb" ) conexao.Open() comando = New OleDbCommand("DELETE FROM Teste WHERE Nome="Macoratti"", conexao ) comando.ExecuteNonQuery() conexao.Close() %> |
- No Access usamos DELETE FROM ao invés de DELETE usado no SQL Server.
- O comando DELETE excluir todos os registros que obedeçam a condição definida na cláusula Where.
- Podemos determinar o número de registros afetados por um comando Delete em uma página ASP.NET capturando o valor retornado pelo método ExecuteNonQuery(). Basta incluir o código abaixo :
registrosAfetados =
comando.ExecuteNonQuery()
Response.Write( "O comando DELETE excluiu " &
registrosAfetados.toString() & " registros !" )
E , é isto ai ... Até o próximo artigo...
- Entity Framework 4: Repositório GenéricoVisual Basic .NET
- As edições 14 da Easy .net Magazine e 88 da .net Magazine já estão disponíveis.ADO.NET
- Postando no Twiiter com .NET e Migre.meC#
- Setup ApplicationsVisual Basic .NET
- Problemas na manipulação de arquivos do MS Excel com .NETVisual Basic .NET