VB .NET - Obtendo e atualizando dados de múltiplas tabelas


No artigo de hoje vamos mostrar como obter dados e atualizar mais de uma tabela usando um único objeto SqlCommad em uma aplicação Windows Forms usando a linguagem VB .NET.

Recursos usados:

Criando o projeto no Visual Studio

Abra o VS 2012 Express for desktop e clique em New Project;

Selecione a linguagem Visual Basic e o template Windows Forms Application; informe o nome MultiplasTabelas_SqlCommand e clique em OK;

Nosso objetivo e retornar informações das tabelas Alunos e Cidades e um único objeto SqlCommand.

O banco de dados Cadastro foi gerado no SQL Server LocalDB e possui a seguinte string de conexão:

connectionString="Data Source=(LocalDB)\v11.0;Initial Catalog=Cadastro;Integrated Security=True"

Vamos armazenar esta informação no arquivo de configuração da aplicação Windows Forms que iremos criar.

Como a string de conexão esta sendo obtida a partir do arquivo de configuração App.Config vamos abrir este arquivo e incluir a informação da string de conexão do banco de dados Cadastro:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <connectionStrings>
    <add name="conString"
       connectionString="Data Source=(LocalDB)\v11.0;Initial Catalog=Cadastro;Integrated Security=True"
        providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

Para que possamos acessar essa informação temos que incluir uma referência no projeto a System.Configuration. No menu PROJECT clique em Add Reference e selecione o item System.Configuration conforme figura abaixo e clique em OK;

Agora podemos concluir o código da classe AcessoDAL criando um método para retornar os dados das tabelas Alunos e Cidades conforme o código a seguir:

Imports System.Data.SqlClient
Imports System.Configuration

Public NotInheritable Class AcessoDAL

    Private Sub New()
    End Sub

    Private Shared _sqlConnection As SqlConnection
    Private Shared _conConnectionString As String

    Public Shared Sub getConnection()
        _conConnectionString = ConfigurationManager.ConnectionStrings("conexaoSQL").ConnectionString
        Try
            _sqlConnection = New SqlConnection(_conConnectionString)
            _sqlConnection.Open()
        Catch
            Throw New Exception()
        End Try
    End Sub

    Public Shared Sub CloseConnection()
        Try
            If _sqlConnection Is Nothing Then
                _sqlConnection.Close()
            End If
        Catch
            Throw New Exception()
        End Try
    End Sub

    Public Shared Function getAtualizaDados(consultaSQL As String) As Integer
        getConnection()
        Try
            Dim cmd As New SqlCommand()
            cmd.CommandText = consultaSQL
            cmd.CommandType = CommandType.Text
            cmd.Connection = _sqlConnection
            Return cmd.ExecuteNonQuery
        Catch
            Throw New Exception()
        Finally
            If _sqlConnection.State = ConnectionState.Open Then
                CloseConnection()
            End If
        End Try
    End Function

    Public Shared Function getDadosDataSet(consulta As String) As DataSet
        getConnection()
        Try

            Dim cmd As New SqlCommand()
            cmd.CommandText = consulta

            cmd.Connection = _sqlConnection
            Dim adapter As New SqlDataAdapter()
            adapter.SelectCommand = cmd
            Dim ds As New DataSet()

            adapter.Fill(ds)
            Return ds
        Catch
            Throw New Exception()
        Finally
            If _sqlConnection.State = ConnectionState.Open Then
                CloseConnection()
            End If
        End Try
    End Function

End Class

O método getDadosDataSet() recebe uma string que representa o comando SQL que irá retornar os dados.

Basta agora definirmos a interface com o usuário usando o formulário form1.vb e incluindo no mesmo os seguintes controles:

Conforme o leiaute da figura abaixo:

No evento Click do botão - Obter Dados das tabelas - inclua o código a seguir:

    Private Sub btnGetDados_Click(sender As Object, e As EventArgs) Handles btnGetDados.Click
         SelecionaDados()     
    End Sub

Estamos chamando a rotina SelecionaDados() cujo código mostramos a seguir:

Private Sub SelecionaDados()
        Dim consultaSQL As String = "Select * from Alunos;Select * from Cidades"
        Dim ds As New DataSet
        ds = AcessoDAL.getDadosDataSet(consultaSQL)
        DataGridView1.DataSource = ds.Tables(0)
        DataGridView2.DataSource = ds.Tables(1)
    End Sub

Observe que o comando SQL define duas consultas SELECT obtendo dados de duas tabelas distintas e usando o método getDadosDataSet() da classe AcessoDAL retornamos duas tabelas preenchidas que são exibidas no controle DataGridView conforme a seguir:

Conforme esperado preenchemos cada DataGridView com informações de tabelas distintas obtidas em um único comando SQL.

Agora vamos incluir outro botão de comando no formulário form1.vb com o texto - Atualizar Dados - e nome btnAtualizaDados.

Vamos definir o código abaixo no evento Click deste botão:

 Private Sub btnAtualizaDados_Click(sender As Object, e As EventArgs) Handles btnAtualizaDados.Click

        Dim consultaSQL As String =
"Update Alunos set Nome='XXXXXX' where Id=1;Update Cidades set CidadeNome='########' where CidadeId=1"
        Dim resultado As Integer
        resultado = AcessoDAL.getAtualizaDados(consultaSQL)
        SelecionaDados()
 End Sub

Neste código estamos definindo duas consultas SQL para atualizar as tabelas Alunos e Cidades. No exemplo estou atualizando o campo Nome e CidadeNome com codigo igual a 1.

Executando o projeto e clicando no botão Atualizar Dados veremos o resultado a seguir:

Observe os registros atualizados exibidos no controle DataGridView.

Pegue o projeto completo aqui: MultiplasTabelas_SqlCommand.zip

João 7:33 Disse, pois, Jesus: Ainda um pouco de tempo estou convosco, e depois vou para aquele que me enviou.

João 7:34 Vós me buscareis, e não me achareis; e onde eu estou, vós não podeis vir.

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti