Operações básicas com Banco de dados
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 ServerSystem.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:
Conexao.ConnectionTimeout = 90Incluindo 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...
José Carlos Macoratti