 VB
2008 - Criando uma aplicação completa com LINQ To SQL III
VB
2008 - Criando uma aplicação completa com LINQ To SQL III
Na primeira parte do artigo - VB 2008 - Criando uma aplicação completa com LINQ To SQL - I - definimos nosso objetivo e preparamos todo o ambiente criando as stored procedures e efetuando o mapeamento objeto relacional via LINQ To SQL.
Na segunda parte do artigo - VB 2008 - Criando uma aplicação completa com LINQ To SQL - II - criamos a camada de negócio contendo os métodos que serão usados na aplicação para manter a tabela Shippers.
Agora só falta criar a camada de interface , que no nosso caso será uma aplicação Windows, que será responsável pela interação com o usuário.
Vou criar uma interface bem simples para que fique bem claro a utilização do mapeamento O/R feito pelo LINQ To SQL. A interface da nossa aplicação será composta de 5 relatórios conforme a seguir:
O formulário Principal
|  | - Componentes usados no formulário - DataGridView1 - Button1(Add), Button2(Update), Button3(Delete), ..., Button6(Exit) | 
Código do formulário - frmMain.vb
- declaração de variáveis que serão usadas para capturar os dados do DataGridView
Public
idShippers As Integer- Código do evento Load do formulário
| Private Sub 
    Form1_Load_1(ByVal sender 
    As System.Object, ByVal e
    As System.EventArgs) 
    Handles MyBase.Load showshippers() End Sub | 
O evento Load chama a rotina showshippers() que é usada para exibir todos os dados da tabela Shippers. Veja a seguir o código desta rotina:
| Private
    Sub showshippers() DataGridView1.DataSource = BAL.ListShippers() End Sub | 
A rotina showshippers() usa o método ListShippers() da nossa camada de negócios (BAL). Apenas para você lembrar veja abaixo o código usado para definir esta função:
| Public Shared Function ListShippers() Dim db As New ShippersDataContext Dim shippers = From s In db.ListShippers Return shippers.ToList End Function | 
Vejamos a seguir o código de cada um dos botões de comando do formulário:
| Private 
    Sub Button1_Click(ByVal 
    sender As 
    System.Object, ByVal 
    e As System.EventArgs)
    Handles 
    Button1.Click
    My.Forms.frmAdd.ShowDialog() showshippers() End Sub | 
 | ||
| Botão Add | |||
| Private 
    Sub Button2_Click(ByVal 
    sender As 
    System.Object, ByVal 
    e As System.EventArgs)
    Handles 
    Button2.Click
    If nameCompany = 
    String.Empty 
    And phoneCompany =
    String.Empty
    Then MsgBox("Select a Grid row to update") Else My.Forms.frmUpdate.ShowDialog() showshippers() End If End Sub | 
 | ||
| Botão Update | |||
| PrivateSub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click If nameCompany = String.Empty And phoneCompany = String.Empty Then MsgBox("Select a grid row to delete.") Else My.Forms.frmDelete.ShowDialog() showshippers()End If End Sub 
 | 
 | ||
| Botão Delete | 
 | ||
| Private 
    Sub Button4_Click(ByVal 
    sender As 
    System.Object, ByVal 
    e As System.EventArgs)
    Handles 
    Button4.Click
    
    My.Forms.frmSearch.ShowDialog()
    
    End 
    Sub 
 | 
 | ||
| Botão Search | 
 | ||
| PrivateSub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click If (MsgBox("Are your Sure ? ", MsgBoxStyle.YesNo) = MsgBoxResult.Yes) Then Me.Close() End If End Sub 
 | 
 | ||
| Botão Exit | 
 | ||
| PrivateSub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click showshippers()End Sub 
 | 
 | ||
| Botão All | 
Uma rotina muito importante usada no sistema é a que seleciona o nome da empresa (nameCompany) e fone da empresa (phoneCompany) quando o usuário seleciona uma linha do DataGridView.
A rotina ocorre quando uma célula do Grid é clicada, neste momento selecionamos os valores dos campos
| Private
    Sub 
    DataGridView1_CellClick(ByVal 
    sender As 
    Object, 
    ByVal e 
    As System.Windows.Forms.DataGridViewCellEventArgs)
    Handles 
    DataGridView1.CellClick idShippers =Me.DataGridView1.Item(0, e.RowIndex).Value.ToString() nameCompany = Me.DataGridView1.Item(1, e.RowIndex).Value.ToString() phoneCompany = Me.DataGridView1.Item(2, e.RowIndex).Value.ToString() End Sub | 
Como as variáveis nameCompany e phoneCompany foram declaradas no início do formulário são visíveis em todo o projeto. Os valores são então exibidos nos TextBox dos formulários frmUpdate e frmDelete conforme abaixo:
TextBox1.Text =
My.Forms.FrmMain.idShippersTextBox2.Text =
My.Forms.FrmMain.nameCompanyTextBox3.Text =
My.Forms.FrmMain.phoneCompanyVejamos a seguir o código de cada um dos formulários usados no sistema:
|  | PublicClass frmAdd Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click BAL.AddShippers(TextBox1.Text, TextBox2.Text)Me.Close() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() End Sub EndClass 
 | 
|  | PublicClass frmUpdate Private Sub frmUpdate_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TextBox1.Text =My.Forms.FrmMain.idShippers TextBox2.Text =My.Forms.FrmMain.nameCompany TextBox3.Text =My.Forms.FrmMain.phoneCompany End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click BAL.UpdateShippers(TextBox2.Text, TextBox3.Text, TextBox1.Text)End Sub 
 
 | 
|  | PublicClass frmDelete Private Sub frmDelete_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TextBox1.Text =My.Forms.FrmMain.idShippers TextBox2.Text =My.Forms.FrmMain.nameCompany TextBox3.Text =My.Forms.FrmMain.phoneCompany End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If (MsgBox("Are you sure ?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes) Then BAL.DeleteShippers(TextBox1.Text)End If End Sub EndClass 
 | 
|  | PublicClass frmSearch Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If txtCompanyName.Text <> String.Empty Then FrmMain.DataGridView1.DataSource = BAL.SearchShippers(txtCompanyName.Text)End If End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() End Sub EndClass 
 | 
Note que usamos os métodos criados na camada de negócio para realizar as operações :
A seguir apresento algumas telas obtidas com a execução do programa:
|  | A tela apresentando todos os registros da tabela Shippers | 
|  | A atualização de um registro, iniciando com a seleção do registro no Grid e atualização no formulário. | 
|  | A tela para selecionar determinados registros. A letra M irá selecionar todos os nomes que iniciam por M. | 
|  | A exibição dos registros selecionados e a exclusão de um registro após seleção no Grid. | 
Como você pode acompanhar desenvolvermos uma pequena aplicação com acesso a dados contendo as funcionalidades básicas com LINQ To SQL de uma forma bem simples e rápida. Perceba que você não precisou se preocupar com strings de conexão , objetos connection , command , etc.
Sabes por quê ?

Porque tudo ficou transparente graças ao mapeamento objeto relacional feito pelo LINQ To SQL.
Eu não me preocupei em realizar um tratamento de erros , nem usar outros recursos visto que o objetivo era mostrar como usar LINQ to SQL para criar uma aplicação completa com acesso a dados.
O resto agora é com você :  estude, aperfeiçoe 
e divirta-se...

| Veja os Destaques e novidades do SUPER CD VB 2012 (sempre atualizado) : clique e confira ! Quer migrar para o VB .NET ? Veja mais sistemas completos para a plataforma .NET no Super CD .NET e no Super DVD .NET , confira... Quer aprender C# ?? Chegou o 
    
    Super DVD C# 2012
    com exclusivo material de 
    suporte e vídeo aulas com curso básico sobre C# | 
Até o próximo artigo sobre LINQ.
