sábado, 5 de março de 2011

C# - Usando LINQ to SQL (o retorno)

Este artigo mostra como usar os recursos do LINQ to SQL em uma aplicação Windows Forms. Ele foi baseado no artigo de autoria de Scott Lysle.

Embora o Entity Framework tenha chegado para praticamente substituir o LINQ to SQL com muitas vantagens, o LINQ to SQL ainda pode ser considerado com uma alternativa viável para agilizar o desenvolvimento de aplicações com acesso a dados.

O objetivo do artigo é mostrar como acessar tabelas, consultas e stored procedures de um banco de dados SQL Server (o LINQ to SQL só funciona com ele) e também como realizar operações de alteração, inclusão e exclusão de dados.

Para o exemplo do artigo eu vou usar o banco de dados Northwind.mdf e a ferramenta Visual C# 2008 Express Edition.

A estrutura do banco de dados Northwind.mdf, exibindo suas tabelas, Views e Stored Procedures é exibida na figura abaixo:

Vamos criar uma aplicação Windows Forms e exibir contendo três formulários:

  • form1.cs - Onde iremos exibir as tabelas, consultas e stored procedures em um componente DataGridView;
  • form2.cs - Onde iremos incluir/alterar um cliente;
  • form3.cs - Onde iremos excluir um cliente.

01. O formulário form1.cs irá exibir o resultado das consultas às tabelas, querys e stored procedures em um controle DataGridView e deverá possuir um menu criado via controle MenuStrip conforme o leiaute abaixo:

Para cada item do menu vamos definir sub-itens conforme as figuras a seguir:

a. Consultas

b. Movimento

02. O formulário form2.cs é exibido na figura abaixo e apresenta os controles Label e TextBox para realizar a alteração/inclusão na tabela Customer:

03. O formulário form3.cs, da figura abaixo, é usado para excluir um registro da tabela Customer e possui o controle Label, TextBox e Button:

Criando o DataContext e as classes com o código LINQ to SQL

Agora vamos criar a infraestrutura usando classes onde devemos criar o código usando LINQ to SQL. Antes, devemos realizar o mapeamento objeto relacional para gerar as classes a partir das tabelas do Northwind.

No menu Project -> Add New Item , selecione o template LINQ to SQL Classes, informe o nome Northwind.dbml e clique em Add.

A seguir, arraste e solte, a partir da janela DataBase Explorer, as tabelas do Northwind para o descritor LINQ, a fim de gerar as classes com o mapeamento ORM. Devemos arrastar também as stored procedures Sales_by_Year e Ten_Most_Expensive_Products na painel de métodos do descritor, conforme a figura abaixo:

Com isso já temos todo o mapeamento objeto relacional gerado e já podemos trabalhar com as classes que representam as tabelas do nosso banco de dados.

Para isso eu poderia criar uma classe e nela definir os métodos para acessar as tabelas, consultas e stored procedures, e os métodos para realizar alteração e inclusão, mas vou fazer diferente: vou criar classes distintas para cada item. Assim, teremos as seguintes classes:

  • acessoLinqTabelas.cs

    - contém os métodos LINQ para acessar as tabelas retornando todos os dados da tabela. Irei retornar os dados para as seguintes tabelas: Customers,Employees, Orders, Categories e Products;

  • acessoLinqConsultas.cs - contém os métodos LINQ para acessar as consultas: Orders by ID, Orders and Details e Employees by ID;
  • acessoLinqStoreProcedure.cs - contém os métodos para acessar as stored procedures: Sales by Year, Ten Most Expensive Products;
  • acessoLinqCrud.cs - contém os métodos para realizar as operações de incluir, alterar e excluir registros da tabela Customers.

01. Criando a classe para acessar as tabelas

Vamos iniciar, então, criando a classe para acessar as tabelas selecionando no menu Project -> Add Class e informando o nome acessoLinqTabelas.cs;

A seguir, defina o código abaixo na classe:

using System;
using System.Collections.Generic;
using
System.Linq;
using System.Text;

namespace LinqToSQL_Cshp1
{

class acessoLinqTabelas
{
///

/// Obtem dados da tabela Customer
///
summary> obtem; <> return
}

///
/// Obtem dados da tabela
Employee
///
///

public static
System.Data.Linq.Table GetEmployeeTable()
{

NorthwindDataContext dc = new

NorthwindDataContext();
return dc.GetTable< return

}
///
/// Obtem dados da
tabela Order
///
///

public static
System.Data.Linq.Table GetOrderTable()
{

NorthwindDataContext dc = new

NorthwindDataContext();
return dc.GetTable< return

}
///
/// Obtem dados da
tabela Category
///
///

public static
System.Data.Linq.Table GetCategoryTable()
{

NorthwindDataContext dc = new

NorthwindDataContext();
return dc.GetTable< return

}
///
/// Obtem dados da
tabela Product
///
///

public static
System.Data.Linq.Table GetProductTable()
{

NorthwindDataContext dc = new

NorthwindDataContext();
return dc.GetTable< return

}
}
}

0 comentários:

Postar um comentário

 
Design by Eddy Oliveira