Artigo SQL Magazine 57 - Montando um Sistema Web com ASP.NET e SQL Server 2005
Montando um Sistema Web com ASP .NET e SQL Server 2005
Sistema de Reserva de Hospedagem em Hotel
A idéia é apresentar múltiplas formas de se integrar um sistema web com o banco de dados. Nos exemplos, são abordados itens como criação de tabelas, relacionamentos e diagramas utilizando o SQL Server, mostra a utilização de alguns itens de programação como o arquivo web.config e a criação de classes específicas para cada processamento no Visual Studio.
A criação de um sistema baseado em ASP .NET com C# integrado com o SQL Server pode ser bastante extenso. Este artigo cria diversos objetos em banco de dados e um sistema web utilizando várias formas de integração entre as duas tecnologias. É possível presenciar a facilidade da integração nestes exemplos.
A motivação deste artigo é mostrar na prática as diversas formas de integração entre uma aplicação web e o banco de dados no momento de sua construção.
Podemos criar aplicações Windows, Web, Mobile, Console e outros formatos, e fazer estas aplicações se conectarem a um banco de dados para coletar/armazenar as informações.
Nesse cenário, este artigo irá descrever o desenvolvimento de parte de uma aplicação Web desde a criação do banco de dados até sua codificação. Para isso, iremos utilizar o SQL Server 2005 como SGBD, o ASP .NET com C# e .NET Framework 2.0. O sistema que será desenvolvido foi escolhido pensando em sua simplicidade e potencial de aplicação de diversas técnicas de programação e de implementação de banco de dados.
Os exemplos de banco de dados e de código ASP .NET serão disponibilizados para download no site da SQL Magazine.
Domínio da Aplicação: Sistema de Reserva de Hospedagem
Neste estudo de caso, será criado um sistema de reserva de hospedagem de hotel onde um cliente poderá se cadastrar e solicitar uma reserva de quarto para uma hospedagem. Será realizada uma autenticação baseada em usuário e senha e a busca por quartos disponíveis poderá ser feita se baseando nas características que o hospede deseja naquele quarto, podendo escolher televisão, banheira, frigobar, entre outros itens para seu conforto. Na hora da realização da reserva o cliente precisará selecionar qual será a forma de pagamento das suas despesas.
Modelando o Domínio da Aplicação
Para termos uma idéia do que precisa ser feito em um sistema, podemos adotar alguns modelos que servem exatamente para se definir o escopo de um sistema a ser desenvolvido. Nesse artigo, utilizaremos Diagramas de classes (apresentado na Figura 1) e DER – Diagrama de Entidade e Relacionamento (descrito Figura 2). Com estes documentos temos em mãos o sistema que vamos criar e sabemos o limite do que faremos. Sem esses documentos, ficaria difícil mensurarmos o tamanho do projeto e o tempo que demoraríamos em seu desenvolvimento completo. Sem contar que cada vez que parássemos para pensar na implementação, poderiam surgir novas idéias para serem desenvolvidas.
Figura 1: Diagrama de classes do sistema de reserva.
No diagrama de classes da Figura 1 é possível ver que a classe principal do sistema é a classe clReserva, que está relacionada com outras 4 classes: clFormaPagamento, clCliente, clRefeicao e clQuarto. Por sua vez, a classe clQuarto possui um relacionamento com a classe clOpcao, e deste relacionamento surge uma nova classe clOpcaoQuarto. Este diagrama nos ajuda a definir as classes que serão utilizadas na aplicação, sabendo exatamente quais devem ser criadas, quais são seus atributos e seus métodos, ainda que de forma estrutural.
Respeitando as regras definidas para este domínio de aplicação é possível ver que as classes se interligam de forma 1 para N (representado pelo *) em seus relacionamentos, isso significa que uma classe (N) pode ter mais de um valor de representante da outra classe (1), que por sua vez, só poderá ter uma ocorrência da classe anterior.
Figura 2: DER - Diagrama Entidade Relacionamento do sistema de reserva.
Complementando a modelagem da aplicação, o DER da Figura 2 representa a estrutura de banco de dados que armazenará todos os registros do sistema de reserva de hospedagem gerado na ferramenta Visio 2003. Reparem que o DER é bem parecido com o Diagrama de Classes apresentado na Figura 1, mas neste diagrama são montadas as entidades do banco de dados com suas colunas e suas características. Veja que neste diagrama não existem os métodos, mas somente os nomes das colunas, e são esses nomes que utilizaremos para criar as tabelas no banco de dados. A padronização de nomes que foi utilizada é simples. Para as tabelas foram acrescentadas no inicio de cada nome o prefixo tbl, deixando os nomes de fácil distinção. Por exemplo, a tabela reserva ficou sendo tblReserva e a tabela cliente passou a ser tblCliente. Nas colunas de cada tabela, o campo também recebeu um início, mas esse prefixo foi feito utilizando os primeiros três caracteres do nome da tabela. O campo código da tabela tblReserva agora é resCodigo, o campo andar da tabela tblQuarto é quaAndar. Os campos de relacionamento entre as tabelas mantêm os mesmos nomes da chave primária. Um exemplo é o caso do campo refCodigo da tabela tblReserva, que possui o mesmo nome do campo refCodigo da tabela tblRefeicao. Manter este nome igual facilita na hora de codificar algum objeto no banco de dados, pois com essa nomenclatura é fácil saber em qual tabela é feito o relacionamento.
Criando a estrutura do Banco de Dados
Após a modelagem das classes e tabelas que irão compor o sistema a ser desenvolvido, o passo seguinte consiste na criação do banco de dados que armazenará todos os nossos objetos. Como trabalharemos com o SQL Server 2005, podemos realizar esta tarefa de duas formas distintas. A primeira é através de assistentes, no qual preenchemos as informações solicitadas pelo SQL Server e conseguimos criar nosso banco de dados. É a forma mais rápida para se fazer isso. E a segunda maneira é através de código T-SQL (Transact SQL), onde criamos nosso Banco de Dados através de código escrito por nós, e com certeza, é mais trabalhoso e com possibilidade bem maior de falhas. Para ganharmos tempo e objetividade, para alguns objetos nós utilizaremos o assistente, e onde não for possível criaremos os objetos manualmente utilizando código T-SQL.
PASSO 1: Conecte-se ao seu SQL Server 2005 e no item Object Explorer procure o sub-item Databases. Neste sub-item, clique com o botão direito e aponte para New Database. Veja na Figura 3 esta tarefa. Caso o seu Object Explorer não esteja aparecendo, pressione a tecla de atalho F8 ou vá até o menu View e aponte o mouse para o item Object Explorer.
Figura 3. Itens do Object Explorer.
PASSO 2: Na nova janela que se abrir informaremos os parâmetros para o SQL Server criar nosso banco de dados. Vamos colocar o nome do banco, e se for necessário podemos ainda mudar o caminho onde os arquivos de dados (MDF) e de Log (LDF) serão armazenados. Sendo assim, no campo Database Name colocamos o nome que o banco terá. No caso deste artigo será dbHotel. Já na parte central da tela, onde estão as informações de Database Files, pode-se alterar o local físico onde os dados ficarão. Como este exemplo é para estudo, sugiro que esses valores sejam armazenados no local padrão informado pelo SQL Server. Acompanhe a Figura 4 e veja estas alterações. Depois destas informações preenchidas, clique no botão OK.
Figura 4. Criando o Banco de Dados dbHotel.
Após concluir esta tarefa, temos nosso banco de dados vazio. Se olharmos novamente o Object Explorer (Figura 5) podemos ver o nosso banco dbHotel no menu hierárquico. Caso ainda não esteja aparecendo, clique no botão de Refresh (um ícone quadrado com duas setas verdes – Figura 5).
Figura 5. Object Explorer atualizado
Depois do Banco, pensamos nas tabelas...
Depois da criação do banco de dados, precisamos agora criar as nossas tabelas. Vamos utilizar o DER apresentado anteriormente na Figura 2 para nos auxiliar nesta tarefa. Para trabalhar na criação das tabelas não existe uma regra única sobre qual seqüência seguir. Nesse artigo, optaremos pela criação inicial das tabelas principais, depois das tabelas menos relevantes e por último criaremos os relacionamentos e índices. Isso é uma pratica que iremos seguir, mas se alguém tiver alguma outra forma de criar as tabelas e os relacionamentos, fique a vontade para aplicar sua técnica, isto não atrapalhará o resultado final do artigo.
Vamos seguir como indicamos: iremos listar a ordem das tabelas que serão criadas. Em uma análise simples, definimos que a principal tabela deste sistema é a tabela Reservas. Reparem que esta tabela é o centro de todas as outras, ela é a tabela que tem a função de "coração" do sistema. Muitos diriam que a tabela Cliente é a tabela principal, porque sem clientes não existiriam hóspedes. Se seguir por esse raciocínio, outra visão diria que a tabela principal seria a tabela Quarto, que é onde ficam os hóspedes de um hotel. Como foi dito anteriormente, esta á apenas uma visão que iremos seguir. Muitos terão outras, e estas interpretações não atrapalharão o desenvolvimento do sistema neste momento. A ordem seria:
· tblReserva
· tblCliente
· tblQuarto
· tblOpcao
· tblOpcaoQuarto
· tblRefeicao
· tblFormaPagamento
Vamos então criar a tabela tblReserva. Seguindo o mesmo plano traçado anteriormente, utilizaremos o Wizard para criar a tabela e posteriormente os relacionamentos. É mais fácil e prático fazer desta forma neste momento. Para quem tiver o interesse em ver o código de criação das tabelas, ao longo do artigo veremos como encontrá-lo.
Para criar a tabela, no Object Explorer expanda o menu e abra os itens Databases e depois o banco que criamos, neste caso dbHotel. Clique com o botão direito em Tables e aponte para New Table. Olhe a Figura 6 onde encontrar este item.
Figura 6. Item de nova tabela.
Acompanhe na Figura 7 como é apresentado o formulário para o preenchimento da criação da tabela. São três colunas apresentadas: Column Name onde informamos o nome daquela coluna que deve ser único nesta tabela; Data Type que é o tipo de dado que será armazenado naquela coluna, pode ser um tipo de dado básico já existente no SQL Server ou pode ser algum tipo criado pelo próprio usuário; e Allow Nulls informando se os dados desta coluna da tabela poderão ser Nulos (vazios) quando forem armazenados.
Figura 7. Nova tabela vazia.
Para preencher os campos que utilizaremos na tabela tblReserva, vamos seguir o plano traçado na Tabela 1 com seus Nomes, Tipos e Obs dos campos da tabela tblReserva.