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.)
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.ClickDim 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