Académique Documents
Professionnel Documents
Culture Documents
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
2- CarregarDados
C E E P O E R dbo.CarregarDados RA RCD E
06/02/12
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
<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
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
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
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
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
06/02/12
<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> </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
{ 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
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
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
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
.macoratti.net//12/02/c_crud1.htm
13/16
06/02/12
5- Pgina para atualizar um contato Atuali ar.aspx a- Obtendo detalhes do ltimo registro que inclumos que dever possuir o cdigo 9:
.macoratti.net//12/02/c_crud1.htm
14/16
06/02/12
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
.macoratti.net//12/02/c_crud1.htm
16/16