Início » C#

Arquivo da categoria: C#

Iniciando com ASP.NET 4.5 Web Forms – Parte 3 – Criando o DAL (Data Access Layer)

Esse tutorial descreve como criar, acessar, e revisar dados de uma base de dados usando ASP.NET Web Forms e Entity Framework Code First. É continuação do tutorial anterior “Criando o Projeto” e é parte da série de tutoriais Wingtip Toy Store. Quando você completar esse tutorial, terá construído um grupo de classes de acesso a dados que estão na pasta Models do projeto.

1 O que aprenderá:

  • Como criar o modelo de dados.
  • Como inicializar e alimentar a base de dados.
  • Como atualizar e configurar a aplicação para suportar a base de dados.

Essas são as características introduzidas no tutorial:

  • Entity Framework Code First
  • LocalDB
  • Data Annotations

2 Criando o Modelo de Dados

Entity Framework é um framework ORM (Object-Relational Mapping). Permite que você trabalhe com dados relacionais como objetos, eliminando a maioria de código de acesso a dados que você usualmente precisa escrever. Usando Entity Framework, você pode emitir consultas usando LINQ, e então recuperar e manipular dados como objetos fortemente tipados. LINQ fornece padrões para consulta e atualização de dados. Usar Entity Framework permite que você foque em criar o resto de sua aplicação, ao invés de focar nos fundamentos de acesso a dados. Posteriormente nesse tutorial, será mostrado como usar dados para popular navegação e consulta de produtos.

Entity Framework suporta um paradigma de desenvolvimento chamado Code First. Code First permite que você defina seus modelos de dados usando classes. Uma classe é um construtor que permite que você crie seus próprios tipos customizados agrupando variáveis de outros tipos, métodos e eventos. Você pode mapear classes para uma base de dados existente ou usá-las para gerar uma base de dados. Nesse tutorial, você criará o modelo de dados escrevendo classes de modelos de dados. E então, permitirá que o Entity Framework crie a base de dados dessas novas classes.

Começaremos criando entity classes que definem modelos de dadps para a aplicação Web Forms. Depois criará uma context class que gerencia as entity classes e fornece acesso a dados à base de dados. Criará também uma classe inicializadora que será usada para popular a base de dados.

2.1 Entity Framework e Referências

Por padrão, Entity Framework está incluso quando você cria uma nova aplicação ASP.NET usando o template Web Forms. Entity Framework pode ser instalado, desinstalado, e atualizado com o NuGet.

O pacote NuGet inclui os seguintes assemblies no seu projeto:

  • EntityFramework.dll – código usado pelo Entity Framework.
  • EntityFramework.SqlServer.dll – provider do Microsoft SQL Server para Entity Framework.

2.2 Entity Classes

As classes que você cria para definir o schema dos dados são chamadas entity classes. Se você é novo no design de base de dados, pense nas entity classes como definições de tabelas de uma base de dados. Cada propriedade na classe especifica uma coluna na tabela da base de dados. Essas classes fornecem uma estrutura leve, interface objeto-relacional entre código orientado a objeto e a estrutura relacional da tabela da base de dados.

Nesse tutorial, você começará adicionando uma entity class simples representando os schemas para produtos e categorias. A classe produtos conterá definições para cada produto. O nome de cada membro da classe produtos será ProductID, ProductName, Description, ImagePath, UnitPrice, CategoryID, e Category. A classe categoria conterá definições para cada categoria que um produto pode pertencer, como Car, Boat, ou Plane. O nome de cada membro da classe categoria será CategoryID, CategoryName, Description, e Products. Cada produto pertencerá a uma das categorias. Essas entity classes serão adicionadas a pasta existente no projeto chamado Models.

  1. Na Solution Explorer, clique com o botão direito na pasta Models e então selecione Add -> New Item.
  2. Figura 1 - Parte 3

    A caixa de diálogo Add New Item é exibida.

  3. Em Visual C# do painel Installed do lado esquerdo, selecione Code.
  4. Figura 2 - Parte 3

  5. Selecione Class no painel do centro e nomeie essa classe como Product.cs.
  6. Clique em Add. O novo arquivo da classe é exibido no editor.
  7. Substitua o código padrão pelo seguinte:
  8. using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.ComponentModel.DataAnnotations;
    
    namespace WingtipToys.Models
    {
    public class Product
    {
            [ScaffoldColumn(false)]
            public int ProductID { get; set; }
    
            [Required, StringLength(100), Display(Name = "Name")]
            public string ProductName { get; set; }
    
            [Required, StringLength(10000), Display(Name = "Product Description"), DataType(DataType.MultilineText)]
    
            public string Description { get; set; }
    
            public string ImagePath { get; set; }
    
            [Display(Name = "Price")]
            public double? UnitPrice { get; set; }
    
            public int? CategoryID { get; set; }
    
            public virtual Category Category { get; set; }
        }
    }
    
    
  9. Crie outra class repetindo os passos 1 até 4, entretanto, nomeie a nova classe como Category.cs e substitua o código padrão pelo seguinte:
  10. 
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.ComponentModel.DataAnnotations;
    
    namespace WingtipToys.Models
    {
        public class Category
        {
            [ScaffoldColumn(false)]
            public int CategoryID { get; set; }
    
            [Required, StringLength(100), Display(Name = "Name")]
            public string CategoryName { get; set; }
    
            [Display(Name = "Product Description")]
            public string Description { get; set; }
    
            public virtual ICollection<Product> Products { get; set; }
        }
    }
    
    

Como mencionado anteriormente, a classe Category representa o tipo de produto que a aplicação é projetada para vender (como Carros, Boats, Rockets, dentre outros), e a classe Product representa os produtos individuais (brinquedos) na base de dados. Cada instância de um objeto Product corresponderá a uma linha dentro de uma tabela de base de dados relacional, e cada propriedade da classe Product mapeará uma coluna na tabela de base de dados relacional. Posteriormente nesse tutorial, será revisado os dados dos produtos contidos na base de dados.

2.3 Data Annotations

Você deve ter notado que certos membros das classes tem atributos especificando detalhes sobre o membro, como ScaffoldColumn(false). Isso são data annotations. Os atributos data annotation podem descrever como validar entrada de usuário para aquele membro, especificar formatação para ele, e especificar como é modelado quando a base de dados é criada.

3 Context Class

Para começar usar as classes para acesso a dados, você deve definir uma context class. Como mencionado anteriormente, a context class gerencia as entity classes (como a classe Product e Category) e fornece acesso a dados para a base de dados.

Esse procedimento adicionada uma nova context class em C# para a pasta Models.

  1. Clique com o botão direito na pasta Models e então selecione Add -> New Item.
  2. Selecione Class do painel central, e nomeie como ProductContext.cs e clique em Add.
  3. Substitua o código padrão contido na classe pelo seguinte:
  4. using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Entity;
    
    namespace WingtipToys.Models
    {
        public class ProductContext : DbContext
        {
            public ProductContext()
                : base("WingtipToys")
            { }
    
            public DbSet<Category> Categories { get; set; }
            public DbSet<Product> Products { get; set; }
        }
    }
    
    

Esse código adiciona o namespace System.Data.Entity para que você possa ter acesso ao core de todas as funcionalidades do Entity Framework, que inclui a capacidade de consultar, inserir, atualizar, e deletar dados trabalhando com objetos fortemente tipados.

A classe ProductContext representa o contexto da base de dados do Entity Framework, que manipula a busca, armazenamento, e atualização das instâncias da classe Product na base de dados. A classe ProductContext deriva da classe base DbContext fornecido pelo Entity Framework.

4 Classe Inicializadora

Será necessário executar alguma lógica customizada para inicializar a base de dados na primeira vez que o context é usado. Isso permitirá alimentar os dados a serem adicionados na base de dados para que você possa imediatamente exibir produtos e categorias.

Esse procedimento adiciona uma nova classe inicializadora em C# na pasta Models.

  1. Crie outra classe na pasta Models e nomeie como ProductDatabaseInitializer.cs.
  2. Substitua o código padrão contido na classe pelo seguinte:
  3. 
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Entity;
    
    namespace WingtipToys.Models
    {
        public class ProductDatabaseInitializer : DropCreateDatabaseIfModelChanges<ProductContext>
        {
            protected override void Seed(ProductContext context)
            {
                GetCategories().ForEach(c => context.Categories.Add(c));
                GetProducts().ForEach(p => context.Products.Add(p));
            }
    
            private static List<Category> GetCategories()
            {
                var categories = new List<Category> {
                    new Category
                    {
                        CategoryID = 1,
                        CategoryName = "Cars"
                    },
                    new Category
                    {
                        CategoryID = 2,
                        CategoryName = "Planes"
                    },
                    new Category
                    {
                        CategoryID = 3,
                        CategoryName = "Trucks"
                    },
                    new Category
                    {
                        CategoryID = 4,
                        CategoryName = "Boats"
                    },
                    new Category
                    {
                        CategoryID = 5,
                        CategoryName = "Rockets"
                    }
                };
    
                return categories;
            }
    
            private static List<Product> GetProducts()
            {
                var products = new List<Product> {
                    new Product
                    {
                        ProductID = 1,
                        ProductName = "Convertible Car",
                        Description = "This convertible car is fast! The engine is powered by a neutrino based battery (not included)." + 
                                      "Power it up and let it go!", 
                        ImagePath="carconvert.png",
                        UnitPrice = 22.50,
                        CategoryID = 1
                   },
                    new Product 
                    {
                        ProductID = 2,
                        ProductName = "Old-time Car",
                        Description = "There's nothing old about this toy car, except it's looks. Compatible with other old toy cars.",
                        ImagePath="carearly.png",
                        UnitPrice = 15.95,
                         CategoryID = 1
                   },
                    new Product
                    {
                        ProductID = 3,
                        ProductName = "Fast Car",
                        Description = "Yes this car is fast, but it also floats in water.",
                        ImagePath="carfast.png",
                        UnitPrice = 32.99,
                        CategoryID = 1
                    },
                    new Product
                    {
                        ProductID = 4,
                        ProductName = "Super Fast Car",
                        Description = "Use this super fast car to entertain guests. Lights and doors work!",
                        ImagePath="carfaster.png",
                        UnitPrice = 8.95,
                        CategoryID = 1
                    },
                    new Product
                    {
                        ProductID = 5,
                        ProductName = "Old Style Racer",
                        Description = "This old style racer can fly (with user assistance). Gravity controls flight duration." + 
                                      "No batteries required.",
                        ImagePath="carracer.png",
                        UnitPrice = 34.95,
                        CategoryID = 1
                    },
                    new Product
                    {
                        ProductID = 6,
                        ProductName = "Ace Plane",
                        Description = "Authentic airplane toy. Features realistic color and details.",
                        ImagePath="planeace.png",
                        UnitPrice = 95.00,
                        CategoryID = 2
                    },
                    new Product
                    {
                        ProductID = 7,
                        ProductName = "Glider",
                        Description = "This fun glider is made from real balsa wood. Some assembly required.",
                        ImagePath="planeglider.png",
                        UnitPrice = 4.95,
                        CategoryID = 2
                    },
                    new Product
                    {
                        ProductID = 8,
                        ProductName = "Paper Plane",
                        Description = "This paper plane is like no other paper plane. Some folding required.",
                        ImagePath="planepaper.png",
                        UnitPrice = 2.95,
                        CategoryID = 2
                    },
                    new Product
                    {
                        ProductID = 9,
                        ProductName = "Propeller Plane",
                        Description = "Rubber band powered plane features two wheels.",
                        ImagePath="planeprop.png",
                        UnitPrice = 32.95,
                        CategoryID = 2
                    },
                    new Product
                    {
                        ProductID = 10,
                        ProductName = "Early Truck",
                        Description = "This toy truck has a real gas powered engine. Requires regular tune ups.",
                        ImagePath="truckearly.png",
                        UnitPrice = 15.00,
                        CategoryID = 3
                    },
                    new Product
                    {
                        ProductID = 11,
                        ProductName = "Fire Truck",
                        Description = "You will have endless fun with this one quarter sized fire truck.",
                        ImagePath="truckfire.png",
                        UnitPrice = 26.00,
                        CategoryID = 3
                    },
                    new Product
                    {
                        ProductID = 12,
                        ProductName = "Big Truck",
                        Description = "This fun toy truck can be used to tow other trucks that are not as big.",
                        ImagePath="truckbig.png",
                        UnitPrice = 29.00,
                        CategoryID = 3
                    },
                    new Product
                    {
                        ProductID = 13,
                        ProductName = "Big Ship",
                        Description = "Is it a boat or a ship. Let this floating vehicle decide by using its " + 
                                      "artifically intelligent computer brain!",
                        ImagePath="boatbig.png",
                        UnitPrice = 95.00,
                        CategoryID = 4
                    },
                    new Product
                    {
                        ProductID = 14,
                        ProductName = "Paper Boat",
                        Description = "Floating fun for all! This toy boat can be assembled in seconds. Floats for                   minutes!" + 
                                      "Some folding required.",
                        ImagePath="boatpaper.png",
                        UnitPrice = 4.95,
                        CategoryID = 4
                    },
                    new Product
                    {
                        ProductID = 15,
                        ProductName = "Sail Boat",
                        Description = "Put this fun toy sail boat in the water and let it go!",
                        ImagePath="boatsail.png",
                        UnitPrice = 42.95,
                        CategoryID = 4
                    },
                    new Product
                    {
                        ProductID = 16,
                        ProductName = "Rocket",
                        Description = "This fun rocket will travel up to a height of 200 feet.",
                        ImagePath="rocket.png",
                        UnitPrice = 122.95,
                        CategoryID = 5
                    }
                };
    
                return products;
            }
        }
    }
    
    

Como você pode ver no código acima, quando a base de dados é criada e inicializada, a propriedade Seed é substituída e definida. Quando a propriedade Seed é definida, os valores de categorias e produtos são usados para popular a base de dados. Se você tentar atualizar os dados alimentados modificando o código acima depois que a base de dados for criada, você não verá nenhuma atualização quando executar a aplicação Web. A razão é que o código acima usa uma implementação da classe DropCreateDatabaseIfModelChanges para reconhecer se o model foi alterado antes de resetar os dados alimentados. Se nenhuma alteração for feita às entity classes Category e Product, a base de dados não será reinicializada com os dados alimentados.

Nota: se você quisesse que a base de dados fosse recriada toda hora que a aplicação for executada, poderia usar a classe DropCreateDatabaseAlways ao invés da classe DropCreateDatabaseIfModelChanges. Entretanto para essa série de tutoriais, use a classe DropCreateDatabaseIfModelChanges.

Nesse ponto do tutorial, você terá uma pasta Models com quatro novas classes e uma classe padrão:

Figura 3 - Parte 3

5 Configurando a Aplicação para usar Data Model

Agora que você criou as classes que representam os dados, deve-se configurar a aplicação para usar as classes. No arquivo Global.asax, você adiciona código para inicializar o model. No arquivo Web.config você adiciona informação que diz a aplicação qual base de dados será usada para armazenar os dados que são representados pelas novas classes de dados. O arquivo Global.asax pode ser usado para manipular eventos ou métodos da aplicação. O arquivo Web.config permite que você controle a configuração de sua aplicação Web.

5.1 Atualizando o arquivo Global.asax

Para inicializar os data models quando a aplicação executar, você atualizará o manipulador Application_Start no arquivo Global.asax.

Nota: na Solution Explorer, você pode selecionar o arquivo Global.asax ou Global.asax.cs para editar o arquivo Global.asax.cs.

  1. Adicione o seguinte código no método Application_Start no arquivo Global.asax.cs.
  2. 
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Optimization;
    using System.Web.Routing;
    using System.Web.Security;
    using System.Web.SessionState;
    using System.Data.Entity;
    using WingtipToys.Models;
    
    namespace WingtipToys
    {
        public class Global : HttpApplication
        {
            void Application_Start(object sender, EventArgs e)
            {
                // Code that runs on application startup
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
    
                //Initialize the product database.
                Database.SetInitializer(new ProductDatabaseInitializer());
            }
        }
    }
    
    

Como mostrado no código acima, quando a aplicação iniciar, a aplicação especifica o inicializador que irá executar durante a primeira vez que o dado é acessado. Os namespaces adicionais (using System.Data.Entity e WingtipToys.Models) são necessários para acessar o objeto Database e o objeto ProductDatabaseInitializer.

5.2 Modificando o arquivo Web.config

Embora o Entity Framework Code First gerará uma base de dados para você num local padrão quando a base de dados é populada com dados, adicionar sua própria informação de conexão na sua aplicação te dá controle a localização da base de dados. Você especifica essa conexão da base de dados usando uma connection string no arquivo Web.config da aplicação na raíz do projeto. Adicionando uma nova connection string, você pode direcionar a localização da base de dados (wingtiptoys.mdf) para ser construída no diretório de dados da aplicação (App_Data), em vez de sua localização padrão. Fazer essa mudança permite que você encontre e inspecione posteriormente o arquivo da base de dados nesse tutorial.

  1. Na Solution Explorer, encontre e abra o arquivo Web.config.
  2. Adicione a connection string abaixo na seção do arquivo Web.config, como segue:
  3. 
    <connectionStrings>
        <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-WingtipToys-20140407092028.mdf;Initial Catalog=aspnet-WingtipToys-20140407092028;Integrated Security=True" providerName="System.Data.SqlClient" />
        <add name="WingtipToys" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\wingtiptoys.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />
      </connectionStrings>
    
    

Quando a aplicação for executada pela primeira vez, construirá a base de dados no local especificado pela connection string. Mas antes de executar a aplicação, vamos fazer o build da mesma.

6 Buildando a Aplicação

Para garantir que todas as classes e alterações da sua aplicação Web funcionaram, você deve buildar a aplicação.

  1. No menu Debug, selecione Build WingtipToys. A janela Output é exibida, e se tudo correu bem, você verá uma mensagem de sucesso.

Figura 4 - Parte 3

Se sua execução der erro, cheque os passos anteriores. A informação na janela Output indicará quais arquivos tem um problema e onde no arquivo uma mudança e requerida. Essa informação permitirá que você determine qual parte dos passos anteriores precisam ser revisados e corrigidos no seu projeto.

Sumário

Nesse tutorial você criou o modelo de dados, assim como, adicionou o código que será usado para inicializar e alimentar a base de dados. Você também configurou a aplicação para usar o modelo de dados quando a aplicação é executada.

No próximo tutorial, você atualizará a Interface de Usuário, adicionar navegação, e recuperar os dados da base de dados. Isso resultará na base de dados sendo automaticamente criada baseada em entity classes que você criou nesse tutorial.


O conteúdo desta página resulta da tradução do artigo Getting Started with ASP.NET 4.5 Web Forms – Create the Data Access Layer, escrito pelo autor Erik Reitan, originalmente presente no site do asp.net. A página correspondente pode ser conferida aqui.

Iniciando com ASP.NET Web Forms 4.5 – Parte 2 – Criando o Projeto

Nesse tutorial você irá criar, revisar, e executar o projeto padrão no Visual Studio, que permitirá que se familiarize com as características do ASP.NET. Também irá revisar o ambiente do Visual Studio.

1 O que aprenderá:

  • Como criar um novo projeto Web Forms.
  • A estrutura de arquivos do projeto Web Forms.
  • Como executar o projeto em Visual Studio.
  • As diferentes características da aplicação padrão Web Forms.
  • Alguns conceitos básicos de como usar o ambiente do Visual Studio.

2 Criando o Projeto

  1. Abra o Visual Studio.
  2. Selecione New Project do menu File no Visual Studio.
  3. Figura 1 - Parte 2

  4. Selecione Templates  Visual C#  Web do grupo de templates do lado esquerdo.
  5. Escolha o template ASP.NET Web Application na coluna do meio.
  6. Nomeie seu projeto como WingtipToys e clique no botão OK.
  7. Figura 2 - Parte 2

    Nota: o nome do projeto nesse tutorial é WingtipToys. É recomendado que você use exatamente o mesmo nome de projeto para que o código fornecido através do tutorial funcione como esperado.

  8. Selecione o template Web Forms e clique no botão Create Project.
  9. Figura 3 - Parta 3

Levará um tempo até que o projeto seja criado. Quando estiver pronto, abra a página Default.aspx.

Figura 4 - Parte 2

Você pode mudar entre Design e Source view selecionando uma opção no fundo da janela do centro. Design view exibe páginas ASP.NET, master pages, páginas de conteúdo, páginas HTML, e controle de usuário usando a visão WYSIWYG (What You See Is What You Get). Source view exibe a marcação HTML para sua página web, que você pode editar.

3 Entendendo o ASP.NET Framework

ASP.NET Web Forms te permite construir websites dinâmicos usando o modelo familiar drag-and-drop e event-driven. A superfície do design e milhares de controles e componentes te permite criar rapidamente sofisticado, poderosa interface gráfica com acesso a dados. A loja Wingtip Toy é baseada no ASP.NET Web Forms, mas muitos dos conceitos que você aprenderá nessa série de tutoriais são aplicáveis a todo ASP.NET.

ASP.NET oferece quatro frameworks de desenvolvimento primários:

  • ASP.NET Web Forms
    O framework Web Forms é o alvo dos desenvolvedores que preferem programação declarativa e baseada em controles, assim como Microsoft Windows Forms (WinForms) e WPF/XAML/Silverlight. Oferece um WYSIWYG modelo de desenvolvimento de design, então é popular com desenvolvedores olhando para um rápido ambiente de desenvolvimento de aplicação (RAD) para desenvolvimento web. Se você é novo em programação web e familiar com as tradicionais ferramentas de desenvolvimento cliente RAD (por exemplo, para Visual Basic e Visual C#), você pode rapidamente construir uma aplicação web sem ter experiência em HTML e JavaScript.

  • ASP.NET MVC
    ASP.NET MVC é o alvo para desenvolvedores que estão interessados em padrões e princípios como desenvolvimento de teste dirigido, separação de interesses, inversão de controle (IoC), e injeção de dependências (DI). Esse framework encoraja separação da BLL (Business Logic Layer – Camada de Regra de Negócios) de uma aplicação web da sua camada de apresentação.

  • ASP.NET Web Pages
    ASP.NET Web Pages é o alvo para desenvolvedores que querem um desenvolvimento web simples, ao longo de linhas do PHP. No modelo Web Pages, você cria páginas HTML e então adiciona código baseado em servidor a fim de controlar dinamicamente como a marcação é renderizada. Web Pages é especificamente desenhada para ser um framework leve, e é o ponto de entrada mais fácil para o ASP.NET para pessoas que conhecem HTML mas não tem experiência em programação – por exemplo, estudantes ou hobbistas. É também uma boa maneira para desenvolvedores web que sabem PHP ou frameworks similares para começar usar ASP.NET.

  • ASP.NET Single Page Application
    ASP.NET Single Page Application (SPA) te ajuda a construir aplicações que incluem interações cliente-side significantes usando HTML5, CSS3 e JavaScript. O ASP.NET e Web Tools 2012.2 Update envia um novo template para construir aplicações single page usando knockout.js e ASP.NET Web API. Em adição ao novo template SPA, novos templates SPA criados pela comunidade também estão disponíveis para download.

Em adição aos quatro principais frameworks de desenvolvimento, ASP.NET também oferece tecnologias adicionais que são importantes estar cientes e familiarizados, mas não são cobertos nessa série de tutoriais:

  • ASP.NET Web API – um framework para construção de serviços HTTP que alcançam uma ampla gama de clientes, incluindo navegadores e mobile devices.
  • ASP.NET SignalR – uma biblioteca que torna o desenvolvimento web em tempo real fácil.

4 Revisando o Projeto

No Visual Studio, a janela Solution Explorer permite que você gerencie arquivos para o projeto. Vamos dar uma olhada nas pastas que foram adicionadas na sua aplicação na Solution Explorer. O template web application adiciona uma estrutura básica de pastas:

Figura 5 - Parte 2

Visual Studio cria alguns pastas e arquivos iniciais para seu projeto. Os primeiros arquivos que você trabalhará posteriormente no tutorial são os seguintes:

Arquivo Propósito
Default.aspx Tipicamente a primeira página exibida quando a aplicação é executada no navegador.
Site.Master Uma página que permite que você crie um layout consistente e use comportamento padrão nas páginas de sua aplicação.
Global.asax Um arquivo opcional que contém código para responder eventos appication-level e session-level levantados pelo ASP.NET ou pelos módulos HTTP.
Web.config Dados de configuração para uma aplicação.

5 Executando a Aplicação Web Padrão

A aplicação Web padrão fornece uma experiência rica baseada em suporte e funcionalidade embutidos. Sem nenhuma mudança no projeto padrão Web Forms, a aplicação está pronta para ser executada no seu navegador Web local.

  1. Aperte a tecla F5 enquanto estiver no Visual Studio. A aplicação será compilada e exibida no seu navegador Web.
  2. Figura 6 - Parte 2

  3. Quando você tiver completado a revisão da aplicação em execução, feche a janela do navegador.

Existem três páginas principais nessa aplicação Web: Default.aspx (Home), About.aspx e Contact.aspx. Cada uma dessas páginas podem ser obtidas pela barra de navegação. Existem também duas páginas adicionais contidas na pasta Account, as páginas Register.aspx e Login.aspx. Essas duas páginas permitem que você use o membership do ASP.NET para criar, armazenar, e validar credenciais de usuário.

6 ASP.NET Web Forms Background

ASP.NET Web Forms são páginas que são baseadas nas tecnologias Microsoft ASP.NET, em que cada código que executa no servidor dinamicamente gera saída de uma página Web no browser ou dispositivo client. Uma página ASP.NET Web Forms automaticamente renderiza o navegador compatível correto com HTML para características como estilos, layout, dentre outros. Web Forms são compatíveis com qualquer linguagem suportada pelo CLR (Common Language Runtime), assim como Microsoft Visual Basic e Microsoft Visual C#. Também, Web Forms são construídas no Microsoft .NET Framework, que fornece benefícios tanto como um ambiente gerenciado, tipo de segurança e herança.

Quando uma página ASP.NET Web Forms é executada, a página vai através de um ciclo de vida em que executa uma série de etapas de processamento. Essas etapas incluem inicialização, controles de instanciação, restauração e manutenção de estado, executando código de manipulação de eventos, e renderizando. Assim que você tornar mais familiarizado com o poder do ASP.NET Web Forms, é importante para você entender o ciclo de vida da página para que assim você possa escrever código no estágio apropriado de ciclo de vida para o efeito que você pretender.

Quando um web server recebe uma requisição de uma página, ele encontra a página, processa, envia para o navegador, e então desfaz toda a informação da página. Se o usuário requisitar a mesma página novamente, o servidor repete toda a sequencia, reprocessando a página a partir do zero. Dito de outra forma, um servidor não possui nenhuma memória de páginas que foram processadas – páginas são sem estado. O framework de uma página ASP.NET automaticamente manipula as tarefas de manutenção do estado de sua página e seus controles, e fornece a você caminhos explícitos para manter o estado de informação de sua específica aplicação.

6.1 Características de uma Aplicação Web nos templates de uma Aplicação Web Forms

Um template de Aplicação ASP.NET Web Forms fornece um rico conjunto de funcionalidades de construção. Não somente fornece a você com uma página Home.aspx, About.aspx, Contact.aspx, mas também inclui funções de membros que registra usuários e salva suas credenciais assim eles podem fazer login no seu website. Essa visão geral fornece mais informação sobre algumas das características contidas no template ASP.NET Web Forms Application e como eles são usados na aplicação Wingtip Toys.

6.2 Memberships

ASP.NET Identity armazena as credenciais dos seus usuários numa base de dados criada pela aplicação. Quando seus usuários fazem o login, a aplicação valida suas credenciais lendo a base de dados.
A pasta Account do seu projeto contém os arquivos que implementam as várias partes do membership (membros): registrando, logando, trocando uma senha, e autorizando acesso. Adicionalmente, ASP.NET Web Forms suporta OAuth e OpenID. Essas melhorias de autenticação permite aos usuários logar dentro do seu site usando credenciais existentes, de várias contas como Facebook, Twitter, Windows Live and Google.

Figura 7 - Parte 2

Por padrão, o template cria uma base de dados de membros usando um nome padrão de base de dados numa instância do SQL Server Express LocalDB, o servidor da base de dados de desenvolvimento que vem com Visual Studio 2013 Express for Web.

6.3 SQL Server Express LocalDB

SQL Server Express LocalDB é uma versão leve do SQL Server que tem muitas características de programabilidade da base de dados do SQL Server. SQL Server Express LocalDB executa em modo usuário e tem uma instalação rápida e sem configuração que tem uma pequena lista de pré-requisitos para instalação. No Microsoft SQL Server, qualquer base de dados ou código T-SQL pode ser movido do SQL Server Express LocalDB para SQL Server e SQL Azure sem nenhum passo de upgrade. Então, SQL Server Express LocalDB pode ser usado como um ambiente de desenvolvimento para alvo de aplicações de todas as edições do SQL Server.

SQL Server Express LocalDB habilita características como stored procedures, funções definidas de usuário e agregados, integração com .NET Framework, tipos especiais e outros que não estão disponíveis no SQL Server Compact.

6.4 Master Pages

Uma ASP.NET master page define uma aparência consistente e comportamento para todas as páginas de sua aplicação. O layout da master page funde com o conteúdo de uma página de conteúdo individual para produzir a página final que o usuário vê. Na aplicação Wingtip Toys, você modifica a master page Site.master para que assim todas as páginas no website Wingtip Toys compartilhem o mesmo logo e barra de navegação.

6.5 HTML5

O template ASP.NET Web Forms Application suporta HTML5, que é a última versão da linguagem de marcação HTML. HTML5 suporta novos elementos e funcionalidades que torna mais fácil criar Web sites.

6.6 Modernizr

Para navegadores que não suportam HTML5, você pode usar o Modernizr. Modernizr é uma biblioteca JavaScript que pode detectar se um navegador suporta as características do HTML5, e habilita caso contrário. No template ASP.NET Web Forms Application, Modernizr é instalado como um pacote NuGet.

6.7 NuGet Packages

O template ASP.NET Web Forms Application inclui um conjunto de pacotes NuGet. Esses pacotes fornecem funcionalidades de componentes no formulário de ferramentas e bibliotecas open source. Há uma ampla variedade de pacotes para ajudar você criar e testar suas aplicações. O Visual Studio torna fácil adicionar, remover, e atualizar pacotes NuGet. Desenvolvedores podem criar e adicionar pacotes ao NuGet como quiserem.

Figura 8 - Parte 2

Quando você instala um pacote, NuGet copia arquivos para sua solução e automaticamente faz quaisquer mudanças que são necessárias, assim como adiciona referencias e troca seu arquivo Web.config. Se você decidir remover a biblioteca, NuGet remove arquivos e inverte quaisquer mudanças que foram feitas em seu projeto de modo que não cause nenhuma desordem. NuGet está disponível no menu Tools no Visual Studio.

6.8 jQuery

jQuery é uma rápida e concisa biblioteca JavaScript que simplifica documentos HTML, manipulação de eventos, animação, e interações Ajax para rápido desenvolvimento web. A biblioteca jQuery do JavaScript está inclusa no template ASP.NET Web Forms Application como um pacote NuGet.

6.9 Unobtrusive Validation

Controles de validação embutidos tem sido configurados para usar JavaScript discretamente para validação de lógica do lado cliente. Isso reduz significantemente a quantidade de JavaScript renderizando inline na marcação da página e reduz o tamanho global da página. Validação discreta é adicionada globalmente ao template ASP.NET Web Forms Application baseado na configuração do elemento do arquivo Web.config na raíz da aplicação.

6.10 Entity Framework Code First

Além das características do template ASP.NET Web Forms Application, a aplicação Wingtip Toys usa Entity Framework Code First, que é uma biblioteca NuGet que habilita o desenvolvimento de código centrado quando você trabalha com dados. Simplificando, ele cria uma parte da base de dados de sua aplicação para você baseado no código que você escreve. Usando o Entity Framework, você recupera e manipula dados como objetos fortemente tipados. Isso permite que você foque na regra de negócio de sua aplicação em vez dos detalhes de como o dado é acessado.

7 Tour pelo Visual Studio

A janela primária no Visual Studio inclui a Solution Explorer, o Server Explorer (Database Explorer no Express), a Properties Window, o Toolbox, a Toolbar, e o Document Window.

Figura 9 - Parte 2

Sumário

Nesse tutorial você criou, revisou e executou a aplicação padrão do Web Forms. Você revisou as diferentes características da aplicação padrão do Web Forms e aprendeu alguns conceitos básicos sobre como usar o ambiente do Visual Studio. Nos próximos tutoriais você irá criar o DAL (Data Access Layer – Camada de Acesso a Dados).


O conteúdo desta página resulta da tradução do artigo Create the Project, escrito pelo autor Erik Reitan, originalmente presente no site do asp.net. A página correspondente pode ser conferida aqui.

Iniciando com ASP.NET Web Forms 4.5 e Visual Studio 2013 – Parte 1 – Introdução e Visão Geral

1 Introdução

Essa série de tutoriais guia você através de passos requeridos para criar uma aplicação em ASP.NET Web Forms usando Visual Studio Express 2013 e ASP.NET 4.5.

A aplicação que você criará se chama Wingtip Toys. É um exemplo simples de uma loja online que vende itens online. A série de tutoriais destaca novas características disponíveis no ASP.NET 4.5.

1.1 Download do projeto completo

Você pode fazer o download do projeto em C# que contém o tutorial completo.

1.2 Revise o conteúdo respondendo o ASP.NET Web Forms Quiz

Depois que você completar o tutorial, teste seu conhecimento e reforce conceitos chaves respondendo o ASP.NET Web Forms Quiz. Esse Quiz foi especialmente criado do conteúdo contido nessa série de tutoriais. Cada questão no quiz fornece uma explicação sobre os links com guia adicional.

1.3 Público-alvo

O público-alvo desta série de tutoriais são desenvolvedores experientes que são novos no ASP.NET Web Forms. O desenvolvedor interessado nessa série de tutoriais deve ter os seguintes skills (habilidades):

  • Familiar com alguma linguagem de programação orientada a objeto.
  • Familiar com conceitos de desenvolvimento Web (HTML, CSS, JavaScript).
  • Familiar com conceitos relacionais da base de dados.
  • Familiar com conceitos de arquitetura em camadas.

1.4 Características da Aplicação

As características do ASP.NET Web Forms apresentadas nesta série inclui:

  • O Web Application Project (não Web Site Project)
  • Web Forms
  • Master Pages, configuração
  • Bootstrap
  • Entity Framework Code First, LocalDB
  • Request Validation
  • Data Controls fortemente tipados, Model Binding, Data Annotations, e Value Providers
  • OAuth e OpenID
  • ASP.NET Identity, Configuração e Autorização
  • Unobtrusive Validation (Validação Discreta)
  • Routing
  • ASP.NET Error Handling

1.5 Cenários de Aplicação e Tarefas

Tarefas demonstradas nessa série inclui:

  • Criando, revisando e rodando o novo projeto.
  • Criando a estrutura da base de dados.
  • Inicializando e povoando a base de dados.
  • Customizando User Interface usando estilos, gráficos e master page.
  • Adicionando páginas e navegação.
  • Exibindo detalhes do menu e dados do produto.
  • Criando um carrinho de compras.
  • Adicionando suporte OpenID.
  • Adicionando método de pagamento.
  • Incluindo uma regra de administrador e um usuário a aplicação.
  • Restringindo acesso a páginas e pastas específicas.
  • Carregando um arquivo para a aplicação web.
  • Implementando validação de input (entrada).
  • Registrando rotas para a aplicação web.
  • Implementando error handling e error logging.

2 Visão Geral

Se você é novo com ASP.NET Web Forms mas tem familiaridade com conceitos de programação, você está no tutorial correto. Se você já é familiarizado com ASP.NET Web Forms, você pode se beneficiar através desta série de tutoriais das novas características do ASP.NET 4.5. Se você não possui familiaridade com conceitos de programação e ASP.NET Web Forms, veja Getting Started no ASP.NET Web Site.

As últimas características especificadas fornecidas nessa série de tutoriais incluem o seguinte:

  • Uma simples interface de usuário para criar projetos que oferecem suporte para múltiplos ASP.NET frameworks (Web Forms, MVC e Web API).
  • Boostrap, um layout e framework para tema que fornece design responsivo e capacidades de tema.
  • ASP.NET Identity, um novo sistema de ASP.NET membership que trabalha da mesma forma em todos frameworks ASP.NET e trabalha com web hosting exceto IIS.
  • Entity Framework 6, uma atualização do Entity Framework que permite que você recupere e manipule dados como objetos fortemente tipados, acesso a dados assíncronos, manipular falhas de conexão transitórios, e log de SQL.

2.1 A Aplicação Wingtip Toys

Os screenshots a seguir fornecem uma rápida visão da aplicação em ASP.NET Web forms que você criará nesta série de tutoriais. Quando você executa a aplicação no Visual Studio Express 2013 para Web, você verá a Home Page a seguir.

Wingtip Toys [1]

Você pode se registrar como um novo usuário, ou logar como um usuário existente. A navegação é fornecida no topo para cada categoria de produto recuperando os produtos disponíveis da base de dados.

Selecionando o link Products (Produtos), você será capaz de ver uma lista de produtos disponíveis.

Wingtip Toys [2]

Você pode também ver detalhes dos produtos individuais selecionando qualquer um dos produtos listados.

Wingtip Toys [3]

Como um usuário, você pode registrar e fazer login utilizando funcionalidades padrões do modelo de Web Forms. Também, esse tutorial explica como fazer login usando uma conta do Gmail existente. Adicionalmente, você pode fazer login como administrador para adicionar e remover produtos da base de dados.

Wingtip Toys [4]

Uma vez que você esteja logado, você pode adicionar produtos ao carrinho de compras e pagar com PayPal. Note que essa aplicação é desenvolvida para funcionar com PayPal sandbox. Nenhuma transação atual com dinheiro terá lugar.

Wingtip Toys [5]

PayPal confirmará sua conta, encomenda, e informação de pagamento.

Wingtip Toys [6]

Depois de retornar do PayPal, você pode revisar e completar sua encomenda.

Wingtip Toys [7]

3 Pré-requisitos

Antes de começar, certifique-se de que você tenha os seguintes softwares instalados no seu computador:

  • Microsoft Visual Studio 2013 ou Microsoft Visual Studio Express 2013 para Web. O .NET Framework é instalado automaticamente.

Esta série de tutoriais utiliza Microsoft Visual Studio 2013 para Web. Você pode também utilizar Microsoft Visual Studio 2013 Express para Web ou Microsoft Visual Studio 2013 para completar a série de tutoriais.

4 Download da Aplicação

Depois de instalar os pré-requisitos, você está pronto para começar a criar o novo projeto Web que é apresentado nesta série de tutoriais. Se você quer executar a amostra da aplicação que esse tutorial cria, você poderá fazer download do site MSDN Samples. Esse download contém:

  • A Amostra da Aplicação na pasta Wingtip Toys.
  • Os recursos usados para criar a amostra da aplicação na pasta WingtipToys-Assets na pasta WingtipToys.

4.1 Faça o download do arquivo no site do MSDN Samples

Getting Started with ASP.NET 4.5 Web Forms and Visual Studio 2013 – Wingtip Toys (C#)

O download é um arquivo .zip. Para ver o projeto completo que essa série de tutoriais cria, encontre e selecione a pasta C# no arquivo .zip. Salve a pasta C# para a pasta que você usará para trabalhar com projetos do Visual Studio 2013. Por padrão, os projetos do Visual Studio 2013 se localizam na seguinte pasta:

C:\Users\\Documents\Visual Studio 2013\Projects

Renomeie a pasta C# para WingtipToys.

Para executar o projeto completo, abra a pasta WingtipToys e dê um duplo-clique no arquivo WingtipToys.sln. Visual Studio 2013 abrirá o projeto. Depois, dê um clique com o botão direito no arquivo Default.aspx na janela da Solution Explorer e clique em View In Browser no menu mostrado após o clique com o botão direito.


O conteúdo desta página resulta da tradução do artigo Getting Started with ASP.NET 4.5 Web Forms – Introduction and Overview, escrito pelo autor Erik Reitan, originalmente presente no site do asp.net. A página correspondente pode ser conferida aqui.

C# – Classes

As classes representam a personalidade da orientação a objetos, ou seja, sem elas não existiriam objetos. Com as classes, criamos entidades as quais serão instanciadas; chamamos de objetos as instâncias das classes. Elas contém membros e, a partir do conjunto deles, é formada a interface da classe. Uma classe tem como objetivo principal encapsular membros do tipo dado (como constantes e campos) e também do tipo comportamento (métodos, propriedades, indexers, eventos, operadores, construtores de instância, construtores estáticos e destrutores), além de suportar tipos aninhados. Também suporta herança, tanto de implementação quanto de interfaces.

A definição da classe é feita a partir do comando class, seguida do nome da classe e de seu código entre blocos {}.

class MinhaPrimeiraClasse
{ 
}

A instância de uma classe, ou a criação de um objeto, é feita com o operador new.

MinhaPrimeiraClasse c = new MinhaPrimeiraClasse();

Uma classe pode ter o seguinte conteúdo:

class ConteudoDaClasse
{
	//Para orientação a objetos
	campos
	constantes
	métodos
	construtores
	destrutores
	
	//Para orientação a componentes
	propriedades
	eventos
	
	//Para outros propósitos
	indexers
	sobrecarga de operadores
	tipos aninhados (classes, interfaces, estruturas, enumerações e delegates)
}

Abaixo tem-se a declaração de uma classe e seus itens, precedida das explicações:

[atributos]1 [modificador]2 [modificador de acesso]3 classNome4 : [base]5 {…6} [;]7

  1. Os atributos são opcionais e representam declarações informativas.

  2. O modificador é opcional e influencia o versionamento, o instanciamento e a herança da classe, respectivamente:
    a. new – sobrepõe uma classe base.
    b. abstract – não pode ser instanciado, apenas herdado.
    c. sealed – não pode ser herdado, apenas instanciado.

  3. O modificador de acesso é opcional e influência na visualização ou acessibilidade da classe:
    a. public – acesso, interno e externo, permitido sem restrições.
    b. protected – acesso interno (válido apenas na declaração de uma classe aninhada).
    c. private – acesso restrito (válido apenas na declaração de uma classe aninhada).
    d. internal – acesso permitido somente dentro do assembly.
    e. protected internal – acesso permitido dentro ou for a do assembly por classes derivadas.

  4. O nome da classe.

  5. A lista com a classe base (herança de implementação) e/ou as interfaces (herança de interfaces), as quais serão herdadas pela classe. Esta lista é separada por vírgulas.

  6. Os membros da classe são private se não especificados. Eles podem ser:
    a. Membros tipo dado – mantêm o estado da classe.
    b. Membros tipo função – executam operações.
    c. Tipos aninhados – tipicamente enumerações, delegates e classes.

  7. O finalizador.

As classes representam a principal característica da orientação a objetos. A partir delas, são criados os objetos, que residem na memória e são gerenciados pelo garbage collector.

Referências Bibliográficas:

ALBAHARI, Joseph; ALBAHARI, Ben. C# 3.0: Guia de Bolso. Rio de Janeiro: Alta Books, 2008.
GALUPPO, Fabio; MATHEUS, Vanclei; SANTOS, Wallace. Desenvolvendo com C#. Porto Alegre: Bookman, 2004.

C# – Namespaces

Em C#, um namespace é um mecanismo de controle da visibilidade de nomes dentro de um programa. Ele agrupa classes e tipos por semântica e é declarado com a palavra-chave namespace. O exemplo abaixo ilustra a criação de um agrupamento de classes utilizando um namespace.

namespace MinhaEmpresa
{
    public class Cliente
    {
        public string Nome;
        public string Telefone;
    }

    public class Fornecedor
    {
        public string Contato;
        public string Telefone;
    }
}

Para instanciar a classe Cliente, é necessário usar seu nome completo:

MinhaEmpresa.Cliente cliente = new MinhaEmpresa.Cliente();

No contexto de utilização de um namespace, a diretiva using tem o papel de simplificar o uso desses agrupamentos, seja encurtando o caminho para eles ou estabelecendo um alias, ou seja, importa um namespace.

Por exemplo, para instanciar uma classe Queue do .NET Framework, a qual representa uma fila, é necessário chama-la pelo seu nome completo, System.Collections.Queue. A diretiva using colocada no início do programa simplifica a forma de uso da classe. Uma ou mais diretivas podem ser colocadas no início do programa.

using System;
using System.Collections;

public class Fila
{
    public static void Main()
    {
        Queue fila = new Queue(5);

        //int
        fila.Enqueue(1);    
        //string
        fila.Enqueue("2");
        //char
        fila.Enqueue('3');
        //long
        fila.Enqueue(4L);
        //double
        fila.Enqueue(5F);

        Console.WriteLine("Esta fila possui {0} elementos", fila.Count);

        for (int a=0, 1=fila.Count; a < 1; ++a)
        {
            Console.WriteLine(fila.Dequeue().ToString());
        }
    }
}

O programa acima poderia ser escrito sem a utilização da diretiva using; porém, onde existem as classes Queue e Console, estas deveriam ser renomeadas para System.Collections.Queue e System.Console, respectivamente. A diretiva using elimina certas redundâncias, como a necessidade de usar o nome completo.

Nos namespaces aninhados, todos os nomes apresentados em namespaces externos são importados implicitamente para os namespaces internos. No exemplo abaixo, os nomes Middle e Class1 são importados implicitamente para Inner:

namespace Outer
{
    namespace Middle
    {
        class Class1 { }

        namespace Inner
        {
            class Class2 : Class1 { }
        }
    }
}

O namespace mais interno é chamado de inner namespace, e o mais externo é chamado de outer namespace.

Outra forma de escrever um namespace é simplificar o namespace aninhado para torna-lo longo. Isso é feito utilizando-se o operador ponto (.) para separar os nomes que comportarão o namespace.

namespace Terra.AmericaDoSul.Brasil.SaoPaulo
{
    class MinhaClasse { }
}

Para acessar a classe MinhaClasse, referencie o nome completo ou utilize a diretiva using para facilitar o acesso.

Terra.AmericaDoSul.Brasil.SaoPaulo.MinhaClasse classe;

Os namespaces longos e aninhados podem ser combinados.

Importar um namespace pode resultar em um choque com o nome de tipo. Em vez de importar o namespace inteiro, você pode importar apenas os tipos específicos de que necessita, atribuindo um alias (apelidos) a cada tipo. Por exemplo:

using PropertyInfo2 = System.Reflection.PropertyInfo;

class Program 
{
    PropertyInfo2 p;
}

Um namespace extenso pode ter um alias caractere, conforme abaixo:

using R = System.Reflection;

class Program
{
    R.PropertyInfo p;
}

Concluindo:

  • O namespace é um recurso que permite a organização por semântica e, se aplicado corretamente, evita a colisão de nomes.
  • Um namespace pode ser encontrado na forma simples, aninhado ou longo.
  • O principal objetivo de um namespace é criar um nome global único que o diferencie dos demais.
  • A diretiva using é usada em conjunto com um namespace para encurtar o caminho até os tipos contidos nele. Com using, é permitido a criação de alias.
  • Os namespaces podem ser agrupados e ter sua origem em diversos códigos, bibliotecas e módulos.

Referências Bibliográficas:

ALBAHARI, Joseph; ALBAHARI, Ben. C# 3.0: Guia de Bolso. Rio de Janeiro: Alta Books, 2008.
GALUPPO, Fabio; MATHEUS, Vanclei; SANTOS, Wallace. Desenvolvendo com C#. Porto Alegre: Bookman, 2004.

Estrutura de um Programa em C#

C# é uma linguagem de programação orientada a objetos de uso geral e com segurança de tipos, cujo objetivo é a produtividade do programador. Para este fim, a linguagem equaciona simplicidade, expressividade e desempenho.

Abaixo, temos o esquema de um programa em C#, apresentando alguns dos seus elementos mais comuns:


//Estrutura do programa C#

//Usando um namespace
using System;

//Namespace
namespace MeuNamespace                                      
{
    //Classe
    public class MinhaAplicacao                               
    {
        //Comentários de linhas múltiplas
        /*Este programa                                     
         exibe no prompt
         um cálculo de soma*/

        static void Main(string[] args)
        //Início de bloco
        {
            MinhaClasse m = new MinhaClasse();
            Console.WriteLine(m.Soma(100, 10));
        //Fim de bloco
        }

        //Comentário XML
        ///<summary>        
        ///Minha Classe Math                               
        ///</summary>

        public class MinhaClasse
        {
            //Método
            public int Soma(int a, int b) {return a + b;}   
        }
    }
}

A estrutura de um programa em C# pode ser dividida em um ou mais arquivos contendo os seguintes elementos:

  • Namespaces;
  • Tipos (classes, estruturas, interfaces, delegações, enums);
  • Membros (constantes, campos, métodos, propriedades, indexadores, eventos, operadores, construtores);
  • Outros (declarações, comentários, instruções).

No decorrer das semanas, postarei como cada elemento citado acima funciona num programa desenvolvido em C#.

Referências Bibliográficas:

ALBAHARI, Joseph; ALBAHARI, Ben. C# 3.0: Guia de Bolso. Rio de Janeiro: Alta Books, 2008.
GALUPPO, Fabio; MATHEUS, Vanclei; SANTOS, Wallace. Desenvolvendo com C#. Porto Alegre: Bookman, 2004.

SystemOteca – Parte 8: Conexão Banco de Dados e C#

Agora, faremos a conexão do banco de dados entre Access e C#.

Abra o Formulário Principal do SystemOteca e crie um novo botão na ToolStrip para o Formulário de Cadastro de Editora.

Figura 1 – Formulário Principal

Criado esse novo botão, vamos vincular o código já adicionado no menu Cadastros/ Editora a esse botão. Para isso, em Properties clique em Events e na opção Click escolha editorasToolStripMenuItem_Click. Assim, estaremos vinculando um código ao outro e evitando sua redundância.

Agora sim, vamos para uma parte mais importante que é a conexão do banco de dados, lembrando que já havíamos criado o BDSystem com algumas tabelas que serão utilizadas no sistema.

Para isso, abra a Solution Explorer e arraste o BDSystem em cima da solução SystemOteca. A partir desse momento, algumas configurações serão pedidas.

Clique em DataSet e Next.

Figura 2 – Criando DataSet

Marque todas as tabelas. Deixe o nome do DataSet como BDSystemDataSet e Finish.

Figura 3 – DataBase Objects

Veja que, na Solution Explorer, foi criado um BDSystemDataSet.xsd que são os arquivos onde ficam armazenadas todas as informações do meu banco.

Veja também que, no Data Source, todas as tabelas foram criadas com seus respectivos campos.

Figura 4 – Data Sources

Abra o formulário de Cadastro de Editora e vamos adicionar os componentes da tabela Editora para o mesmo.

No DataSource podemos escolher se queremos os campos num formato de Grid ou em Details. Marque a opção Details e arraste a tabela Editora para dentro do formulário de Cadastro de Editora.

Figura 5 – Data Sources (Details)

Quando os campos da tabela Editora forem criados no formulário, alguns componentes são criados automaticamente, como:

– bDSystemDataSet
O DataSet representa dados em um cache de memória.

– editoraBindingSource

O componente BindingSource oferece a maneira mais simples e fácil de navegar através de registros em uma fonte de dados; ele foi criado justamente para simplificar o processo de vinculação com os controles relacionados a uma fonte de dados.

– editoraTableAdapter

Os TableAdapters fornecem a comunicação entre o seu aplicativo e um banco de dados, ou seja, se conecta a um banco de dados, executa consultas ou procedimentos armazenados, e retorna uma nova tabela de dados preenchida com os dados retornados ou preenche um DataTable existente com os dados retornados. São usados, também, para enviar dados atualizados do seu aplicativo de volta para o banco de dados.

-tableAdapterManager

O TableAdapterManager é um componente que fornece a funcionalidade para salvar dados em tabelas de dados relacionados. Ele usa os relacionamentos de chave externa que relacionam tabelas de dados para determinar a ordem correta para enviar as inserções, atualizações e exclusões de um conjunto de dados para o banco de dados sem violar as restrições de chave externa no banco de dados.

– editoraBindingNavigator

O controle BindingNavigator representa uma forma padronizada para navegar e manipular dados em um formulário. Na maioria dos casos, um BindingNavigator combinado com um BindingSource percorre os registros de dados em um formulário e interage com eles.

Ajuste os componentes do formulário de Cadastro de Editora da maneira que você achar melhor. E, não esqueça de mudar a propriedade Text dos campos.

Vídeo:
Aula 9 – Conexão Banco de Dados: C# e Access

Andrielle Azevedo de Paula