WebMatrix -  Consultando, Inserindo , Excluindo e atualizando dados - IV


Se você esta chegando agora deve saber que...

  1. Na primeira parte deste artigo abordamos os conceitos sobre banco de dados relacionais e criamos o banco de dados Padaria.sdf e a tabela Produtos no  SQL Server Compact.
  2. Na segunda parte do artigo mostrei como podemos inserir dados usando o WebMatrix com Razor e criar uma página para incluir novos registros no banco de dados SQL Server Compact usado na aplicação;
  3. Na terceira parte do artigo mostrei como podemos atualizar os dados usando o WebMatrix com Razor e criar uma página para atualizar registros selecionados no banco de dados SQL Server Compact usado na aplicação;

Abaixo vemos o resultado do trabalho feito na terceira parte do artigo : a página EditarProdutos.cshtml com os valores atualizados:

Criando as páginas para excluir dados 

Nossa próxima tarefa é criar a página que permite excluir dados do banco de dados Padaria.sdf.

Depois que os dados foram inseridos em uma tabela, talvez seja necessário atualizá-los; e depois de atualizá-los, você pode querer excluir alguma informação.

Neste artigo eu mostro como criar duas páginas cujas funções são:

  1. A primeira página exibe os produtos e permite aos usuários selecionar um produto a ser excluído;
  2. A segunda página exibe o registro selecionado e solicita a confirmação para excluir o registro do banco de dados;

Obs: Em um outro artigo irei mostrar como podemos implementar a segurança.

a-) Criando a página para selecionar o produto a excluir

Vamos abrir o projeto que criamos até o momento para continuar a implementar as funcionalidades.

Abra  o WebMatrix e na janela principal clique no ícone My Sites;

A seguir selecione o site Padaria que criamos no primeiro artigo;

Na próxima janela clique no menu Files; Observe os arquivos que já criamos para o site;

Vamos criar um novo arquivo CSHTML chamado ListaProdutosDeletar.cshtml selecionando a opção New -> New File;

Na janela seguinte selecione o tipo CSHTML, informe o nome ListaProdutosDeletar.cshtml e clique no botão OK;

Em seguida digite o código abaixo substituindo o código inicial da página ListaProdutosDeletar.cshtml conforme o da figura abaixo:

A única diferença entre essa página e a página de EditarProdutos.cshtml é que a tabela HTML nesta página inclui o link Deletar ao invés do link Editar. Quando você clica neste link, você será levado para a página DeletarProduto.cshtml (que iremos criar em seguida), onde você poderá confirmar a exclusão do registro selecionado.

O trecho de código abaixo mostra a utilização da linha de código  <a href="@Href("~/DeletarProduto",row.Codigo)" que chama a página DeletarProduto.cshtml e passa o código do produto a ser deletado;

      <tbody>
        @foreach (var row in db.Query(selectQueryString)) {
          <tr>
            <td><a href="@Href("~/DeletarProduto", row.Codigo)">Editar</a></td>
            <td>@row.Nome</td>
            <td>@row.Descricao</td>
            <td>@row.Preco</td>

          </tr>
        }
      </tbody>

O código cria uma âncora HTML (um elemento <a>), cujo atributo href é definido dinamicamente. O atributo href especifica a página para exibir quando o usuário clica no link. Ele também passa o valor do Codigo da linha(registro) atual para o link.

Quando o usuário clicar no link será criada a seguinte URL :   http://<servidor>/DeletarProduto/4

Vamos visualizar a página executando-a. Para isso , selecione o arquivo ListaProdutosDeletar.cshtml e clicando o botão direito do mouse selecione a opção Launch in browser;

Você deverá obter a página exibida na figura abaixo, onde vemos os produtos e o link Deletar que deverá chamar a página DeletarProduto.cshtm passando o código do produto;

Nossa próxima tarefa será então criar a página para exibir o produto selecionado e solicitar a confirmação de exclusão do  produto e salvar as alterações no banco de dados.

b-) Criando a página para confirmar a exclusão de um registro selecionado

Vamos repetir os procedimento do item a para criar a página ListaProdutosDeletar.cshtml;

-  Selecione a opção New -> New File do menu;
Na janela seguinte selecione o tipo CSHTML, informe o nome DeletarProduto.cshtml e clique no botão OK;

Em seguida digite o código abaixo substituindo o código inicial da página DeletarProduto.cshtml conforme o da figura abaixo:

@{
var db = Database.Open("Padaria");
var CodigoProduto = UrlData[0];
if (CodigoProduto.IsEmpty()) 
{
   Response.Redirect(@Href("~/ListaProdutosDeletar"));
}
var prod = db.QuerySingle("SELECT * FROM PRODUTOS WHERE CODIGO = @0", CodigoProduto);
  if( IsPost && !CodigoProduto.IsEmpty()) 
  {
    var deleteQueryString = "DELETE FROM Produtos WHERE Codigo=@0";
    db.Execute(deleteQueryString, CodigoProduto);
    Response.Redirect("~/ListaProdutosDeletar");
  }
}
<!DOCTYPE html>
<html
<head>
<title>Deletar Produto</title>
</head>
<body>
<h1>Deleta o  Produto - Confirmação</h1>
<form method="post" action="" name="form">
<p>Tem certeza que deseja excluir o seguinte produto ? </p>
<p>Nome: @prod.Nome <br />
Descrição: @prod.Descricao <br />
Preço : @prod.Preco</p>
<p><input type="submit" value="Deletar" /></p>
</form>
</body>
</html>

 

No corpo da página temos um formulário HTML onde um produto é exibido e onde os usuários podem excluí-lo. Para obter o produto a ser exibido, primeiro abrimos o banco de dados e a seguir  usamos uma instrução SQL:

    var db = Database.Open("Padaria");

Para obter o valor do Codigo para passar para a instrução SELECT podemos ler o valor passado para a página como parte da URL usando a seguinte sintaxe:

     var CodigoProduto  = UrlData[0];

A seguir se o código do produto for inválido o usuário será redirecionado para a página ListaProdutosDeletar novamente;

if (CodigoProduto.IsEmpty())
{
   Response.Redirect(@Href("~/ListaProdutosDeletar"));
}

Se o código do produto for válido então a instrução SQL SELECT será montada usando o código do produto obtido como parâmetro

var prod = db.QuerySingle("SELECT * FROM PRODUTOS WHERE CODIGO = @0", CodigoProduto);
  if( IsPost && !CodigoProduto.IsEmpty()) 
  {
    var deleteQueryString = "DELETE FROM Produtos WHERE Codigo=@0";
    db.Execute(deleteQueryString, CodigoProduto);
    Response.Redirect("~/ListaProdutosDeletar");
  }
}

Para obter o registro do produto com o código informado , usamos o  método QuerySingle, passando a string SQL e o código do produto lido da URL, que retorna apenas um único registro:

var prod = db.QuerySingle("SELECT * FROM PRODUTOS WHERE CODIGO = @0", CodigoProduto);

O registro obtido é retornado na variável prod e assim podemos obter o valor de cada coluna e exibi-los na página HTML conforme abaixo:

<p>Nome: @prod.Nome <br />
Descrição: @prod.Descricao <br />
Preço : @prod.Preco</p>

A página, em seguida, solicita que o usuário clique em um botão para realmente excluir o registro. Esta é uma medida de segurança importante: quando você executar operações sensíveis em seu site como atualizar ou excluir dados, essas operações devem ser sempre feitas com uma operação de POST, e não uma operação GET.

Se o seu site está configurado de forma que uma operação de exclusão pode ser realizada utilizando uma operação GET, qualquer pessoa pode passar uma URL, como http:// <servidor>/DeletarProduto/4 e apagar tudo o que eles querem de seu banco de dados.

Ao adicionar a confirmação e codificação da página para que a exclusão só pode ser realizada através de um POST, você adiciona uma medida de segurança para o seu site.

O código que realiza a exclusão do registro utiliza uma instrução SQL DELETE : DELETE FROM Produtos WHERE Codigo=@0"

Vamos então verificar se as páginas que criamos estão funcionando corretamente.

1- Selecione o arquivo ListaProdutosDeletar.cshtml e clicando o botão direito do mouse selecione a opção Launch in browser;

A página ListarProdutosDeletar exibe a relação dos produtos com o link para escolher o produto a deletar:

2- Clique no link Deletar para o produto Bolo de Cenoura;

A página abaixo mostra o produto  selecionado e o botão para confirmar a exclusão. Note a URL : http://localhost:54613/DeletarProduto/7

Clicando no botão - Deletar - o registro será excluído e retornaremos para página ListarProdutosDeletar :

Dessa forma o usuário visualiza a página de produtos a serem excluídos novamente e poderá excluir novos registros se desejar.

Dessa forma concluímos a implementação das operações para incluir, alterar, consultar e excluir dados da nossa aplicação Web usando o WebMatrix e o Razor.

Muito simples , não é mesmo ????

Pegue o projeto completo aqui: Padaria_WebMatrix.zip (Deve ser aberto no WebMatrix)

Eu sei é apenas WebMatrix, mas eu gosto...

"Tornou pois Jesus a dizer-lhes: Em verdade vos digo que eu sou a porta das ovelhas. Todos quantos vieram antes de mim são ladrões e salteadores; mas as ovelhas não os ouviram. Eu sou a porta; se alguém entrar por mim. salvar-se-á, e entrará, e sairá, e achará pastagens." (João 10:7-9)

Referências:

José Carlos Macoratti