Vous êtes sur la page 1sur 16

06/02/12

C# - CRUD com ADO .NET e Stored Procedures

C# - CRUD com ADO .NET e Stored Procedures usando uma DAL


Este artigo essencialmente prtico e mostra como realizar as opera es CRUD (Create, Upate, Delete) em um banco de dados SQL Server usando ADO .NET e Stored Procedures em uma aplicao ASP .NET usando uma camada de acesso a dados ou Data Access La er (DAL). Ferramentas usadas: Visual Web Developer 2010 Express Edition (VWD) SQL Server 2005 Express Edition Banco de dados Escola.mdf Tabela Contatos : Estrutura da tabela: Eu criei o banco de dados Escola.mdf e a tabela Contatos no SQL Server 2005. A estrutura da tabela mostrada ao lado: 1234codigo nome email idade

onde codigo chave primria do tipo Identit .

Criando o projeto
Inicie o VWD e crie um novo web site (File -> New WebSite), selecionando a linguagem Visual C# e o modelo ASP.NET Empt Web Site informando o nome CRUD_DAL_ADONET;

.macoratti.net//12/02/c_crud1.htm

1/16

06/02/12

C# - CRUD com ADO .NET e Stored Procedures

Criando as Stored Procedures


No SQL Server vamos expandir o n Stored Procedures e criar 4 stored procedures: . . . . . Atuali arDados - atualiza dados dos contatos CarregarDados - retorna dados dos contatos DeletarDados - deleta um contato InserirDados - inclui um contato getContato - obtm um nico contato

Conforme o cdigo abaixo: 1- Atuali arDados

2- CarregarDados
C E E P O E R dbo.CarregarDados RA RCD E

AS select * from contatos RETURN


3- DeletarDados
.macoratti.net//12/02/c_crud1.htm 2/16

06/02/12

C# - CRUD com ADO .NET e Stored Procedures

CREATE PROCEDURE dbo.DeletarDados ( @codigo int ) AS DELETE FROM dbo.Contatos WHERE codigo = @codigo RETURN 4- InserirDados CREATE PROCEDURE dbo.InserirDados ( @nome nvarchar(50), @email nvarchar(100), @idade int ) AS Insert into Contatos(nome,email,idade) values (@nome,@email,@idade) RETURN 5- getContato CREATE PROCEDURE dbo.getContato ( @codigo int ) AS select * from Contatos Where codigo = @codigo RETURN

Definindo o c digo do projeto


Vamos agora definir o c digo do projeto comeando pela definio da string de conexo no arquivo web.Config conforme mostrada a seguir: <?xml version="1.0"?> <!-For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <system.web> <compilation debug="false" targetFramework="4.0" /> </system.web>

<connectionStrings> <add name="Macoratti" connectionString="Data Source=.\SQLEXPRESS;Catalog=Escola;Integrated Security=True;User Instance providerName="System.Data.SqlClient"/> </connectionStrings> </configuration> Vamos agora incluir uma classe ao projeto via menu Project -> Add New Item, selecionando o modelo Class com o nome AcessoDAL.cs:
.macoratti.net//12/02/c_crud1.htm 3/16

06/02/12

C# - CRUD com ADO .NET e Stored Procedures

Confirme a incluso deste arquivo na pasta App_Code e inclua o c digo abaixo na classe Ace oDB que esta no arquivo Ace oDAL.c : using System; using System.Configuration; using System.Web.Configuration; public class AcessoDB { static public String ConnectionString { get { // pega a string de conexo do web.config return WebConfigurationManager.ConnectionStrings["Macoratti"].ConnectionString; } } } Note que o mtodo Connec ionS ing da classe Ace oDB esttico ( a ic) o que indica que no precisaremos instanciar a classe Ace oDB para usar o mtodo. Vamos agora incluir outra classe chamada Con a o no projeto para representar um Con a o com o c digo abaixo: /// <summary> /// Summary description for Contato /// </summary> public class Contato { public int Codigo { get; set; } public string Nome { get; set; } public string Email { get; set; } public int Idade { get; set; } }
.macoratti.net//12/02/c_crud1.htm 4/16

06/02/12

C# - CRUD com ADO .NET e Stored Procedures

Vamos incluir outra classe no projeto chamada contatoDAL que ir conter os mtodos de acesso aos dados:

Na classe contatoDAL temos os seguintes mtodos: GetContatos GetContato incluirContato deletarContato atuali arContato O c digo visto abaixo:
using System; using System.Data.SqlClient; using System.Data; public class BooksDAL { public static DataSet GetContatos() { SqlConnection con = new SqlConnection(Database.ConnectionString); SqlDataAdapter da = new SqlDataAdapter("CarregarDados", con); da.SelectCommand.CommandType = CommandType.StoredProcedure; DataSet ds = new DataSet(); da.Fill(ds, "contatos"); return ds; } public static Contato GetContato(int codigo) { SqlConnection con = new SqlConnection(Database.ConnectionString); try { con.Open(); SqlCommand cmd = new SqlCommand("getContato", con); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@codigo", codigo); SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) { Contato ct = new Contato(); ct.Nome = dr["nome"].ToString(); ct.Email = dr["email"].ToString(); ct.Idade = Int32.Parse(dr["idade"].ToString());
.macoratti.net//12/02/c_crud1.htm 5/16

06/02/12

C# - CRUD com ADO .NET e Stored Procedures

return ct; else return null; catch (Exception ex) { throw ex; finally { con.Close();

public void incluirContato(Contato contato) { SqlConnection con = new SqlConnection(Database.ConnectionString); try { con.Open(); SqlCommand cmd = new SqlCommand("InserirDados", con); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@nome", contato.Nome); cmd.Parameters.AddWithValue("@email", contato.Email); cmd.Parameters.AddWithValue("@idade", contato.Idade); cmd.ExecuteNonQuery();

catch (Exception ex) { throw ex; // retorna mensagem de erro finally { con.Close();

public static string deletarContato(int codigo) { SqlConnection con = new SqlConnection(Database.ConnectionString); try { con.Open(); SqlCommand cmd = new SqlCommand("DeletarDados", con); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@codigo", codigo); cmd.ExecuteNonQuery(); return null; // success catch (Exception ex) { throw ex; // retorna mensagem de erro finally { con.Close();

public static string atualizarContato(Contato contato) { SqlConnection con = new SqlConnection(Database.ConnectionString); try { con.Open(); SqlCommand cmd = new SqlCommand("AtualizarDados", con); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@codigo", contato.Codigo); cmd.Parameters.AddWithValue("@nome", contato.Nome);
.macoratti.net//12/02/c_crud1.htm 6/16

06/02/12

C# - CRUD com ADO .NET e Stored Procedures

cmd.Parameters.AddWithValue("@email", contato.Email); cmd.Parameters.AddWithValue("@idade", contato.Idade); cmd.ExecuteNonQuery(); return null; // success } catch (Exception ex) { throw ex; // retorna mensagem de erro } finally { con.Close(); } } }

Criando a Interface
Vamos incluir no projeto uma Web Form via menu WebSiste-> Add New Item -> Web Form com o nome Default.aspx; A seguir vamos incluir uma tabela com 8 colunas e 1 linha e incluir 5 controles LinkButton conforme o leiaute da figura abaixo:

Ap s isso inclua 4 novas pginas web (Web Form) com os seguintes nomes: Incluir.aspx Deletar.aspx Atuali ar.aspx Listar.aspx Agora vamos atribuir a cada propriedade PostbackUrl de cada um dos controles LinkButtons, o caminho e nome dada respectiva pgina:

.macoratti.net//12/02/c_crud1.htm

7/16

06/02/12

C# - CRUD com ADO .NET e Stored Procedures

O c digo completo da pgina Default.asp o seguinte:


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <style type="text/css"> .style1 { width: 90%; } .style2 { font-family: "Trebuchet MS"; color: #3333FF; } .style3 { height: 27px; text-align: center; } .style4 { height: 19px; } </style> </head> <body> <form id="form1" runat="server"> <div> <table class="style1"> <tr> <td class="style2"> <strong>Macoratti.net - CRUD com ADO .NET usando a camada DAL</strong></td> </tr> <tr> <td bgcolor="#33CCFF"> &nbsp;</td> </tr> <tr> <td style="text-align: center"> &nbsp;<asp:LinkButton ID="LinkButton1" runat="server" PostBackUrl="~/Incluir.aspx" style="font-family: 'Trebuchet MS'">1 - Incluir novo Contato </asp:LinkButton> </td> </tr> <tr> <td style="text-align: center"> <asp:LinkButton ID="LinkButton2" runat="server" PostBackUrl="~/Atualizar.aspx" style="font-family: 'Trebuchet MS'">2- Atualizar Contato</asp:LinkButton> </td> </tr> <tr> <td class="style3"> <asp:LinkButton ID="LinkButton3" runat="server" PostBackUrl="~/Deletar.aspx" style="font-family: 'Trebuchet MS'">3- Deletar Contato</asp:LinkButton> </td> </tr> <tr> <td style="text-align: center">
.macoratti.net//12/02/c_crud1.htm 8/16

06/02/12

C# - CRUD com ADO .NET e Stored Procedures

<asp:LinkButton ID="LinkButton4" runat="server" PostBackUrl="~/Listar.aspx" style="font-family: 'Trebuchet MS'">4- Listar Contatos</asp:LinkButton> </td> </tr> <tr> <td bgcolor="#33CCFF" class="style4"> </td> </tr> <tr> <td> &nbsp;</td> </tr> </table> </div> </form> </body> </html>

Vamos agora definir o leiaute de cada uma das pginas usadas no projeto: 1- pgina Incluir.asp : leiaute :

c digo do arquivo code-behind Incluir.asp .cs : using System; public partial class Incluir : System.Web.UI.Page
.macoratti.net//12/02/c_crud1.htm 9/16

06/02/12

C# - CRUD com ADO .NET e Stored Procedures

{ protected void Page_Load(object sender, EventArgs e) { } protected void btnIncluir_Click(object sender, EventArgs e) { ContatoDAL ctDal = new ContatoDAL(); Contato _contato = new Contato(); _contato.Nome = txtNome.Text; _contato.Email = txtEmail.Text; _contato.Idade = Int32.Parse( txtIdade.Text); try { ctDal.incluirContato(_contato); lblMsg.Text = "Contato includo com sucesso!"; } catch (Exception ex) { lblMsg.Text = "Error -> " + ex.Message; } } } 2- pgina Deletar.asp

C digo do arquivo code-behind Deletar.asp .cs: using using using using using using System; System.Collections.Generic; System.Linq; System.Web; System.Web.UI; System.Web.UI.WebControls;

public partial class Deletar : System.Web.UI.Page { protected void btnDeletar_Click(object sender, EventArgs e) {
.macoratti.net//12/02/c_crud1.htm 10/16

06/02/12

C# - CRUD com ADO .NET e Stored Procedures

try { ContatoDAL.deletarContato(Int32.Parse(txtCodigo.Text)); lblmsg.Text = "Contato excludo com sucesso!"; } catch (Exception ex) { lblmsg.Text = "Error -> " + ex.Message; } } } 3- pgina Atuali ar.aspx

C digo do arquivo code-behind Atuali ar.aspx.cs using System; public partial class Atualizar : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnGetDetalhes_Click(object sender, EventArgs e) { if (txtCodigo.Text == string.Empty) { lblmsg.Text = "C digo invlido"; return; } Contato c = ContatoDAL.GetContato(Int32.Parse(txtCodigo.Text)); if (c != null) { txtNome.Text = c.Nome; txtEmail.Text = c.Email; txtIdade.Text = c.Idade.ToString(); btnAtualiza.Enabled = true; }
.macoratti.net//12/02/c_crud1.htm 11/16

06/02/12

C# - CRUD com ADO .NET e Stored Procedures

else { lblmsg.Text = "Contato no encontrado"; btnAtualiza.Enabled = false; } } protected void btnAtualizar_Click(object sender, EventArgs e) { Contato _contato = new Contato(); _contato.Nome = txtNome.Text; _contato.Email = txtEmail.Text; _contato.Idade = Int32.Parse(txtIdade.Text); try { ContatoDAL.atualizarContato(_contato); lblmsg.Text = "Contato excludo com sucesso!"; } catch (Exception ex) { lblmsg.Text = "Error -> " + ex.Message; } } 3- pgina da pgina Listar.asp

C digo do arquivo code-behind Listar.asp .cs using using using using System; System.Collections.Generic; System.Linq; System.Web;
12/16

.macoratti.net//12/02/c_crud1.htm

06/02/12

C# - CRUD com ADO .NET e Stored Procedures

using System.Web.UI; using System.Web.UI.WebControls; public partial class Listar : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { GridView1.DataSource = ContatoDAL.GetContatos(); GridView1.DataBind(); } } Agora s alegria... Vamos executar a aplicao ASP .NET e ver se tudo esta funcionando corretamente: 1- Pgina principal Default.asp

2- Pgina para exibir a lista de contatos Listar.asp

.macoratti.net//12/02/c_crud1.htm

13/16

06/02/12

C# - CRUD com ADO .NET e Stored Procedures

4- Pgina para incluir um novo contato Incluir.aspx

5- Pgina para atualizar um contato Atuali ar.aspx a- Obtendo detalhes do ltimo registro que inclumos que dever possuir o cdigo 9:

b- Atualizando a idade e o email do contato:

.macoratti.net//12/02/c_crud1.htm

14/16

06/02/12

C# - CRUD com ADO .NET e Stored Procedures

6- Pgina para excluir um contato Excluir.aspx

E assim terminamos essa pequena reviso sobre como usar stored procedures e uma camada de acesso a dados em uma aplicao ASP .NET usando Web Forms. Pegue o projeto completo com os exemplos aqui : CRUD_DAL_ADONET.zip

1Pedro 1:24 Porque: Toda a carne como a erva, e toda a sua gl ria como a flor da erva. Secou-se a erva, e caiu a sua flor; 1Pedro 1:25 mas a palavra do Senhor permanece para sempre. E esta a palavra que vos foi evangelizada.
Refer ncias: Seo VB .NET do Site Macoratti.net Seo C# do site Macoratti.net Super DVD .NET - A sua porta de entrada na plataforma .NET Super DVD V deo Aulas - V deo Aula sobre VB .NET, ASP .NET e C# C# - Acesso SQL Server com CRUD (ADO .NET) - Macora i.net C# - Acesso SQL Server com CRUD (ADO .NET) - Macora i.net C# - CRUD b sico com Entity Framework - Macora i.net
Jos
.macoratti.net//12/02/c_crud1.htm

Carlos Macoratti
15/16

06/02/12

C# - CRUD com ADO .NET e Stored Procedures

.macoratti.net//12/02/c_crud1.htm

16/16

Vous aimerez peut-être aussi