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 :

  objDR=Cmd.ExecuteReader(system.data.CommandBehavior.CloseConnection)

    MyDataGrid.DataSource=objDR
    MyDataGrid.DataBind
    MyConn.Close()
 
 

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