ASP.NET - Criando um formulário de comentário com SQL Server


Neste artigo vamos criar uma aplicação web que permite a postagem e a visualização de comentários do usuário em tempo real.

Iremos criar um formulário de comentário no web site que permitirá que os visitantes possam postar seus comentários e opiniões de maneira rápida e simples. Para implementar esta funcionalidade irei usar os controles FormView, GridView e SqlDataSource e o banco de dados SQL Server 2005 Express .

Para criar o web Site eu vou usar o Visual Web Developer 2008 Express Edition - VWD 2008.

Abra o VWD2008 e no menu File selecione a opção New web site e a seguir faça o seguinte:

Vamos criar o banco de dados SQL Server 2005 usado neste projeto.

A seguir a partir do menu WebSite selecione Add New Item e selecione o template SQL Server DataBase informando o nome Cadastro.mdf e clicando em Add;

Na caixa de diálogo apresentada clique em Sim para salvar o arquivo na pasta App_Data;

Abra o banco de dados no DataBase Explorer e clique com o botão direito sobre Tables selecionando a opção Add New Table;

Defina a estrutura da tabela Comentarios conforme a figura abaixo:

Inclua na página Default.aspx , a partir da ToolBox os componentes : GridView, FormView e por último o componente SqlDataSource e Clique no link Configure Data Source;

A seguir selecione o banco de dados Cadastro.mdf da janela Choose Your Data Connection;

Na sequência escolha a opção Specify a custom SQL statement or stored procedure para definir os comandos SQL que iremos usar no projeto;

Primeiro selecione a aba SELECT e defina o comando SQL para selecionar os dados da tabela Comentarios:
SELECT nome,comentario,data FROM Comentarios

Selecione em seguida a aba INSERT e defina comando SQL para incluir dados na tabela Comentarios:
INSERT INTO Comentarios (nome,comentario,data) VALUES (@nome, @comentario, @data)

Abaixo temos o código fonte gerado para a instrução acima, observe que temos 3 parâmetros que deverão ser informados:


   <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
        InsertCommand="INSERT INTO [Comentarios] ([nome], [comentario], [data]) VALUES (@nome, @comentario, @data)" 
        >
        <InsertParameters>
            <asp:Parameter Name="nome" Type="String" />
            <asp:Parameter Name="comentario" Type="String" />
            <asp:Parameter Name="data" Type="DateTime" />
        </InsertParameters>
    </asp:SqlDataSource>

A string de conexão do arquivo web.config é exibida a seguir

<connectionStrings>
  <add name="ConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Cadastro.mdf; _ 
Integrated Security=True;User Instance=True"
   providerName="System.Data.SqlClient" />
 </connectionStrings>

Selecione o componente FormView e ative a FormView Tasks e atribuindo o SqlDataSource1 em Choose Data Source:

A seguir clique no link Edit templates:

Selecione o InsertItemTemplate e inclua os componentes: TextBox, HiddenField e Button conforme o leiaute abaixo:

O código fonte gerado deverá ser o seguinte:

 <InsertItemTemplate>
            Nome: <asp:TextBox ID="txtNome" runat="server" Text='<%# Bind("nome") %>'></asp:TextBox><br />
            Comentário:<br />
            <asp:TextBox ID="txtComentario" runat="server" Text='<%# Bind("comentario") %>'
             TextMode="MultiLine" Rows="4" Columns="50"></asp:TextBox><br />
            <asp:HiddenField ID="hidhoraData" runat="server" Value='<%# Bind("data") %>' />
            <asp:Button ID="butSubmete" runat="server" CommandName="Insert" Text="Enviar" />
</InsertItemTemplate>

O leiaute ajustado a página contendo os controles deverá se parecer com a seguinte figura:

Agora vamos incluir o código abaixo no evento Load da página que irá atribuir a data e hora atual ao campo oculto:

   protected void Page_Load(object sender, EventArgs e)
    {
        HiddenField hidData = (HiddenField)FormView1.FindControl("hidHoraData");
        hidData.Value = DateTime.Now.ToString();
    }

Executando o projeto teclando F5 iremos obter o resultado:

Do jeito que esta qualquer comentário que for postado será exibido de imediato e isso não é muito aconselhável num ambiente hostil com a web. Podemos então incluir um campo do tipo booleano na tabela Comentarios chamado publicar (ou algo parecido) e atribuir ao mesmo um valor false quando da inclusão do comentário. Somente o administrador do site poderia alterar o valor do campo para true liberando assim o comentário para visualização.

Para que o recurso acima funcione teremos que efetuar a seguinte alteração na tabela Comentarios:

Alterar a estrutura da tabela incluindo o campo publicar como sendo do tipo bit.

O tipo de dados bit consiste de 0 ou 1 e é usado para representar TRUE/FALSE ou YES/NO

Onde 1 representa TRUE e 0 representa FALSE.

Devemos também alterar as duas instruções SQL usadas no projeto como segue:

1- A instrução para incluir um comentário na tabela deverá ser alterada para:

INSERT INTO Comentarios (nome,comentario,data, publicar) VALUES (@nome, @comentario, @data, @publicar)

onde o parâmetro publicar deverá receber o valor False.

Para definir o valor do parâmetro publicar como sendo por padrão false selecione o objeto SqlDataSource e clique com na janela de propriedades procure pela propriedade InsertQuery clicando o botão a direita para abrir o editor de parâmetros. A seguir defina o parâmetro @publicar como sendo igual a false conforme abaixo:

2- Alterar a instrução SQL usada para selecionar os registros de forma a exibir somente os que forem liberados , ou seja , os que tiverem o campo publicar igual a True (1);

SELECT nome,comentario,data FROM Comentarios where publicar = 1

Com isso basta você criar uma página para gerenciar a liberação dos comentários no site com acesso restrito ao Administrador.

E estamos conversados...

Pegue o projeto completo aqui: aspComentario.zip (sem o banco de dados)

Eu sei é apenas ASP .NET, mas eu gosto...

Referências:


José Carlos Macoratti