Atualizando um banco de dados via objeto DataSet

A esta altura você já deve estar sabendo que o objeto DataSet tem um papel muito importando no acesso a dados no .NET framework,  através dele temos em memória objetos que podem gerenciar tabelas , visões e relacionamentos. Se você quer saber mais sobre o assunto leia os artigos abaixo :

  1. VB.NET - Como usar objetos DataSet ?
  2. VB.NET - Como usar objetos DataSet II ?
  3. VB.NET - DataReader ou DataSet ? eis a questão !!!
  4. VB.NET - ADO.NET - uma visão geral IV : Objeto DataSet.
  5. ADO .NET - O acesso aos Dados.

Vou mostrar como usar um objeto DataSet com dados carregados de um banco de dados , modificar os dados e então enviar os dados de volta ao banco dados a fim de atualizar a fonte original de dados. Vamos arregaçar as mangas...

Nota: Você pode usar o objeto Command para inserir , atualizar  e excluir dados no banco de dados diretamente.

- Abra o Visual Studio e crie um novo projeto Visual Basic ; template - Windows Application

- Faça referência no seu projeto aos namespaces : System , System.Data e System.Data.SqlClient usando a declaração Imports:

Imports System
Imports System.Data
Imports System.Data.SqlClient

primeiro vamos carregar o DataSet com dados de uma tabela de um banco de dados; você já deve ter desconfiado que vamos acessar uma base de dados SQL Server. (Estamos usando o namespace - System.Data.SqlClient ).

A string de conexão usada aponta para o banco de dados Teste no meu computador local . A estrutura da tabela com os dados é mostrada abaixo:

- A string de conexão com o banco de dados é a seguinte:

strConexao = "server=(local);Trusted_Connection=yes;database=Teste"

 

O código do projeto é dado abaixo :

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim strConexao As String

strConexao = "server=(local);Trusted_Connection=yes;database=Teste"

Dim objConexao As New SqlConnection(strConexao)

Try

     objConexao.Open()

Catch ex As Exception

    MsgBox(ex.GetBaseException)

End Try

 

' Cria uma instância do objeto DataAdapter.

Dim daClientes As New SqlDataAdapter("Select * From Clientes", objConexao)

' Cria uma instância de um DataSet, e retorna dados da tabela clientes

Dim dsTeste As New DataSet("Clientes")

daClientes.FillSchema(dsTeste, SchemaType.Source, "Clientes")

daClientes.Fill(dsTeste, "Clientes")

'--inserindo o registro no DataSet----------------------------------------------------------

MsgBox("Agora vou inserir um registro no DataSet", MsgBoxStyle.Information, "Inserir Registro")

Dim tblClientes As DataTable

tblClientes = dsTeste.Tables("Clientes")

' Obtem um novo objeto DataRow do DataTable

Dim drAtual As DataRow

drAtual = tblClientes.NewRow()

'' Define os novos valores de DataRow

drAtual("Codigo") = 7

drAtual("Nome") = "Testolina Testa"

drAtual("Endereco") = "Rua Moscou , 109"

' Insere o novo objeto via método Add da coleção DataTable.Rows

tblClientes.Rows.Add(drAtual)

MsgBox("Registro incluído com sucesso na tabela Clientes.", MsgBoxStyle.Information, "Incluindo dados no DataSet")

'---------codigo para alterar os dados inseridos ----------------------------------------------

MsgBox("Vou alterar o atual no DataSet", MsgBoxStyle.Information, "Alterar Registro")

drAtual.BeginEdit()

drAtual("nome") = "Yuri Gagarin"

drAtual("endereco") = "R Lua Nova , 230"

drAtual.EndEdit()

MsgBox("Registro alterado com sucesso !", MsgBoxStyle.Information, "Alterando dados no DataSet")

'-----------atualiza a tabela clientes do banco de dados Teste no SQL Server

'Atualiza o SQL Server

Dim objCommandBuilder As New SqlCommandBuilder(daClientes)

daClientes.Update(dsTeste, "Clientes")

MsgBox("A operações feitas no DataSet irão atualizar o SQL Server !" & Chr(13) & Chr(13) & " Verifique os dados no Servidor", MsgBoxStyle.Exclamation, "Atualização SQL Server")

'exibe os dados do DataSet

DataGrid1.DataSource = dsTeste

End Sub

End Class

 

Vamos explicar o código com mais detalhes:

Dim strConexao As String

strConexao = "server=(local);Trusted_Connection=yes;database=Teste"

Dim objConexao As New SqlConnection(strConexao)

Try

     objConexao.Open()

Catch ex As Exception

    MsgBox(ex.GetBaseException)

End Try

-  define a string de conexão e cria uma conexão com o banco de dados Teste no SQL Server

Dim dsTeste As New DataSet("Clientes")

daClientes.FillSchema(dsTeste, SchemaType.Source, "Clientes")

daClientes.Fill(dsTeste, "Clientes")

- Cria uma instância de um DataSet, e retorna dados da tabela clientes do banco de dados Teste

Dim tblClientes As DataTable

tblClientes = dsTeste.Tables("Clientes")

' Obtem um novo objeto DataRow do DataTable

Dim drAtual As DataRow

drAtual = tblClientes.NewRow()

'' Define os novos valores de DataRow

drAtual("Codigo") = 6

drAtual("Nome") = "Testolina Testa"

drAtual("Endereco") = "Rua Moscou , 109"

' Insere o novo objeto via método Add da coleção DataTable.Rows

tblClientes.Rows.Add(drAtual)

- Definimos um objeto DataTable

- Obtemos um objeto DataRow do Datatable

- Criamos uma nova linha e atribuímos os novos valores aos campos da tabela

- A nova linha é incluída via método Add na tabela

drAtual.BeginEdit()

drAtual("nome") = "Yuri Gagarin"

drAtual("endereco") = "R Lua Nova , 230"

drAtual.EndEdit()

- Efetuamos a alteração do registro atual atribuindo novos valores para ele.

Dim objCommandBuilder As New SqlCommandBuilder(daClientes)

daClientes.Update(dsTeste, "Clientes")

MsgBox("A operações feitas no DataSet irão atualizar o SQL Server !" & Chr(13) & Chr(13) & " Verifique os dados no Servidor", MsgBoxStyle.Exclamation, "Atualização SQL Server")

- Criamos o objeto objCommandBuilder e usando o método Update enviamos os dados para serem alterados no servidor.

'exibe os dados do DataSet

DataGrid1.DataSource = dsTeste

- exibe os dados do DataSet no DataGrid.

Para atualizar o banco de dados original com todas as alterações passamos o DataSet via método Update do objeto DataAdapter. Antes de fazer isto é preciso definir as propriedades InsertCommand, UpdateCommand, e DeleteCommand do objeto DataAdapter. Você pode fazer isto manualmente escrevendo código SQL para definir estas propriedades ou podemos fazer com que o VS.NET faça isto para você automaticamente.

Para gerar os comandos requeridos precisamos criar uma instância do objeto SqlCommandBuilder e usar o objeto DataAdapter no construtor. Foi o que fizemos no código acima. Para que isto seja possível você precisa ter a informações disponíveis sobre a chave primária da tabela. Para obter estas informações usamos método FillSchema e definimos a propriedade MissingSchemaAction do DataAdapter para AddWithKey.

No exemplo acima abrimos uma tabela de um banco de dados no SQL Server , incluimos um novo registro e a seguir alteramos o registro inserido. Se você encerrar a aplicação neste ponto e abrir a tabela no SQL Server vai perceber que nada nela mudou, é por isto que usamos o método Update para atualizar os dados no banco de dados original.

No final exibimos os dados em um DataGrid , estes dados já refletem a atualização no banco de dados do Servidor

.

Esta é apenas uma das maneiras de atualizar os dados usando o objeto DataSet .  Até o próximo artigo VB .NET ...


José Carlos Macoratti