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: