ADO.NET -
Copiando registros entre tabelas
Não temos um objeto Recordset no ADO.NET , o seu equivalente é o objeto Datatable; ele é o objeto usado quando desejamos realizar operações com registros. Um objeto DataTable representa uma tabela de dados em memória.
Para copiar registros entre tabelas diferentes podemos usar o método ImportRow() do objeto DataTable para copiar objetos DataRow de um DataTable para o outro.
Neste artigo eu vou mostrar 3 maneiras de fazer a copia de registros entre DataTable.
Um objeto DataTable pode armazenar mais ou menos 16.000.000 de linhas. Abaixo temos as propriedades usadas nestes são :
- Rows : representa uma coleção de objetos DataRow, também conhecida como DataRowCollection e representa as linhas da tabela (registros)
- Select : Retorna um array de objetos DataRow
- ImportRow - Copia objetos DataRow em um DataTable preservendo as propriedades de configuração e os valores originais
- DefaultView - retorna um objeto DataView para o DataTable.
O método ImportRow() requer que ambas as tabelas , a origem e a destino, tenham a mesma estrutura. O método clone utilizado cria uma tabela com estrutura idêntica.
Podemos também usar o método Copy do objeto DataTable para criar uma nova DataTable com a mesma estrutura e dados da original. A seguir um trecho de código que mostra isto:
Dim dtOrigem As DataTable = New DataTable ("Origem")
...
da.Fill(dtOrigem)
Dim dtDestino As DataTable = New DataTable ("Destino")
dtDestino = dtOrigem.Copy()
...
|
Como exemplo vou usar o banco de dados Northwind.mdb (o nosso saco de pancadas) e copiar registros da tabela Orders.
Inicie um novo projeto no VS.NET e no formulário padrão insira os seguintes controles (conforme figura):
![]() |
- O primeiro
radioButton - copia as 3 primeiras linhas da tabela orders - O segundo radioButton - Faz a seleção dos registros com OrderID < 10300 - O terceiro radioButton - Faz um filtro e seleciona os registros entre OrderID > 10300 e OrderID < 10400 |
Inclua os seguintes imports no início do formulário:
Imports System
Imports System.Data
Imports System.Data.Oledb
agora inclua as definições de variáveis no início da classe:
' nome da tabela
Private ORDERS_TABLE As String = "Orders"
' nome do campo
Private ORDERID_FIELD As String = "OrderID"
'string SQL para selecionar dados da tabela
Private ORDER_SELECT As String = "SELECT * FROM Orders"
No evento Click do botão de comando insira o código abaixo:
Private Sub btnCopiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCopiar.Click Dim strConexao As String = System.Configuration.ConfigurationSettings.AppSettings("acessoBD")
' preenche a tabela origem com o esquema e os dados
Dim da As New OleDbDataAdapter(ORDER_SELECT, strConexao)
Dim dt As New DataTable(ORDERS_TABLE)
Try
da.FillSchema(dt, SchemaType.Source)
da.Fill(dt)
Catch ex As Exception
MsgBox(ex.Message & vbCrLf & ex.StackTrace)
End Try
' faz um clone do esquema para a tabela copia criando uma tabela com a mesma estrutura
Dim dtCopia As DataTable = dt.Clone()
If rdbrow.Checked Then
' usa o método ImportRow para importar as primeiras 3 linhas
Dim i As Integer
For i = 0 To n
dtCopia.ImportRow(dt.Rows(i))
Next i
Else
If rdbselect.Checked Then
' faz a copia usando o resultado de um comando SELECT
Dim row As DataRow
For Each row In dt.Select((ORDERID_FIELD & " <= 10300"))
dtCopia.ImportRow(row)
Next row
Else
If rdbdataview.Checked Then
' faz a copia usando o resultado de um dataview filtrado
Dim categoryView As DataView = dt.DefaultView
categoryView.RowFilter = ORDERID_FIELD & " >= 10300 AND " & ORDERID_FIELD & " < 10400"
Dim i As Integer
For i = 0 To categoryView.Count - 1
dtCopia.ImportRow(categoryView(i).Row)
Next i
End If
End If
End If
' vincula a view default da tabela copia para o datagrid
DataGrid1.DataSource = dtCopia.DefaultView
End Sub
|
Na linha de código
Dim strConexao As String = System.Configuration.ConfigurationSettings.AppSettings("acessoBD")
estou lendo a string de conexão do arquivo de configuração da aplicação. (Leia o artigo : Tratando arquivos de configuração para saber mais)
Para esta aplicação o arquivo de configuração tem o seguinte conteúdo:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="acessoBD" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\teste\Northwind.mdb" />
</appSettings>
</configuration>
|
Abaixo a tela do resultado da execução para a segunda opção :

Até o próximo artigo VB.NET
![]()
José Carlos Macoratti