Copiando dados entre Tabelas em um DataSet


 

Neste artigo vou mostrar como copiar dados (objetos DataRow) entre duas tabelas em um objeto DataSet usando os métodos Clone e ImportRow  do objeto DataTable.

 

Antes de usar o método ImportRow , para copiar os dados da tabela fonte para a tabela destino ,  você precisa ter certeza de que a tabela destino tenha a mesma estrutura da tabela fonte.  O método Clone da classe DataTable copia a estrutura de uma tabela , incluindo esquemas , relacionamentos , etc. e retorna  um novo DataTable com a mesma estrutura da tabela fonte.

 

Como exemplo vou mostrar como copiar 5 linhas da tabela Produtos do banco de dados Northwind.mdb usando o método ImportRow.

a - Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)

  1. Project Types : Visual Basic Projects
  2. Templates : Windows Application
  3. Name : TableCopia
  4. Location : c:\vbnet \tableCopia

No formulário padrão insira dois controles ListBox : ListBox1 e ListBox2 , dois controles Label e um botão de comando : Button1.  Veja o formulário abaixo:

No evento Click do botão de comando Button insira o código abaixo :

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

 

Dim ds As DataSet = New DataSet()

Dim tblProdutos As DataTable

Dim tblProdutosCopia As DataTable

Dim tblProdutosContador As Integer

Dim tblProdutosCopiaContador As Integer

Dim i As Integer

Dim strSql As String

 

'define a string de conexão com o banco de dados Northwind.mdb e define o comando Select

Dim strConnection As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\teste\Northwind.mdb"

Dim cn As OleDbConnection = New OleDbConnection(strConnection)

strSql = " Select * from produtos"

Dim da As OleDbDataAdapter = New OleDbDataAdapter(strSql, cn)

cn.Open()

 

da.Fill(ds, "Produtos")

 

'define o DataTable e o número de linhas da tabela

tblProdutos = ds.Tables("Produtos")

tblProdutosContador = tblProdutos.Rows.Count

 

' Exibe o número de linhas no ListBox1

ListBox1.Items.Add("A tabela Produtos tem " & tblProdutosContador.ToString & " linhas ")

 

' exibe as primeiras cinco linhas da tabela Produtos

For i = 0 To 4

   ListBox1.Items.Add(" linha (" & i.ToString & ") = " & tblProdutos.Rows(i)(1))

Next

 

' copia a estrutura da tabela Produtos

tblProdutosCopia = tblProdutos.Clone

' Usando o método ImporRow copia as primeiras cinco linhas da tabela Produtos

For i = 0 To 4

  tblProdutosCopia.ImportRow(tblProdutos.Rows(i))

Next

 

'obtem o número de linhas da tabela Copia

tblProdutosCopiaContador = tblProdutosCopia.Rows.Count

ListBox2.Items.Add("A tabela Cópia de Produtos tem " & tblProdutosCopiaContador.ToString & " linhas ")

 

'Exibe no ListBox2 as 5 linhas copiadas

For i = 0 To tblProdutosCopiaContador - 1

   ListBox2.Items.Add(" linha (" & i.ToString & ") = " & tblProdutosCopia.Rows(i)(1))

Next

End Sub

 

Após executar o projeto o resultado será exibido conforme tela abaixo :

 

 

Para copiar a tabela  inteira podemos usar o método Copy do objeto DataTable.  No nosso exemplo basta substituir o método ImportRow pelo método Copy conforme abaixo :

 

For i = 0 To 4

  tblProdutosCopia.ImportRow(tblProdutos.Rows(i))

Next

Cópia a tabela inteira:

     tblProdutosCopia = tblProdutos.Copy

 

Substituindo o código da esquerda pelo da direita teremos todas as linhas da tabela copiada.

 

Até mais ver  em um novo artigo sobre VB.NET.

 


José Carlos Macoratti