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