ASP.NET - Verificando dados antes de incluir
Quando você trabalhar com banco de dados é muito importante fazer a validação das informações que você esta gravando no banco de dados. Isto evita inconsistências e também trabalho inútil.
O objetivo deste artigo é mostrar como você pode verificar dados antes de incluir no banco de dados. Eu estou usando um banco de dados Access mas o princípio é o mesmo para qualquer gerenciador de banco de dados. Meu banco de dados é chamado de testeDB.mdb e possui a tabela Enderecos na qual eu desejo incluir os dados que são fornecidos pelo usuário em um formulário web em uma página ASP.NET
A estrutura da tabela Enderecos é a seguinte :
Vou utilizar o WEB Matrix para criar o código do arquivo verificaDados.aspx . A estrutura visual da página no modo design é mostrado abaixo:
O código do arquivo verificaDados.aspx é o seguinte :
<%@ Page Language="vb" Debug="true" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">
Dim blExistemLinhas as Boolean 'inclui dados na base de dadaos testeDb tabela : Enderecos Sub inserirDados(Source as Object, E as EventArgs) Dim strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("Dados\TesteDb.mdb") Dim MyConn As OleDbConnection = New OleDbConnection(strConn) Dim MySQL as string = "Select * from Enderecos where titulo=@titulo and link=@link" Dim objDR as OleDbDataReader Dim Cmd as New OleDbCommand(MySQL, MyConn) With Cmd.Parameters .Add(New OleDBParameter("@titulo", frmtitulo.text)) .Add(New OleDbParameter("@link", frmlink.text)) End With MyConn.Open() objDR=Cmd.ExecuteReader(system.data.CommandBehavior.CloseConnection) if objDR.HasRows then blExistemLinhas="True" else blExistemLinhas="False" End If MyConn.Close() MySQL = "Insert into Enderecos (titulo, link, Descricao) Values (@titulo, @link, @Descricao)" Dim Cmd2 as New OLeDbCommand(MySQL, MyConn) With Cmd2.Parameters .Add(New OleDbParameter("@titulo", frmtitulo.text)) .Add(New OleDbParameter("@link", frmlink.text)) .Add(New OleDbParameter("@Descricao", frmDescricao.text)) End With if blExistemLinhas="False" then MyConn.Open() cmd2.ExecuteNonQuery() lblResultados.text="Seus dados forma recebidos!" MyConn.Close exibeRegistros() else lblResultados.text="Este dado já existe no banco de dados" End If End Sub 'exibe os registros da base de dados em um datagrid Sub exibeRegistros() Dim strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("Dados\TesteDb.mdb") Dim MyConn As OleDbConnection = New OleDbConnection(strConn) Dim MySQL as string = "Select TOP 5 * from Enderecos order by ID desc" Dim objDR as OleDbDataReader Dim Cmd as New OleDbCommand(MySQL, MyConn) With Cmd.Parameters .Add(New OleDbParameter("@titulo", frmtitulo.text)) .Add(New OleDbParameter("@link", frmlink.text)) End With MyConn.Open() objDR=Cmd.ExecuteReader(system.data.CommandBehavior.CloseConnection) MyDataGrid.DataSource=objDR MyDataGrid.DataBind MyConn.Close() End Sub |
</script> <html> <head> <title>Verificando dados antes de gravar</title> </head> <body> <form id="form1" runat="server"> <div align="center"><img style="WIDTH: 239px; HEIGHT: 45px" height="32" src="maco1b.gif" width="233" border="0" /> <table style="WIDTH: 419px; HEIGHT: 114px"> <tbody> <tr> <td align="right"> <font face="Verdana" size="2">Título</font></td> <td> <asp:textbox id="frmtitulo" Runat="server" Text="Macoratti.net" Width="289px"> Macoratti.net</asp:textbox> <font face="Verdana" size="2"></font></td> </tr> <tr> <td align="right"> <font face="Verdana" size="2">Link</font></td> <td> <asp:textbox id="frmlink" Runat="server" Text="http://www.macoratti.net" Width="295px"> www.macoratti.net</asp:textbox> <font face="Verdana" size="2"></font></td> </tr> <tr> <td align="right"> <font face="Verdana" size="2">Descrição</font></td> <td> <asp:textbox id="frmDescricao" Runat="server" Width="296px">Tudo sobre VB e ASP</asp:textbox> <font face="Verdana" size="2"></font></td> </tr> <tr> <td align="right"> <font face="Verdana" size="2"></font></td> <td> <asp:button id="button1" onclick="inserirDados" Runat="server" Text="Enviar"></asp:button> </td> </tr> </tbody> </table> </div> <div align="center"><asp:Label id="lblResultados" runat="server" font-bold="True"></asp:Label> </div> <div align="center"> <asp:Datagrid id="MyDataGrid" Runat="server" Font-Size="X-Small" Font-Name="Arial" Headerstyle-Font-Size="8" Headerstyle-Font-Name="Arial" Headerstyle-BackColor="#BDCFE7" Width="442px" Font-Names="Verdana" Height="129px"> <HeaderStyle font-size="8pt" font-names="Arial" backcolor="#BDCFE7"></HeaderStyle> </asp:Datagrid> </div> </form> </body> </html> |
O código VB.NET esta em amarelo e o código HTML em cinza.
Existem duas rotinas no código VB.NET :
exibirDados - que apenas exibe os dados , no caso os últimos 5 registros inseridos na tabela em um DataGrid
objDR=Cmd.ExecuteReader(system.data.CommandBehavior.CloseConnection)
MyDataGrid.DataSource=objDR
MyDataGrid.DataBind
MyConn.Close()
inserirDados - usando a instrução SQL INSERT INTO estamos primeiro fazendo a verificação usando o título e o link :
objDR=Cmd.ExecuteReader(system.data.CommandBehavior.CloseConnection)
if objDR.HasRows then
blExistemLinhas="True"
else
blExistemLinhas="False"
End If
Se conforme o resultado da variável lblExistemLinhas os dados são inseridos ou não conforme o código:
if blExistemLinhas="False" then
MyConn.Open()
cmd2.ExecuteNonQuery()
lblResultados.text="Seus dados forma recebidos!"
MyConn.Close
exibeRegistros()
else
lblResultados.text="Este dado já existe no banco de dados"
End If
O resultado de um inclusão pode ser visto na figura abaixo:
Teste o programa on-line aqui : verificaDados.aspx
È simples , é fácil é ASP.NET ...
José Carlos Macoratti