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 Macoratti



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. Vamos lá...

Sempre 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 ?

  1. A classe conexao é inicializada passando a string de conexão como parâmetro ao construtor da classe XXXConnection
  2. 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:

Conexao.ConnectionTimeout = 90

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:

  1. Criar e abrir um conexão com um banco de dados
  2. Criar um comando que representa a cláusula SQL -Insert - que deverá ser executada.
  3. 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 criterio

Exemplo :

UPDATE Teste SET Nome = "Macoratti" WHERE Nome = "Jose"

Para executar um comando UPDATE em uma página ASP.NET temos os seguintes passos:

  1. Criar e abrir uma conexão com o banco de dados
  2. Criar um comando que representa a cláusula SQL -Update - que deverá ser executada.
  3. 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 criterio

Exemplo:

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...

José Carlos Macoratti

José Carlos Macoratti