NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!
UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI
Olá pessoal,
Hoje finalmente concluiremos nosso sistema. Nesta etapa iremos apenas criar o serviço que armazenará o voto do participante, bem como a interface que consumirá este serviço.
Abra o VS .Net 2003 , e no projeto Enquetes, abra o arquivo VisualizarEnquete.aspx.
Arraste um controle de validação do tipo RequiredFieldValidator:
Configure as seguintes propriedades:
ErrorMessage=É necessário escolher uma das alternativas
ControlToValidate=rdItens
Isto impedirá a possibilidade de voto sem escolher alguma das alternativas.
Clique uma vez apenas no Button btnResultado. Vá na guia de propriedades e na propriedade CausesValidation marque false. Isto é para que seja possível visualizar o resultado sem escolher uma das alternativas.
Agora, abra o arquivo que contém nossos WebServices, o arquivo EnqueteService.asmx.
Vamos implementar o código que armazenará o voto. Para isso, toda vez que este serviço for implementado, será necessário passar o IDItem como parâmetro. Digite o código conforme segue abaixo:
public bool AddVoto(int IDItem)
{
//Instancia um novo objeto OleDbCommand
OleDbCommand OleDbCmd=new OleDbCommand();
//Indica o tipo de comando
OleDbCmd.CommandType=CommandType.Text;
//string que fará a adição de mais um voto
OleDbCmd.CommandText="Update TbItens set Votos=Votos+1 where IDItem=" + IDItem + "";
//Indica qual a conexão a ser usada
OleDbCmd.Connection=Conexao;
//Abre a conexão
Conexao.Open();
//Executa o comando
try
{
OleDbCmd.ExecuteNonQuery();
return true;
}
//Caso ocorra uma excessão retorna falso
catch(OleDbException)
{
return false;
}
//Encerra a conexão idependente do erro
finally
{
Conexao.Close();
Conexao.Dispose();
}
A novidade para nós está no tratamento de erros através dos blocos Try, Catch e Finally. Em um próximo tutorial abordaremos este tema com mais ênfase.
Vejam que nosso serviço não retornará nenhum dado do banco de dados, mas retornará um valor do tipo verdadeiro ou falso para facilitar a execução do código.
Ótimo, agora implementaremos o serviço no arquivo VisualizarEnquete.aspx.
No evento Click do btnVotar, digite o seguinte código, conforme mostrado abaixo:
private void btnVotar_Click(object sender, System.EventArgs e)
{
//Verifica se o cookie Enquetes existe
if(Request.Cookies["Enquetes"]==null)
{
//Caso não exista cria uma nova instância do serviço
localhost.EnqueteService es=new Enquetes.localhost.EnqueteService();
//Adiciona e ao mesmo tempo verifica se o voto foi adicionado
if(es.AddVoto(Convert.ToInt32(rdItens.SelectedValue)))
{
//Cria um Cookie que impede que o usuário vote mais de uma vez
Response.Cookies["Enquetes"].Value="Gravado";
//Indica que o Cookie expirará em 1 dia
Response.Cookies["Enquetes"].Expires=System.DateTime.Now.AddDays(1);
//Emite a resposta ao usuário através da caixa de diálogo do JavaScript
Response.Write("<script>alert('Voto Computado!Obrigado por participar!')</script>");
}
}
//Caso o cookie já exista
else
{
//Emite a resposta ao usuário através da caixa de diálogo do JavaScript
Response.Write("<script>alert('Você já votou nesta enquete!')</script>");
}
}
Vejam que o código é bem simples. Vejam que quando é executado o código para a inclusão de um novo voto, ao mesmo tempo é verificado seu retorno (true/false), isto porque criamos um serviço do tipo Bool.
Outra questão importante é que criamos um Cookie para assegurarmos de que o usuário não votará mais de uma vez. É claro que se ele excluir os cookies de sua máquina será possível votar, mas pelo menos estamos impedindo que ele clique várias vezes no botão, votando sequencialmente sem parar.
O cookie foi configurado para expirar em um dia. Isto é opcional, depende de quanto em quanto tempo as enquetes serão publicadas no site.
Vamos aos nossos testes:
Tentativa de votar sem escolher um item...
Voto computado...
Nova tentativa de voto, mas sem sucesso...
Exibição do gráfico...
Pois é pessoal, concluímos aqui nosso tutorial. É claro que este sistema pode melhorar, e você é bem capaz de fazer isso.
Espero que tenham gostado e que seja muito útil para a comunidade desenvoldedora.
Um abraço e até mais,
Lano de Castro