WebDeveloperExpress, SQL Server 2005Express e Transactions
A idéia é apresentar a Aplicação de Pedidos do Banco de Dados Access utilizando as ferramentas gratuitas da Microsoft (WebDeveloperExpress, SQL2005Express) e os conceitos de POO e Transações. Para a aplicação serão necessárias três Tabelas Princ
A idéia é apresentar a Aplicação de Pedidos do Banco de Dados Access utilizando as ferramentas gratuitas da Microsoft (WebDeveloperExpress, SQL2005Express) e os conceitos de POO e Transações. Para a aplicação serão necessárias três Tabelas Principais (Pedidos, Detalhes do Pedido e Produtos).
Serve para integrar a Programação Orientada a Objetos ao Banco de Dados via ASP.NET e para visualizar a transação efetuando Insert em duas tabelas e Update em uma.
Essa situação é encontrada toda vez que for utilizar uma aplicação que necessita da inserção de mais de uma tabela com tipo de relacionamento 1-N. Quando se tem um registro na tabela primária e vários registros em tabelas relacionadas.
Esse estudo sobre a Aplicação de Pedidos do Banco de Dados Access é resultado de um trabalho desenvolvido a quatro mãos (professor e monitor) com o objetivo de servir de exemplo aos alunos do IV módulo de um curso técnico oferecido por uma escola em Campinas-SP. Isso porque, no final de cada módulo era exigida dos alunos a apresentação de um projeto contendo cadastros, listagens, relatórios, movimentações além de uma documentação. Aproveitamos parte do exemplo da Aplicação de Pedidos do Access ministrado em sala de aula para elaborar um modelo de Movimentação e, assim, facilitar a compreensão e a elaboração do projeto curricular. Surgiu, então, a idéia de compartilharmos aqui nosso estudo, com as devidas alterações e incrementos.
Utilizaremos o mesmo do Banco de Dados Northwind do Access da Versão 2003 do Office, sem que seja necessário fazer a análise e modelagem dos dados, uma vez que o banco de dados já está pronto.
O foco principal será demonstrar, além do código principal da programação como criar Classe que nos ajudará a inserir os dados nas duas Tabelas principais: Pedidos e Detalhes do Pedido.
Também mostraremos no Ambiente do WebDeveloper - ferramenta gratuita da Microsoft - como efetuar a conexão no arquivo (web.config) estrutura em xml com o Banco de Dados que será transferido para versão gratuita SQLExpress2005. Vamos fazer isso utilizando a Ferramenta DTS (Data Transformation Services) ou SQL Server Import and Export Wizard, uma ferramenta detalhada para Importar ou Exportar dados de uma Base de Dados para outra.
Ao utilizarmos o WebDeveloper, que gerará uma aplicação na Web com extensão .aspx, concluímos que estaremos desenvolvendo uma aplicação ASP.NET. Porém, ao abrirmos uma aplicação nova no Visual WebDeveloper 2005 Express Edition, duas opções surgem de programação: Visual Basic ou Visual C#, conforme a
Figura 1. Nesse projeto estaremos programando em VB.NET.
Figura 1. Criando uma nova Aplicação ASP.NET WebSite – Language: Visual Basic ou Visuacl C#
Utilizamos a Ferramenta Microsoft SQL Server Management Studio que é o Gerenciador do SQL Server Express2005 e a opção do DTS para Importarmos o Banco de Dados Access para o SQLEXPRESS2005, conforme as Figuras 02 a 09:
Figura 2. No Menu Tools da Ferramenta SQL Management Studio temos um "External Tool" chamado DTS. Esse é o Wizard para Importar e Exportar Dados
Figura 3. Primeira Janela da Ferramenta DTS, siga em frente
Figura 4. Choose a Data Source, Origem do Banco de Dados
Na Figura 4, estamos escolhendo a opção do Banco de Dados que vamos Importar os Dados para o SQLExpress2005, Banco Microsoft Access. Pelo Botão Browse, escolhemos o Local de Origem do Banco.
Figura 5. Choose a Destination, Destino da Importação.
Na Figura 5, Em Destination a opção (SQL Native Client) em Server name o (Nome do Servidor Local). Clicamos, então, no Botão New para criamos a Base de Dados que irá receber os Dados do Access.
Figura 6. Janela onde especifica o Nome do Banco de Dados a ser criado para receber os dados
Figura 7. Opção para Copiar as Tabela e Views da Origem dos Dados do Banco Access.
Figura 8. Janela de Seleção das Tabelas e Views que iremos Importar do Banco Access
Na Figura 8, optamos por importar todas as Tabelas do Banco Access.
Figura 9. Janela que finaliza o processo de importação, executando Imediatamente e Finish
Na Figura 9, finalizamos o processo de Importação da Base de Dados do Access para o SQLExpress2005. Mais detalhes sobre o SQLExpress2005 e suas Ferramentas no final do Artigo na Seção Link, após a conclusão.
A estrutura do Banco de Dados que vamos utilizar é esta conforme a Figura 10 e 11.
Figura 10. Object Explorer, janela do Microsoft SQL Server Management Studio, Ferramenta do SQL Express2005 onde temos o Banco de Dados Northwind
Figura 11. Banco de Dados Northwind com a Estrutura Base da Aplicação com as Tabelas Relacionadas (Diagrama gerado pelo SQLExpress2005)
As principais Tabelas que iremos utilizar em nosso projeto são: Pedidos, Detalhes do Pedido e Produtos.
Faremos Inserção de Dados nas Tabelas Pedidos e Detalhes do Pedido e Atualização de Estoque na Tabela Produtos.
Como vimos na Figura 1, ao iniciar o projeto [New Web Site] escolhemos a opção [ASP.NET Web Site] e, ao final da janela optamos pela Linguage [Visual Basic]. Assim teremos a Janela da Aplicação Web ASP.NET vazia e os arquivos da aplicação listados à direita na janela Solution Explorer, conforme Figura12.
ASP.NET conectando ao SQLEXPRESS2005
Nessa parte mostraremos como efetuar a conexão do Banco de Dados Northwind (que está no SQLExpress) com nossa Aplicação ASP.NET, utilizando a janela do Solution Explorer da Aplicação ASP.NET. Na Figura 12 se encontra o arquivo web.config, (um arquivo XML com algumas tags) responsável por configurações da Aplicação ASP.NET. Será utilizada a tag <connectionStrings> conforme Listagem 1 que é responsável por guardar as connectionstrings (parâmetros de conexão com o banco de dados) usados na sua aplicação.
Figura 12. Janela Solution Explorer da Aplicação ASP.NET
Listagem 1. Conexão do Banco de Dados Northwind no arquivo web.config
02 <appSettings/>
03 <connectionStrings>
04 <add name="Conexao" providerName="System.Data.SqlClient"
05 connectionString="Server=.\SQLEXPRESS;Database=Northwind;Integrated 06 Security=SSPI" />
07 < SPAN>connectionStrings>
O name="Conexao" da ((linha 04) será utilizado na aplicação para chamar a classe de conexão ao banco de dados. O providerName é o provedor de acesso ao Banco de Dados. Estamos utilizando o SQL (padrão da Plataforma Microsoft) e a connectionString que é a string de conexão ou caminho onde se encontra o banco de dados contendo o nome do Servidor e do Banco.
Listagem 2. Evento Page_Load
01 Imports system.Data.SqlClient
02 Partial Class _Default
03 Inherits System.Web.UI.Page
04 Public cnn As New SqlConnection
06 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
07 cnn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("Conexao").ToString()
08 cnn.Open()
Na Listagem 2, que veremos mais a frente novamente, temos uma visão do código da abertura da conexão com o banco de dados:
Na (linha 01) devemos importar a Biblioteca que trata das classes do SQL; na (linha 04) criamos uma variável publica cnn que é o Objeto instanciado da classe SqlConnection nativa da biblioteca que importamos e o Evento Page_Load (quando iniciamos uma página ASP.NET); na (linha 07) temos o objeto cnn com a propriedade ConnectionString recebendo pelo método .ToString() a string da conexão ("Conexao") que foi configurada no arquivo web.config conforme Listagem 1; na (linha 08) abrimos a conexão com o método Open. [cnn.Open()].
Da Estrutura de Tabelas citada acima (Figura 11) estamos utilizando somente os campos principais para efetuar o Pedido (NúmeroDoPedido, CódigoDoCliente, CódigoDoFuncionário e DataDoPedido). Já para a Tabela [Detalhes do Pedido] usamos todos os campos. Esse layout foi construído no ASP.NET utilizando de
para cada camada e os objetos mais básicos da própria caixa de ferramentas do Visual WebDeveloper 2005 Express Edition (Label, TextoBox, DropDowList, Button). Para Aba Data, usamos o objeto GridView.
Figura 13. Caixa de Ferramenta
Figura 14. Design do Formulário de Pedidos
No objeto GridView, clicando na seta no canto superior direito visualizamos a janela GridView Tasks e clicando na opção Edit Columns conforme a Figura 15, aparecerá a janela Fieds conforme a Figura 16, onde selecionamos um CommandField e clicamos no botão Add encontrado na coluna Available fields, na coluna abaixo Selected Fields selecionamos o CommandField e na coluna ao lado CommandField properties alteraremos 2(duas) propriedades:
· DeleteText para Deletar e
· ShowDeleteButton para True.
Figura 15. Objeto GridView, adicionando a coluna Deletar
Figura 16. Propriedades de um ButtonField adicionado na GridView
Utilizando a opção "Source" no final da janela temos o design feito no ASP.NET (conforme Listagem 3) com as
e suas configurações para tamanho, fonte, cores, etc. As (linhas 10,11,14,22,37,50 e 53) são todas relacionadas a configuração do layout. Nas demais estão os objetos da caixa de ferramenta (Figura 13) que o usuário mesmo pode inserir manualmente no layout, arrastando e soltando no próprio Formulário, efetuando ajustes em suas propriedades e alterando tamanho, fonte, etc... .
Listagem 3. Design do Formulário no ASP.NET
02 DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
03 <html xmlns="http://www.w3.org/1999/xhtml" >
04 <head runat="server">
05 <title>Movimentação Northwindtitle>
06 head>
08 <form id="form1" runat="server">
09 <div>
10 <div style="width: 600px; height: auto; background-color: #999933;">
11 <div style="width: 600px; padding-right: 5px; padding-left: 5px;padding-bottom: 5px; padding-top: 5px; position: relative;background-color: #006699; left: 0px; top: 0px; color:#fff; font-weight:bold; font-family:Verdana; font-weight:100; ">
12 Movimento de Pedidos do Northwind
13 div>
14 <div style="width: 600px; padding-right: 5px; padding-left: 5px;padding-bottom: 5px; padding-top: 5px; position: relative;background-color: #ffffcc; left: 0px; top: 0px;">
15 <asp:Label ID="lblCliente" runat="server" Text="Cliente" Width="97px">asp:Label>
16 <asp:DropDownList ID="ddlCliente" runat="server" Width="315px">
17 asp:DropDownList><br />
19 <asp:Label ID="lblVendedor" runat="server" Text="Vendedor" Width="97px">asp:Label>
20 <asp:DropDownList ID="ddlVendedor" runat="server" Width="315px">
21 asp:DropDownList>div>
22 <div style="width: 600px; position: relative;height: auto;
background-color: #cccccc; padding-right: 5px; padding-left: 5px; padding-bottom: 5px; padding-top: 5px;">
23 <asp:Label ID="lblProduto" runat="server" Text="Produtos" Width="97px">asp:Label>
24 <asp:DropDownList ID="ddlProdutos" runat="server" Width="315px" AutoPostBack="True">
25 asp:DropDownList><br />
27 <asp:Label ID="lblPreço" runat="server" Text="Preço" Width="96px">asp:Label>
28 <asp:TextBox ID="txtPreco" runat="server" Width="90px" Enabled="False">asp:TextBox>
29 <asp:Label ID="lblDesconto" runat="server" Text="Desconto (%)" Width="97px">asp:Label>
30 <asp:TextBox ID="txtDesconto" runat="server" Width="60px">0asp:TextBox><br />
32 <asp:Label ID="lblQtde" runat="server" Text="Quantidade" Width="97px">asp:Label>
33 <asp:TextBox ID="txtQtde" runat="server" Width="80px">asp:TextBox>
34 <asp:Label ID="lblUnidade" runat="server" Text="Unidade">asp:Label><br />
35 <br />
36 <asp:Button ID="btnAdicionar" runat="server" Text="Adicionar Produto" />div>
37 <div style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px;
width: 600px; padding-top: 5px; position: relative; height: auto;
background-color: #ffcc99; left: 0px; top: 0px;">
38 <asp:GridView ID="GPedidos" runat="server" BackColor="White" BorderColor="#CCCCCC"
39 BorderStyle="None" BorderWidth="1px" CellPadding="3">
40 <RowStyle ForeColor="#000066" />
41 <FooterStyle BackColor="White" ForeColor="#000066" />
42 <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
43 <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
44 <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
45 <Columns>
46 <asp:CommandField DeleteText="Deletar" ShowDeleteButton="True" />
47 Columns>
48 asp:GridView>
49 div>
50 <div style="width: 600px; position: relative; height: auto;
background-color: #ffffcc; padding-right: 5px; padding-left: 5px; padding-bottom: 5px; padding-top: 5px; text-align: right; left: 0px; top: 0px;">
51 <asp:Label ID="lblValorTotal" runat="server" Text="Valor Total" Width="100px">asp:Label>
52 <asp:Label ID="lblValorTotalV" runat="server" Width="110px">asp:Label>div>
53 <div style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px;
background-color: #99cc00; text-align: right;">
54 <asp:Button ID="btnFecharPedido" runat="server" Text="Salvar Pedido" />
55 div>
56 div>
57 div>
58 form>
59 body>
60 html>
Iniciando as variávies
Na Listagem 4, temos nas (linhas 01 e 02) as bibliotecas necessárias para a utilização da conexão com o banco de dados. Da (linha 05 à (linha 12), criamos as principais variáveis que estaremos utilizando no decorrer do projeto. Destacamos a (linha 10) Pedido que é o objeto instanciado ou iniciado da classe clPedidos que vermos mais a frente, na (linha 11) a dtPedidos que é a variável responsável por uma Tabela em Memória (virtual) contendo a estrutura de colunas e (linhas como se fosse uma Tabela no Banco de Dados. A (linha 12) a drPedidos é a variável responsável por controlar as linhas da Tabela do objeto DataTable que está representado pela dtPedidos
Nas (linhas 16,17,18 e 19) estão aos Procedimentos, conforme demonstram as Listagens número 5 em diante.
Listagem 4. Variávies iniciadas e Evento Page_Load
02 Imports System.Data
03 Partial Class _Default
04 Inherits System.Web.UI.Page
05 Public cnn As New SqlConnection
06 Public cmd As New SqlCommand
07 Public validacao As Boolean
08 Public consulta As String
09 Public dr As SqlDataReader
10 Public Pedido As New clPedidos
11 Dim dtPedidos As Data.DataTable
12 Dim drPedidos As Data.DataRow
14 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
15 If Not IsPostBack = True Then
16 CarregaClientes()
17 CarregaVendedor()
18 CarregaProdutos()
19 TablePedidos()
Nota1 do DevMan
IsPostBack: Uma das características mais importantes da ASP.NET é a habilidade de declarar controles que rodam no servidor e a possibilidade de efetuar o postback para a mesma página. Quando uma página ASP.NET é executada ela entra em um ciclo de vida no qual realiza uma série etapas de processamento que incluem: a iniciação, instanciação de controles, restauração e manutenção de estado, execução de código de tratamento de eventos e renderização.
Em uma página ASP.NET os controles e campos de formulários podem ser declarados para rodar no servidor e o servidor simplesmente posta a página de volta para ele mesmo e realiza toda a validação , exibição e realização de ações. A vida ficou mais fácil para o desenvolvedor, pois antes era preciso criar páginas adicionais para efetuar a validação e o processamento. De uma forma simplificada podemos dizer que quando a primeira requisição para uma página ocorre ela é criada(construtor) e o seu evento OnInit() é chamado, logo em seguida o evento page_Load() e acionado e ela é devolvida para o navegador do usuário e a página é destruída. O usuário recebe a página navega e ao final efetua alguma ação clicando em um botão , link, etc. Isto exige uma nova requisição ao servidor para execução do código que porventura possa existir na página. Essa requisição é o que chamamos postback.
Quando o servidor recebe o postback a página é criada o evento Oninit() é executado e os valores dos controles e variáveis da página é recuperado (através de um recurso chamado ViewState) voltando o estado que a página tinha na requisição anterior. Ai o evento Page_Load é chamado e qualquer código presente neste evento é executado e por último o evento do controle que foi clicado é executado, o conteúdo da página é devolvido para o navegador do usuário e a página é destruída. Por essa razão fazemos a chamada dos procedimentos "Carrega" somente uma vez quando incluímos os produtos no pedido.
Referencia: http://msdn.microsoft.com/en-us/library/aa479007.aspx
Carregando o Formulário com os Clientes e Funcionários
Nota2 do DevMan
DataTable: é um objeto composto de linhas e colunas capaz de armazenar dados na memória. DataRow é um dos principais componentes de um DataTable. Através de suas propriedades e métodos recuperar, inserir e excluir informações de um DataTable.
Na linha 03 da Listagem 5 ( o procedimento CarregaClientes) utilizamos o objeto cnn declarado na Listagem 4. Instanciado da classe SqlConnection é o objeto responsável pela conexão com banco de dados SQL Server. Na propriedade ConnectionString recebe a "conexao" que foi criada no arquivo web.config já citado na Listagem 1.
Na linha 04 abrimos a conexão com o método Open. Na linha 10, executamos o objeto cmd, instanciado da classe SqlCommand e também definido conforme Listagem 4. O cmd é o responsável por armazenar os comandos transact-sql e está executando uma consulta a Tabela de Clientes com a finalidade de preencher o DropDowList de Clientes, conforme o Layout da Figura 14. Essa consulta descarrega os valores em um dr (SqlDataReader) objeto responsável por armazenar o resultado da consulta, (ver Nota 3). Da linha 12 à 18 atribuímos o resultado da consulta no objeto DropDowList, na propriedade DataTextField, responsável por mostrar o resultado no Formulário e na propriedade DataValueField. Este por sua vez é o que guarda o valor do campo Chave da Tabela para ser utilizado a fim de inserir na dados na Tabela. Como o objeto dr é somente para leitura, ao final, fechamos o objeto e a conexão e finalizamos o cmd, comando da consulta transact-sql confome as linhas 20, 21 e 22.