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


Esse é mais um artigo que aborda a nova versão do WebMatrix, e, o foco do artigo é mostrar como trabalhar com banco de dados usando os recursos do Razor.

Obs: Esse artigo é baseado no original : Working with Data

A primeira coisa que você deve fazer, se não tiver a nova versão é pegar aqui: WebMatrix

Neste artigo você vai aprender:

Dando o pontapé inicial - O que é mesmo um banco de dados ?

Podemos entender por banco de dados qualquer sistema que reúna e mantenha organizada uma série de informações relacionadas a um determinado assunto em uma determinada ordem.

A lista telefônica é um exemplo , nela percebemos que todos os dados referentes a uma pessoa estão na mesma linha , a isso chamamos registros..

O tipo ou categoria da informação (nome,telefone,etc.) sobre uma pessoa está separada em colunas, as quais chamamos campos..

Um Sistema Gerenciador de banco de dados relacionais(SGBDR) é usado para armazenar as informações de uma forma que permita às pessoas examiná-las de diversas maneiras.

Existem muitos SGBDR atualmente e dentre eles podemos citar: SQL Server (2005/2008/Compact) , MySQL, Oracle, PostGreSQL, etc.

Obs: O Microsoft Access também pode ser considerado um banco de dados embora não tenha os mesmos recursos de um verdadeiro SGDB.

Tomando como base o SGBD da Microsoft, o SQL Server, podemos dizer que um banco de dados pode conter tabelas, visões, stored procedures, além de outros recursos.

Podemos então definir uma tabela do banco de dados SQL Server como um conjunto de dados dispostos em forma de linhas e colunas. Como exemplo vejamos a tabela de endereços abaixo:

Nome Endereço Telefone
Carlos Lima Bueno Rua Pindamonhangaba , 1200 226-2356
Carlos Lima Buel Rua Voluntários de São Paulo , 2785 224-1078
Carlos Luiz Moraes Rua D. Pedro II , 123 223-0991

As linhas da tabela são os registros (nome,endereço,telefone), e as colunas são os campos.A interseção de uma linha com uma coluna define um atributo representando um valor do campo. Para a tabela representada acima a interseção da segunda linha com a coluna nome define o o valor do campo nome como: Carlos Lima Buel.

Em cada tabela podemos definir :  as colunas, chaves primárias, índices, a coluna de tipo Identity, as constraints,  as chaves estrangeiras, os triggers, etc.

Para a maioria das tabelas de um banco de dados, a tabela deve possuir uma coluna que contém um identificador exclusivo, como um número de cliente, número da conta, código, etc.  Isto é conhecido como chave primária da tabela, e é usado para identificar cada linha na tabela de forma única não permitindo assim dados em duplicidade.

Para o exemplo acima a tabela mostrada contém as colunas Nome, Endereco e Telefone e poderia ser criada a coluna Codigo para ser usada como chave primária.Ex:

Codigo Nome Endereço Telefone
1 Carlos Lima Bueno Rua Pindamonhangaba , 1200 226-2356
2 Carlos Lima Buel Rua Voluntários de São Paulo , 2785 224-1078
3 Carlos Luiz Moraes Rua D. Pedro II , 123 223-0991

Se a chave primária for definida como sendo do tipo identity (Auto-Numeração) o seu valor será gerado automaticamente e controlado pelo SGBD que não permitirá que um código seja usado mais de uma vez.

Criando o banco de dados e a tabela

Nossa primeira tarefa será criar um banco de dados para usar em nosso projeto e vamos criar um banco de dados chamado Produtos usando o SQL Server Compact através da ferramenta de design que já vem incluída no WebMatrix.

Abra o WebMatrix e na página inicial clique na opção Site From Template;

Em seguida selecione o template Empty Site e informe o nome Padaria e clique no botão OK;

O site será criado  e exibido no WebMatrix conforme mostra a figura a seguir:

No painel inferior à esquerda, clique em DataBases e a seguir no Ribbon superior clique em New DataBase;

Um novo banco de dados será criado com o mesmo nome do site e a extensão .sdf : Padaria.sdf que é um banco de dados SQL Server Compact;

Para criar uma nova tabela clique com o botão direito do mouse sobre o item Tables e clique em New Table;

Ao clicar em New Table o WebMatrix irá abrir o descritor de tabelas que iremos usar para definir as colunas da nossa tabela;

Na coluna Properites , para Name informe o nome da coluna : Codigo;

A seguir vamos definir para esta coluna Codigo as propriedades Is Identity e Is Primary Key com o valor True;

A chave primária diz ao banco de dados que esta será a chave primária da tabela. E a propriedade Is Identity diz ao banco de dados para criar automaticamente um número de identificação para cada novo registro e atribuí-lo o próximo número sequencial (a partir de 1) para a coluna Codigo.

No ribbon , clique em New Column para criar uma nova coluna;

Na Column Properties , para Name informe o nome da coluna como sendo: Nome e defina a propriedade Allow Nulls para False; (Dessa forma esta coluna não poderá ser deixada em branco)

Em seguida defina a propriedade Data Type para nvarchar com tamanho 100 (os dados para esta coluna será uma string cujo tamanho pode variar para cada registro);

Repita o processo para criar a coluna chamada Descricao definindo para esta coluna as propriedades Allow Nulls como False e Data Type como "nvarchar";

Repita o processo e crie também uma coluna chamada Preco e defina Allow Nulls como False e Data Type como "money";

Para salvar a tabela pressione CTRL+S e informe o nome Produtos

O WebMatrix irá exibir a tabela Produtos no banco de dados com a estrutura conforme a figura abaixo.

Vamos incluir alguns dados na tabela Produtos e para isso clique com o botão direito sobre a tabela e a seguir clique em Data;

A seguir inclua alguns dados digitando diretamente nas colunas da tabela como mostra a figura abaixo:

Lembre-se que o valor da coluna Codigo não precisará ser informado pois ela foi definida como sendo uma chave primária do tipo Identity e por isso será criada e incrementada automaticamente de uma unidade;

Dessa forma já temos o nosso banco de dados e a tabela com alguns dados prontos para serem usados.

Exibindo as informações da tabela do banco de dados

Vamos exibir os dados que incluímos na tabela Produtos em uma página ASP .NET usando uma instrução SQL;

A SQL - Structured Query Language(Linguagem de Consulta Estruturada) praticamente surgiu com a terceira geração de banco de dados, os RDBs-Relational Databases, ou seja, banco de dados relacionais.

A
SQL é uma linguagem padrão para o gerenciamento de banco de dados, e não é nem
estruturada (Structured) e não esta limitada somente a consultas (Queries) em banco de dados.

A SQL é composta de subconjuntos de comandos para executar diferentes tarefas. Assim podemos dizer que a SQL suporta :

  • Uma linguagem de  definição de dados ( DDL )
  • Uma linguagem de manipulação de dados ( DML )
  • Uma linguagem de segurança de dados  ( DCL )
  • A DML permite manipular os dados (Inserir, Excluir e Atualizar) bem como executar
    consultas através da recuperação de subconjuntos de dados para posterior tratamento.
    seus principais comandos são:

    - SELECT - Seleciona um conjunto de registros de uma ou mais tabelas usando um critério específico.
    - INSERT - Adiciona dados a uma tabela.
    - UPDATE - Atualiza os dados de uma tabela segundo critérios específicos.
    - DELETE - Remove registros de uma tabela.

    No painel inferior clique na opção Files e no ribbon superior clique em New File...;

    Obs: Observe que temos uma pasta chamada App_Data onde esta o banco de dados Padaria.sdf.

    Na janela Choose a File Type podemos definir o tipo de arquivo  que vamos criar, usando a linguagem C# (CSHTML) ou VB .NET (VBHML);

    Selecione o tipo CSHTML e informe o nome ListaProdutos.cshtml e clique em OK;

    Será criado o arquivo ListaProdutos.cshtml e aberto o descritor onde poderemos incluir o código usando a sintaxe C# do Razor;

    Substitua o código padrão pelo código exibido na figura abaixo e clique no botão Salvar para salvar o arquivo:

    Vamos entender o código acima:

    1- No primeiro bloco de código, você abre o arquivo Padaria.sdf (O banco de dados SQL Server Compact) que criamos anteriormente.

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

    O método Database.Open assume que o arquivo SDF. está na pasta App_Data do seu site. (Note que você não precisa especificar a extensão sdf. - na verdade, se você fizer isso, o método Open não vai funcionar.)

    Obs: A pasta App_Data é uma pasta especial em ASP.NET que é usada para armazenar o arquivos de dados.

    2 - A seguir fazemos uma pedido de consulta ao banco de dados usando a seguinte instrução SQL Select: "SELECT * FROM Produtos ORDER BY Nome"

    var selectQueryString = "SELECT * FROM Produtos ORDER BY Nome";

    Estamos usando o Razor

    @{
       var
    db = Database.Open("Padaria");
       var
    selectQueryString = "SELECT * FROM Produtos ORDER BY Nome";
    }

    - Nesta instrução SQL estamos selecionando Todos (*) (o asterisco significa que a consulta vai retornar todas as colunas da tabela) as colunas da tabela Produtos ;
    - A cláusula Order By indica como os dados devem ser ordenadas - neste caso, pela coluna Nome.
    Nota: Você poderia especificar as colunas que deseja retornar indicando o nome de cada uma delas separadas por vírgula:
    Ex: var selectQueryString = "SELECT Nome,Descricao,Preco FROM Produtos ORDER BY Nome";

    Estamos usando uma tabela HTML para exibir os produtos da tabela ordenados pelo nome:

    <!DOCTYPE html>

    <html>

    <head>

    <title>Produtos da Padria Macoratti</title>

    <style>

    table, th, td {

    border: solid 1px #bbbbbb;

    border-collapse: collapse;

    padding: 2px;

    }

    </style>

    </head>

    <body>

    <h1>Produtos da Padaria Macoratti</h1>

    <table>

    <thead>

    <tr>

    <th>Id</th>

    <th>Produto</th>

    <th>Descrição</th>

    <th>Preço</th>

    </tr>

    </thead>

    <tbody>

    @foreach(var linha in db.Query(selectQueryString)){

    <tr>

    <td>@linha.Codigo</td>

    <td>@linha.Nome</td>

    <td>@linha.Descricao</td>

    <td>@linha.Preco</td>

    </tr>

    }

    </tbody>

    </table>

    </body>

    </html>

    • Estamos aplicando um estilo a nossa tabela;
    • O cabeçalho da tabela é definido na tag <thead></thead>;
    • No corpo da página, a marcação cria uma tabela HTML que será utilizada para exibir os dados. Dentro do elemento <tbody>,  usamos um loop foreach para receber individualmente cada linha de dados que é retornado pela consulta.
    •  Para cada linha de dados, criamos uma linha de tabela HTML (elemento <tr> ). Então criamos células para a tabela HTML  com elementos <td> para cada coluna.
    •  Cada vez que passamos pelo loop, a próxima linha disponível a partir do banco de dados está na variável linha (que configuramos na declaração foreach).
    •  Para se ter uma coluna individual da linha, usamos row.Name ou row.Description ou o nome da coluna que você desejar.

    Note a instrução Razor que usa o laço foreach:

    @foreach(var linha in db.Query(selectQueryString)){

    <tr>

    <td>@linha.Codigo</td>

    <td>@linha.Nome</td>

    <td>@linha.Descricao</td>

    <td>@linha.Preco</td>

    </tr>

    }

    Execute a página em um navegador. (Verifique se a página  .cshtml esta selecionada na área de trabalho Files antes de executá-la.)

    Vou selecionar o navegador Google Chrome no menu Run;

    A página exibe uma lista com o seguinte resultado:

    Muito fácil , não é mesmo...

    Com uma ferramenta gratuita, pouco código e com uma sintaxe super enxuta partimos do zero e criamos um banco de dados , uma tabela , incluímos alguns dados na tabela,  e criamos uma página onde definimos o código para acessar a tabela do banco de dados e exibir os dados na página web.

    Aguarde que na continuação deste artigo vou mostrar como incluir dados na tabela Produtos usando o WebMatriz e o Razor.

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

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

    Referências:

    José Carlos Macoratti