LAYERDEV

 Busca Online:

 
Seja bem vindo(a) Visitante, você não está logado deseja logar
no portal para participar de serviços e promoções ? clique aqui.


No caso de perder a senha, acesse aqui e receba por e-mail.
Deseja entrar em contato conosco, acesse aqui e mande-nos um e-mail.

Como fazer uma enquete - parte 2

por Mauricio Junior em 1/1/2011 0

Tecnologias usadas:

Banco de dados SQL Server 2005
Linguagem de programação: C#.NET
Tecnologia: ASP.NET
Instrução: Stored Procedure
Ferramenta: Visual Studio.NET 2008 SP-1
Componente: user control .ascx

Objetivo:

    O meu objetivo é mostrar a todos vocês leitores, como é fácil fazer passo a passo um sistema de enquete. As perguntas são buscadas no banco de dados utilizando Stored Procedure junto com as respostas. Foi usado o objeto include do arquivo .ascx (user control) do .NET.
Para nível de conhecimento, enquete é uma forma de pesquisa feita de maneira mais direta aos clientes, ou seja, possui respostas e perguntas objetivas, uma maneira de pesquisa feita por site ou sistema que deseja saber informações de seus clientes / pessoas que acessam ao site.

Figuras e Solução:

    Todas as figuras neste texto são reais, buscadas da própria solução. Todo o software mostrado nestes passos foi feito, comprovado e testado.

Artigo Anterior

    No artigo anterior, mostrei as tabelas no banco de dados, stored procedures de busca, insert e update. Qualquer dúvida só acessar a parte anterior. Esse texto é continuação efetiva do anterior, recomendo que leia o anterior.
    A ferramenta utilizada no primeiro texto foi o banco de dados SQL Server 2005 e Manager; agora a ferramenta será de desenvolvimento chamada Visual Studio.NET 2008 com 3.5 service pack 1 instalado.

 
Referência 2.1

Desenvolvimento Efetivamente

    Com o projeto criado de software cliquei com o botão direito em cima do nome, escolhi a opção ADD e em seguida New Item... Referência 2.2.
    Lembro que, neste primeiro caso estou definindo apenas o layout do sistema, adicionando arquivo com seus respectivos componentes; isto é; nenhum código efetivo será escrito ainda.
 

Referência 2.2.
    
    Automaticamente será apresentada uma tela mostrando os tipos de arquivos, escolhi a opção user control. (Referência 2.3)

 
Referência 2.4

    Note que, coloquei o nome do arquivo de “enquete.ascx”. Esse arquivo ficará dentro de um diretório padrão que defini chamado “include”. O mesmo será incluído dentro de um arquivo .aspx ou .master. No passo posterior mostrarei como incluir e como usar esse user control.

Código do Layout


<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="enquete.ascx.cs" Inherits="aspneti.com.br.includes.enquete" %>

<!-- atributo que deixa com borda em volta -->
<fieldset>
<h3>Enquete - Dê sua opinião</h3>

<!-- componentes label e radiobutton -->
&nbsp;<asp:Label ID="lblPergunta" runat="server"></asp:Label><br />
<asp:HiddenField id="txtid" runat="server" />
<asp:RadioButtonList ID="rdResposta" runat="server" ValidationGroup="enquete">
</asp:RadioButtonList>

<!-- botao -->
&nbsp;<asp:Button ID="cmdVotar" runat="server" Text="Votar"
    onclick="cmdVotar_Click" ValidationGroup="enquete" />
    <br />

</fieldset>    

<!-- itens de validacao -->
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
    ControlToValidate="rdResposta" Display="Dynamic"
    ErrorMessage="Escolha uma opção." ValidationGroup="enquete"></asp:RequiredFieldValidator>
    <br />
<br />
<asp:ValidationSummary ID="ValidationSummary1" runat="server"
    ShowMessageBox="True" ShowSummary="False" ValidationGroup="enquete" />



Table 2.1

Explicação do código (table 2.1)

    O código do user control é bem simples e fácil, existem poucos objetos de tela e são bem definidos. Existe:
-    Label (para exibir a pergunta buscada do banco de dados)
-    HiddenField (contém o código escondido da pergunta)
-    RadioButtonList (a lista de radio’s preenchidos diretamente do banco de dados)
-    Fieldset (propriedade html para ficar com uma borda em volta)
-    Objetos de validação dos dados
-    Button (botão responsável para salvar a votação do usuário)
    Para revisar, preciso preencher alguns objetos de tela com os resultados vindos do banco de dados, os objetos são: label, hiddefield, radiobuttonlist.
    No arquivo .cs (enquete.aspx.cs), chamo métodos para o preenchimento, esses métodos chamam outros métodos de outras classes responsáveis para acesso ao banco de dados e suas stored procedures.

Código Fonte C# - Camada de Acesso

    Agora em diante, passarei para a camada de acesso a dados da enquete, antes mesmo de mostrar os dados do arquivo enquete.aspx.cs. O arquivo .cs chamará essa camada de acesso a dados.


Referência 2.5

    Primeiramente criei uma classe chamada EnqueteTO com dois atributos do tipo string. Opcao é o atributo que vem a resposta que o usuário clicou. Ip é o número do ip do usuário que está votando.

    O próximo passo foi criar uma outra classe responsável pelo acesso ao banco de dados, ou seja, a camada de acesso a dados. Onde acesso a stored procedure para inserir e atualizar o banco de dados. (Referência 2.6)


Referência 2.6

    O primeiro método que fiz foi o buscarEnquete(), o recebe nenhum parâmetro e pesquisa a stored procedure criada anteriormente, ou seja, na parte 1 desse texto indicada acima. O dado retornado é um objeto chamado DataSet, ou seja, vem alguns dados do método. (Referência 2.6)

    O próximo método criado é o votarEnquete(EnqueteTO to) que chama uma stored procedure passando parâmetro, a classe TO criada anteriormente, com dois parâmetros. Porém, para essa procedure, preciso passar apenas o atributo OPCAO_RES com seu respectivo valor. (Referência 2.7)


Referência 2.7

    Outro método feito foi o inserirIP(EnqueteTO to) que serve para inserir o IP da pessoa que está votando no banco de dados. O parâmetro de entrada foi a classe com seus atributos, porém o que é utilizado é o IP pego pela aplicação automaticamente na camada de apresentação. (Referência 2.8)



Referência 2.8
    
    Outro método foi preciso criar, para fazer a verificação antes do usuário votar, lembre-se que antes de votar é necessário verificar se aquele mesmo IP votou no mesmo dia, dessa forma, foi feito um método que faz essa verificação no banco de dados. (Referência 2.9)
 

Referência 2.9

    Note que todos os métodos que passo parâmetro utilizando o IDataParameter criando um new SqlParameter(). Essa é uma maneira muito certa para enviar parâmetros sem sofrer com problema de script ou invasão com inject sql.
    Esse método (referência 2.9) retorna um dado, esse dado é do tipo Int32 pois é um count que faço dentro da stored procedure.

Código C#.NET na Camada de Apresentação
    
    Na camada de apresentação existem 3 métodos, um private e dois protected. O primeiro é acessado quando a página entra ou inicia; depois ele chama o segundo para verificação. O terceiro método é chamado quando o usuário clica no botão votar. Serão apresentados cada um dos métodos.


Referência 2.10

    O método carregado no início da página (Page_Load) chama um segundo método chamado preencherDados(). (Referência 2.10)

    O método que preenche os dados chamado de (preencherDados()) busca a enquete, depois verifica se chegou algum dado com o Count, se houver algum dado, é atribuído ao componente de tela a pergunta com o comando lblPergunta.Text = dtSet.Table[0].Rows[0][“NO_PER”].ToString().
    O próximo passo foi fazer um for e atribuindo as opções vindas do banco de dados, isto é, as respostas para aquela pergunta adicionadas ao componente rdResposta. (Referência 2.11)


Referência 2.11

    O último método chamado (cmdVoltar_Click) significa que, ao clicar no botão VOTAR da enquete / pesquisa, chamará o método fazendo os seguintes passos:
1- Atribui a escolha do usuário e seu ip junto à classe EnqueteTO
2- Chama o método que verifica o IP do usuário passando o parâmetro (to)
3- Caso o número for igual a ZERO (O), entáo chamo o método votarEnquete(to)
4- Depois de votar, chamo o método inserirIP(to) que insere o ip do usuário no banco de dados, possibilitando assim a não votação no mesmo dia
5- Mostro a mensagem
6- Caso o usuário tentar votar novamente, aparece a segunda mensagem
(Referência 2.12)

protected void cmdVotar_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                aspneti.com.br.code.EnqueteTO to = new aspneti.com.br.code.EnqueteTO();
                to.Opcao = rdResposta.SelectedItem.Text;
                to.Ip = Request.UserHostAddress.ToString();

                aspneti.com.br.code.Enquete enq = new aspneti.com.br.code.Enquete();

                //verificar se o ip já foi inserido
                int numero = enq.verificarIP(to);

                StringBuilder str = new StringBuilder();
                if (numero == 0)
                {
                    if (enq.votarEnquete(to))
                    {
                        //inserir ip no banco de dados
                        enq.inserirIP(to);

                        str.Append("<script>alert('Obrigado pelo seu voto!');</script>");
                        Page.RegisterStartupScript("alert", str.ToString());
                    }
                }
                else
                {
                    str.Append("<script>alert('Prezado usuário, você já votou hoje, tente em outro dia');</script>");
                    Page.RegisterStartupScript("alert", str.ToString());
                }
            }
        }

Referência 2.12

    Bom aqui eu chego no final de mais um artigo. Espero ter ajudado e ensinado você leitor a desenvolver uma enquete / pesquisa para seu site. Qualquer dúvida, pode entrar em contato.

voltar   comente  subir

Download Copy





 
Mauricio Junior Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; .
Tenho 29 anos e possuo sete livros publicados pela editora Ciência Moderna. Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, ECODE10.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A. Blog: blog.mauriciojunior.org, Site pessoal www.mauriciojunior.org



Comentários:


Comente (dê sua opinião):

Comentário:
Código Imagem:  (digite o código da imagem respeitando maiúsculo e minúsculo)

Favor digitar o código da imagem para cadastramento.

 

Outros Artigos do Autor

SQL Dinâmico Compilado
Microsoft Recite
Vídeo: Série Atlas.NET - Parte II
Sistema de Login em ASP – Parte IX (Utilizando três camadas)
Botão abrindo janela de forma modal
Registro Encontro .NET (Fotos)
Conecte - netBOOKS
Insistência com Vírus por E-mail
iGas - Sistema de Controle de Combustível
Configurar Style
Trabalhando com Session
URL Indexável – Reescrever URL de uma forma amigável
Trabalhando com LinkButton dentro do Gridview
Criando Help com Visual Studio.NET
Public Interface
Cortando String XML
Criando e Lendo Cookie
Vídeo Live Search
Pagamento via celular
Importação e Comunicação entre Sistemas
Primeiros passos para um programador - Apple
Microsoft touch mouse
Clique ENTER usando C#.NET
Criando a Tag Cloud em C#
Enviado email anexado
Vídeo - Microsoft Surface: The Power
Nova geração HTML
Formatando String rapidamente
My Tracks
Gravando Erros com Exception - Parte I
Trabalhando com o componente Accordion
Usando PopupControlExtender
Ler RSS usando o Visual Studio.NET 2005
Multimídia C#.NET
Projeto Natal é mostrado para a mídia




eCode10 Magazine 4 Edição

Baixe a sua sem pagar nada, basta apenas ter um cadastro na comunidade aspneti.com ou ser usuário do ecode10.com.



Edições anteriores
LAYERDEV

Notícias *

Notebook 3D ou 4K?

Notebook vem com tudo...

Visão do Futuro - Day of Glass 2

Futuro próximo pode chegar cedo?...

Lenovo de 14 polegadas IdeaPad

Veja o novo notebook Lenovo IdeaPad...

Windows 8 Store

Channel9 publica um vídeo da Windows Store...

Sony Vaio série Z

Novo Vaio Ultrabook? ou não Ultrabook?...

Samsung quer comprar RIM

Imagine se juntar as duas companhias...

Surface 2.0 mostrado

Novo Surface é mostrado de forma incrível...

Skype Tablet

Será que esse skype tablet pega mesmo?...

Lenovo e o seu novo Ultrabook

Ultrabook chega também pela Lenovo...




NETITC