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: