ASP .NET - Inserindo e Atualizando dados em páginas distintas


Este artigo é essencialmente prático e mostra como podemos incluir e atualizar registros em uma tabela de um banco de dados SQL Server em uma aplicação ASP .NET Web Forms.

Recursos usados neste artigo:

Usando o SQL Server Management Studio iremos criar um banco de dados Cadastro.mdf e uma tabela Clientes que possui a seguinte estrutura:

USE [Cadastro]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Clientes](
[id] [int] IDENTITY(1,1) NOT NULL,
[nome] [nvarchar](50) NULL,
[endereco] [nvarchar](50) NULL,
[telefone] [nvarchar](20) NULL,
[email] [nvarchar](100) NULL,
CONSTRAINT [PK_Clientes] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

O script ao lado pode ser usado para criar a tabela usando a janela - Nova Consulta(New Query) - e clicando no botão Executar(Execute).

Abra o Visual Web Developer 2010 Express Edition e crie um novo projeto do tipo ASP .NET Web Application usando a linguagem Visual Basic e o template Web:

O template irá criar uma estrutura já pronta que iremos adaptar para o nosso projeto fazendo algumas alterações.

Vamos definir na master page Site.Master duas novas opções no Menu para Inserir e Atualizar registros da tabela Clientes.

Para isso edite o arquivo Site.Master e altere o código conforme mostrado a seguir:

.....
.....
  <asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal">
    <Items>
         <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home"/>
         <asp:MenuItem NavigateUrl="~/About.aspx" Text="About"/>
         <asp:MenuItem NavigateUrl="~/Inserir.aspx" Text="Inserir"/>
         <asp:MenuItem NavigateUrl="~/Atualizar.aspx" Text="Atualizar"/>
         <asp:MenuItem NavigateUrl="~/Exibir.aspx" Text="Exibir Clientes"/>
   </Items>
 </asp:Menu>
....
....

O código destacado em azul refere-se as duas linhas de código que incluímos no arquivo.

Agora vamos criar as três páginas no projeto : Inserir.aspx , Atualizar.aspx e Exibir.aspx.

No menu Project clique em Add New Item e selecione Web Form using Master Page informando o nome Inserir.aspx e clicando em Add;

 
 

A seguir selecione a master page Site.Master e clique em OK;

Repita o procedimento e crie as página Atualizar.aspx e Exibir.aspx da mesma forma.

Antes de definir o código das páginas vamos incluir a string de conexão do banco de dados Cadastro no arquivo web.config.

Abra o arquivo web.config e defina a string de conexão conforme abaixo:

Incluindo registros

Agora abra a página Inserir.aspx e inclua o código abaixo que será o formulário para o usuário informar os dados para cadastrar um novo cliente:

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site.Master" 
CodeBehind="Inserir.aspx.vb" Inherits="AtualizandoInserindoDados.Inserir" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <p>
    <div>
    <h2>Cadastrar Cliente</h2>
    <asp:Label ID="Label1" runat="server" Text="Nome" Font-Bold="True"
        Width="100px"></asp:Label>
    <asp:TextBox ID="txtNome" runat="server" Width="343px"></asp:TextBox><br />
   
     <asp:Label ID="Label2" runat="server" Text="Endereco" Font-Bold="True"
        Width="100px"></asp:Label>
    <asp:TextBox ID="txtEndereco" runat="server" Width="344px"></asp:TextBox><br />
   
     <asp:Label ID="Label3" runat="server" Text="Telefone" Font-Bold="True"
        Width="100px"></asp:Label>
    <asp:TextBox ID="txtTelefone" runat="server"></asp:TextBox><br />
     <asp:Label ID="Label4" runat="server" Text="Email" Font-Bold="True"
        Width="100px"></asp:Label>
    <asp:TextBox ID="txtEmail" runat="server" Width="343px"></asp:TextBox><br />
    <asp:Button ID="btn_inserir" runat="server" Text="Inserir Registro"
        Font-Bold="True" onclick="btn_inserir_Click" />
        <p>
           <asp:Label ID="lblmsg" runat="server" Font-Bold="True"
          Width="464px" Font-Size="Medium" ForeColor="#CC0000"></asp:Label>
        </p>
    </div>
</p>
</asp:Content>

Vamos agora definir o código do arquivo code-behind Inserir.aspx.vb:

Inclua o código abaixo no arquivo Inserir.aspx.vb:

Imports System.Data.SqlClient
Imports System.Configuration

Public Class Inserir
    Inherits System.Web.UI.Page

    Dim strConnString As String = ConfigurationManager.ConnectionStrings.Item("ConexaoSQLServer").ToString()
    Dim con As New SqlConnection(strConnString)

    Dim str As String
    Dim com As SqlCommand
    Dim sqlda As SqlDataAdapter
    Dim ds As DataSet

    Protected Sub btn_inserir_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn_inserir.Click

        If txtNome.Text <> String.Empty And txtEndereco.Text <> String.Empty Then
            Try
                con.Open()
                str = "insert into clientes(nome,endereco,telefone,email) values('" & txtNome.Text & "','" & txtEndereco.Text & "','" 
& txtTelefone.Text & "','" & txtEmail.Text & "')"
                com = New SqlCommand(str, con)
                com.ExecuteNonQuery()
                con.Close()
                Response.Redirect("Exibir.aspx")
            Catch ex As Exception
                lblmsg.Text = ex.Message
            End Try
        Else
            lblmsg.Text = "Informe o nome e o endereço do cliente"
        End If
    End Sub

End Class

Este código obtém a string de conexão do arquivo web.config e trata o evento Click do botão de comando Inserir Registro.

No evento Click verificamos e o nome e o endereço foram informados e usamos uma instrução SQL Server - Insert into - para incluir novo registro na tabela Clientes.

Após isso o usuário é direcionado para a página Exibir.aspx.

Exibindo os registros

Agora abra a página Exibir.aspx e inclua o código abaixo que irá exibir os registros da tabela Clientes em um controle GridView (gdvClientes):

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site.Master" 
CodeBehind="Exibir.aspx.vb" Inherits="AtualizandoInserindoDados.Exibir" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <asp:GridView runat="server" ID="gdvClientes"  AutoGenerateColumns="false"
            HeaderStyle-BackColor="#7779AF" HeaderStyle-ForeColor="White"
            DataKeyNames="id" ForeColor="#663300" Font-Bold="True" Height="102px" 
        Width="415px">
    <Columns>
    <asp:TemplateField HeaderText="Cliente">
        <ItemTemplate>
            <a href ='<%#"Atualizar.aspx?id=" & DataBinder.Eval(container.dataitem,("id")) %>'> <%#Eval("nome")%>  </a>
        </ItemTemplate >
    </asp:TemplateField>
    <asp:BoundField DataField="nome" HeaderText="Nome" />
    <asp:BoundField DataField="endereco" HeaderText="Endereço" />
    <asp:BoundField DataField="telefone" HeaderText="Telefone" />
    <asp:BoundField DataField="email" HeaderText="Email" />
    </Columns>          
    <HeaderStyle BackColor="Red" ForeColor="White"></HeaderStyle>
            <AlternatingRowStyle ForeColor="#003300" /> 
    </asp:GridView>
      <p>
        <asp:Label ID="lblmsg" runat="server" Font-Bold="True"
        Width="464px" Font-Size="Medium" ForeColor="#CC0000"></asp:Label>
        </p>
</asp:Content>

O código da página Atualizar.aspx define um GridView que exibe os registros da tabela Clientes.

A coluna Cliente é um TemplateField que é definido como um link que chama a página Atualizar.aspx passando o código do cliente (id) como parâmetro: "Atualizar.aspx?id=" onde o id é obtido do campo da tabela Clientes.

<asp:TemplateField HeaderText="Cliente">
<ItemTemplate>
          <a href ='<%#"
Atualizar.aspx?id=" & DataBinder.Eval(container.dataitem,("id")) %>'> <%#Eval("nome")%> </a>
</ItemTemplate >
</asp:TemplateField>

Vamos agora definir o código do arquivo code-behind Exibir.aspx.vb conforme a seguir:

Imports System.Data.SqlClient
Imports System.Configuration

Public Class Exibir
    Inherits System.Web.UI.Page

    Dim strConnString As String = System.Configuration.ConfigurationManager.ConnectionStrings.Item("ConexaoSQLServer").ToString()
    Dim con As New SqlConnection(strConnString)
    Dim str As String
    Dim com As SqlCommand
    Dim sqlda As SqlDataAdapter
    Dim ds As DataSet

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            vincular()
        End If
    End Sub
    Sub vincular()
        Try
            con.Open()
            str = "select * from clientes"
            com = New SqlCommand(str, con)
            sqlda = New SqlDataAdapter(com)
            con.Close()

            ds = New DataSet()
            sqlda.Fill(ds, "cliente")
            gdvClientes.DataSource = ds
            gdvClientes.DataMember = "cliente"
            gdvClientes.DataBind()
        Catch ex As Exception
            lblmsg.Text = ex.Message
        End Try
    End Sub
End Class

No código acima usamos a rotina Vincular() para selecionar todos os registros (Select * from) da tabela Clientes e criamos um dataset preenchendo-o com o resultado da consulta sql e exibindo os registros no controle gridview - gdvClientes.

Atualizando registros

Agora abra a página Atualizar.aspx e inclua o código abaixo que irá permitir atualizar os registros da tabela Clientes:

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site.Master" 
CodeBehind="Atualizar.aspx.vb" Inherits="AtualizandoInserindoDados.Atualizar" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
    <style type="text/css">
        .style1
        {
            width: 420px;
        }
    </style>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<script type="text/javascript">
    function Display(nome) {
        alert(nome + '::: atualizado com sucesso');
        if (alert) {
            window.location = 'Default.aspx';
        }
    }
    </script>
<div>
        <table>
            <tr>
                <td colspan="2" align="center">
                    <b>Editar Clientes</b>
                </td>
            </tr>
            <tr>
                <td>
                    Nome:
                </td>
                <td class="style1">
                    <asp:Label ID="lblNome" runat="server" />
                </td>
            </tr>
            <tr>
                <td>
                    Nome:
                </td>
                <td class="style1">
                    <asp:TextBox ID="txtNome" runat="server" Width="399px"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td>
                    Endereço:
                </td>
                <td class="style1">
                    <asp:TextBox ID="txtEndereco" runat="server" Width="399px"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td>
                    Telefone:
                </td>
                <td class="style1">
                    <asp:TextBox ID="txtTelefone" runat="server"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td>
                    Email:
                </td>
                <td class="style1">
                    <asp:TextBox ID="txtEmail" runat="server" Width="399px"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td>
                </td>
                <td class="style1">
                    <asp:Button ID="btnAtualizar" runat="server" Text="Atualizar" OnClick="btnAtualizar_Click" />
                    <asp:Button ID="btnCancelar" runat="server" Text="Cancelar" OnClick="btnCancelar_Click" />
                </td>
            </tr>
        </table>
          <p>
          <asp:Label ID="lblmsg" runat="server" Font-Bold="True"
          Width="497px" Font-Size="Medium" ForeColor="#CC0000"></asp:Label>
        </p>
    </div>
</asp:Content>

No código acima temos a declaração da função javascript Display() que irá exibir uma mensagem quando o cliente for atualizado.

A seguir é montado o formulário para permitir que o usuário altere os dados do cliente usando o botão atualizar ou cancelar a operação retornando à página Default.aspx.

Vamos agora definir o código do arquivo code-behind Atualizar.aspx.vb conforme abaixo:

Imports System.Data.SqlClient
Imports System.Configuration

Public Class Atualizar
    Inherits System.Web.UI.Page
    Dim strConnString As String = System.Configuration.ConfigurationManager.ConnectionStrings.Item("ConexaoSQLServer").ToString()
    Dim con As New SqlConnection(strConnString)
    Dim str As String
    Dim com As SqlCommand
    Dim sqlda As SqlDataAdapter
    Dim ds As DataSet
    Dim id As Integer = 0
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
         If Not IsNothing(Request.QueryString("id")) Then
            id = Convert.ToInt32(Request.QueryString("id").ToString())
        Else
            id = 1
        End If
        If Not IsPostBack Then
            vincular()
        End If

    End Sub
    Sub vincular()
        Try
            con.Open()
            str = "select * from clientes where id=" & id
            com = New SqlCommand(str, con)
            sqlda = New SqlDataAdapter(com)
            com.ExecuteNonQuery()
            con.Close()
            ds = New DataSet()
            sqlda.Fill(ds)
            lblNome.Text = ds.Tables(0).Rows(0)(1).ToString()
            txtNome.Text = ds.Tables(0).Rows(0)(1).ToString()
            txtEndereco.Text = ds.Tables(0).Rows(0)(2).ToString()
            txtTelefone.Text = ds.Tables(0).Rows(0)(3).ToString()
            txtEmail.Text = ds.Tables(0).Rows(0)(4).ToString()
        Catch ex As Exception
            lblmsg.Text = ex.Message
        End Try
    End Sub
    Protected Sub btnCancelar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnCancelar.Click
        Response.Redirect("~/Default.aspx")
    End Sub
    Protected Sub btnAtualizar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAtualizar.Click
        Try
            con.Open()
            str = "update clientes set nome='" & txtNome.Text & "',endereco='" & txtEndereco.Text & "',telefone='" & txtTelefone.Text & "',email='" &
    txtEmail.Text & "' where id=" & id
            com = New SqlCommand(str, con)
            sqlda = New SqlDataAdapter(com)
            Dim resultado As Integer
            resultado = com.ExecuteNonQuery()
            con.Close()
            If resultado = 1 Then
                ScriptManager.RegisterStartupScript(Me, Me.GetType(), "Sucesso", "javascript:Display('" & lblNome.Text & "')", True)
            End If
        Catch ex As Exception
            lblmsg.Text = ex.Message
        End Try
    End Sub
End Class

Este código primeiro seleciona o registro da tabela clientes com o id informado e exibe os dados para alteração.

O id é obtido no evento Load da página através do código : id = Convert.ToInt32(Request.QueryString("id").ToString())

Note que estamos verificando se o id obtido via QueryString é nulo e em caso positivo atribuímos o valor 1 ao id de forma que se o usuário clicar diretamente no menu Atualizar um registro possa ser exibido. Esta é uma solução para contornar o erro que ocorre nessa situação que eu estou usando por pura preguiça de definir outra solução mais robusta. Como meu objetivo é mostrar como inserir, atualizar e exibir registro deixo essa tarefa para você.

No evento Click do botão Atualizar temos o código que atualiza os dados usando uma instrução SQL (update Clientes set).

A mensagem javascript indicando que a atualização foi feita com sucesso é feita pelo código:

If resultado = 1 Then
     ScriptManager.RegisterStartupScript(Me, Me.GetType(), "Sucesso", "javascript:Display('" & lblNome.Text & "')", True)
End If

Obs:A partir da ASP.NET 2.0 temos a nova propriedade Page.ClientScript para registrar e colocar funções JavaScript em suas páginas ASP.NET, os métodos Page.RegisterStartUpScript e Page.RegisterClientScriptBloc da versão 1.0/1.1 da plataforma .NET podem ser considerados obsoletos pois agora você tem que fornecer o conjunto de parâmetros chave/script para registrar scripts do lado do cliente.

Pegue o projeto completo aqui : AtualizandoInserindoDados.zip

Heb 1:5 Pois a qual dos anjos disse jamais: Tu és meu Filho, hoje te gerei? E outra vez: Eu lhe serei Pai, e ele me será Filho?

Heb 1:6 E outra vez, ao introduzir no mundo o primogênito, diz: E todos os anjos de Deus o adorem.

Heb 1:7 Ora, quanto aos anjos, diz: Quem de seus anjos faz ventos, e de seus ministros labaredas de fogo.

Heb 1:8 Mas do Filho diz: O teu trono, ó Deus, subsiste pelos séculos dos séculos, e cetro de eqüidade é o cetro do teu reino.

Referências:


José Carlos Macoratti