quarta-feira, 21 de março de 2012

Operações básicas com ASP.NET

Operações básicas com ASP.NET 

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


Operações básicas com ASP.NET