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 :
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) TryobjConexao.Open() Catch ex As ExceptionMsgBox(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 DataTabletblClientes = dsTeste.Tables("Clientes") ' Obtem um novo objeto DataRow do DataTable Dim drAtual As DataRowdrAtual = 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.RowstblClientes.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) TryobjConexao.Open() Catch ex As ExceptionMsgBox(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 DataRowdrAtual = 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.RowstblClientes.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