none
Merge de DataSet RRS feed

  • Pergunta

  • Olá pessoa!

    Preciso fazer o merge de um dataset "A" com outro dataset "B", gerando um novo dataset "C", mas apenas com os dados do B que NÃO contem no A.


    Seria possível isso? 

    Obrigado! 

    sexta-feira, 18 de novembro de 2011 10:50

Respostas

  • Bom dia. Os DataTables tem a mesma estrutura???

    Quando você faz o merge os linhas iguais não são duplicadas. Caso tenha uma nova linha está é inserida.

    Aqui um exemplo de merge entre 3 DataSets:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Data;
    
    namespace Console2._0
    {
        
        class Program
        {   
            static void Main(string[] args)
            {
    
                DataSet dataSetExemplo = new DataSet();
                DataTable tabelaExemplo = new DataTable();
                DataRow linha;
    
                //Criando e adicionando colunas ao DataTable
                DataColumn colunaA = new DataColumn("CODIGO_A");
                colunaA.DataType = System.Type.GetType("System.Int32");
                tabelaExemplo.Columns.Add(colunaA);
    
                DataColumn colunaB = new DataColumn("CODIGO_B");
                colunaA.DataType = System.Type.GetType("System.Int32");
                tabelaExemplo.Columns.Add(colunaB);
    
                DataColumn colunaC = new DataColumn("NOME");
                colunaA.DataType = System.Type.GetType("System.String");
                tabelaExemplo.Columns.Add(colunaC);
    
                //Criando e adicionando linhas ao DataTable
                linha = tabelaExemplo.NewRow();
                linha["CODIGO_A"] = 1;
                linha["CODIGO_B"] = 2;
                linha["NOME"] = "Paulo Viana";
                tabelaExemplo.Rows.Add(linha);
    
                linha = tabelaExemplo.NewRow();
                linha["CODIGO_A"] = 2;
                linha["CODIGO_B"] = 2;
                linha["NOME"] = "Nome linha 2";
                tabelaExemplo.Rows.Add(linha);
    
                linha = tabelaExemplo.NewRow();
                linha["CODIGO_A"] = 3;
                linha["CODIGO_B"] = 1;
                linha["NOME"] = "Nome linha 3";
                tabelaExemplo.Rows.Add(linha);
    
                dataSetExemplo.Merge(tabelaExemplo);
    
                Console.WriteLine("Quantidade de registros do DataSet 1: {0}", dataSetExemplo.Tables[0].Rows.Count);
                Console.WriteLine(" ");
                Console.WriteLine(" -   -   -   -   -   -   - ");
                DataSet dataSetExemplo2 = new DataSet();
                dataSetExemplo2.Merge(tabelaExemplo);
    
               
                Console.WriteLine("Quantidade de Tabelas do DataSet 2: {0}", dataSetExemplo2.Tables.Count);
                Console.WriteLine("Quantidade de registros do DataSet 2: {0}", dataSetExemplo2.Tables[0].Rows.Count);
                Console.WriteLine(" ");
                Console.WriteLine(" -   -   -   -   -   -   - ");
    
                DataSet dataSet3 = new DataSet();
                dataSet3.Merge(dataSetExemplo2);
    
                Console.WriteLine("Quantidade de Tabelas do DataSet 3: {0}", dataSet3.Tables.Count);
                Console.WriteLine("Quantidade de registros do DataSet 3: {0}", dataSet3.Tables[0].Rows.Count);
    
                System.Console.ReadKey();
                            
             
            }
        }
    }
    
    

    O merge só fez a carga...

    Agora inseri uma nova linha no DataSet2:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Data;
    
    namespace Console2._0
    {
        
        class Program
        {   
            static void Main(string[] args)
            {
    
                DataSet dataSetExemplo = new DataSet();
                DataTable tabelaExemplo = new DataTable();
                DataRow linha;
    
                //Criando e adicionando colunas ao DataTable
                DataColumn colunaA = new DataColumn("CODIGO_A");
                colunaA.DataType = System.Type.GetType("System.Int32");
                tabelaExemplo.Columns.Add(colunaA);
    
                DataColumn colunaB = new DataColumn("CODIGO_B");
                colunaA.DataType = System.Type.GetType("System.Int32");
                tabelaExemplo.Columns.Add(colunaB);
    
                DataColumn colunaC = new DataColumn("NOME");
                colunaA.DataType = System.Type.GetType("System.String");
                tabelaExemplo.Columns.Add(colunaC);
    
                //Criando e adicionando linhas ao DataTable
                linha = tabelaExemplo.NewRow();
                linha["CODIGO_A"] = 1;
                linha["CODIGO_B"] = 2;
                linha["NOME"] = "Paulo Viana";
                tabelaExemplo.Rows.Add(linha);
    
                linha = tabelaExemplo.NewRow();
                linha["CODIGO_A"] = 2;
                linha["CODIGO_B"] = 2;
                linha["NOME"] = "Nome linha 2";
                tabelaExemplo.Rows.Add(linha);
    
                linha = tabelaExemplo.NewRow();
                linha["CODIGO_A"] = 3;
                linha["CODIGO_B"] = 1;
                linha["NOME"] = "Nome linha 3";
                tabelaExemplo.Rows.Add(linha);
    
                dataSetExemplo.Merge(tabelaExemplo);
    
                Console.WriteLine("Quantidade de registros do DataSet 1: {0}", dataSetExemplo.Tables[0].Rows.Count);
                Console.WriteLine(" ");
                Console.WriteLine(" -   -   -   -   -   -   - ");
                DataSet dataSetExemplo2 = new DataSet();
                dataSetExemplo2.Merge(tabelaExemplo);
    
                // inserindo uma linha no DataSet 2
                linha = dataSetExemplo2.Tables[0].NewRow();
                linha["CODIGO_A"] = 3;
                linha["CODIGO_B"] = 2;
                linha["NOME"] = "Linha inserida";
                dataSetExemplo2.Tables[0].Rows.Add(linha);
                //
                Console.WriteLine("Quantidade de Tabelas do DataSet 2: {0}", dataSetExemplo2.Tables.Count);
                Console.WriteLine("Quantidade de registros do DataSet 2: {0}", dataSetExemplo2.Tables[0].Rows.Count);
                Console.WriteLine(" ");
                Console.WriteLine(" -   -   -   -   -   -   - ");
    
                DataSet dataSet3 = new DataSet();
                dataSet3.Merge(dataSetExemplo2);
    
                Console.WriteLine("Quantidade de Tabelas do DataSet 3: {0}", dataSet3.Tables.Count);
                Console.WriteLine("Quantidade de registros do DataSet 3: {0}", dataSet3.Tables[0].Rows.Count);
    
                System.Console.ReadKey();
                            
             
            }
        }
    }
    
    

    A DataSet2 e o DataSet3 foi atualizado, inserindo apenas o novo registro.

     

    O que te recomendo é clocar (.Clone > vai clonar a estrutura do objeto) e importar (ImportRow) o registro verificando se já existe o mesmo ou não no objeto.


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    sexta-feira, 18 de novembro de 2011 11:19

Todas as Respostas

  • Olá Ramiguel

    possivel é, mas o problema é saber quantas tabelas vc tem no seu DataSet, sabendo que um dataset pode armazenar centenas de tableas.

    é muito trabalhoso mas nao é impossivel.

    quantas tabelas vc tem no seu DS?

    Abraço!

     


    Herbert Agles
    Se a resposta contribuiu com a sua necessidade, não se esqueça de marcá-la, assim você beneficiará outros usuários. Sua dúvida também pode ser as de outros!
    sexta-feira, 18 de novembro de 2011 11:03
  • Olá amigo, obrigado pela resposta.

    Tenho apena uma tabela em cada dataset, e com a mesma estrutura.
    Mas com uma grande quantidade de linhas, uma media de 100mil.

    Abraços! 
    sexta-feira, 18 de novembro de 2011 11:05
  • Bom dia. Os DataTables tem a mesma estrutura???

    Quando você faz o merge os linhas iguais não são duplicadas. Caso tenha uma nova linha está é inserida.

    Aqui um exemplo de merge entre 3 DataSets:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Data;
    
    namespace Console2._0
    {
        
        class Program
        {   
            static void Main(string[] args)
            {
    
                DataSet dataSetExemplo = new DataSet();
                DataTable tabelaExemplo = new DataTable();
                DataRow linha;
    
                //Criando e adicionando colunas ao DataTable
                DataColumn colunaA = new DataColumn("CODIGO_A");
                colunaA.DataType = System.Type.GetType("System.Int32");
                tabelaExemplo.Columns.Add(colunaA);
    
                DataColumn colunaB = new DataColumn("CODIGO_B");
                colunaA.DataType = System.Type.GetType("System.Int32");
                tabelaExemplo.Columns.Add(colunaB);
    
                DataColumn colunaC = new DataColumn("NOME");
                colunaA.DataType = System.Type.GetType("System.String");
                tabelaExemplo.Columns.Add(colunaC);
    
                //Criando e adicionando linhas ao DataTable
                linha = tabelaExemplo.NewRow();
                linha["CODIGO_A"] = 1;
                linha["CODIGO_B"] = 2;
                linha["NOME"] = "Paulo Viana";
                tabelaExemplo.Rows.Add(linha);
    
                linha = tabelaExemplo.NewRow();
                linha["CODIGO_A"] = 2;
                linha["CODIGO_B"] = 2;
                linha["NOME"] = "Nome linha 2";
                tabelaExemplo.Rows.Add(linha);
    
                linha = tabelaExemplo.NewRow();
                linha["CODIGO_A"] = 3;
                linha["CODIGO_B"] = 1;
                linha["NOME"] = "Nome linha 3";
                tabelaExemplo.Rows.Add(linha);
    
                dataSetExemplo.Merge(tabelaExemplo);
    
                Console.WriteLine("Quantidade de registros do DataSet 1: {0}", dataSetExemplo.Tables[0].Rows.Count);
                Console.WriteLine(" ");
                Console.WriteLine(" -   -   -   -   -   -   - ");
                DataSet dataSetExemplo2 = new DataSet();
                dataSetExemplo2.Merge(tabelaExemplo);
    
               
                Console.WriteLine("Quantidade de Tabelas do DataSet 2: {0}", dataSetExemplo2.Tables.Count);
                Console.WriteLine("Quantidade de registros do DataSet 2: {0}", dataSetExemplo2.Tables[0].Rows.Count);
                Console.WriteLine(" ");
                Console.WriteLine(" -   -   -   -   -   -   - ");
    
                DataSet dataSet3 = new DataSet();
                dataSet3.Merge(dataSetExemplo2);
    
                Console.WriteLine("Quantidade de Tabelas do DataSet 3: {0}", dataSet3.Tables.Count);
                Console.WriteLine("Quantidade de registros do DataSet 3: {0}", dataSet3.Tables[0].Rows.Count);
    
                System.Console.ReadKey();
                            
             
            }
        }
    }
    
    

    O merge só fez a carga...

    Agora inseri uma nova linha no DataSet2:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Data;
    
    namespace Console2._0
    {
        
        class Program
        {   
            static void Main(string[] args)
            {
    
                DataSet dataSetExemplo = new DataSet();
                DataTable tabelaExemplo = new DataTable();
                DataRow linha;
    
                //Criando e adicionando colunas ao DataTable
                DataColumn colunaA = new DataColumn("CODIGO_A");
                colunaA.DataType = System.Type.GetType("System.Int32");
                tabelaExemplo.Columns.Add(colunaA);
    
                DataColumn colunaB = new DataColumn("CODIGO_B");
                colunaA.DataType = System.Type.GetType("System.Int32");
                tabelaExemplo.Columns.Add(colunaB);
    
                DataColumn colunaC = new DataColumn("NOME");
                colunaA.DataType = System.Type.GetType("System.String");
                tabelaExemplo.Columns.Add(colunaC);
    
                //Criando e adicionando linhas ao DataTable
                linha = tabelaExemplo.NewRow();
                linha["CODIGO_A"] = 1;
                linha["CODIGO_B"] = 2;
                linha["NOME"] = "Paulo Viana";
                tabelaExemplo.Rows.Add(linha);
    
                linha = tabelaExemplo.NewRow();
                linha["CODIGO_A"] = 2;
                linha["CODIGO_B"] = 2;
                linha["NOME"] = "Nome linha 2";
                tabelaExemplo.Rows.Add(linha);
    
                linha = tabelaExemplo.NewRow();
                linha["CODIGO_A"] = 3;
                linha["CODIGO_B"] = 1;
                linha["NOME"] = "Nome linha 3";
                tabelaExemplo.Rows.Add(linha);
    
                dataSetExemplo.Merge(tabelaExemplo);
    
                Console.WriteLine("Quantidade de registros do DataSet 1: {0}", dataSetExemplo.Tables[0].Rows.Count);
                Console.WriteLine(" ");
                Console.WriteLine(" -   -   -   -   -   -   - ");
                DataSet dataSetExemplo2 = new DataSet();
                dataSetExemplo2.Merge(tabelaExemplo);
    
                // inserindo uma linha no DataSet 2
                linha = dataSetExemplo2.Tables[0].NewRow();
                linha["CODIGO_A"] = 3;
                linha["CODIGO_B"] = 2;
                linha["NOME"] = "Linha inserida";
                dataSetExemplo2.Tables[0].Rows.Add(linha);
                //
                Console.WriteLine("Quantidade de Tabelas do DataSet 2: {0}", dataSetExemplo2.Tables.Count);
                Console.WriteLine("Quantidade de registros do DataSet 2: {0}", dataSetExemplo2.Tables[0].Rows.Count);
                Console.WriteLine(" ");
                Console.WriteLine(" -   -   -   -   -   -   - ");
    
                DataSet dataSet3 = new DataSet();
                dataSet3.Merge(dataSetExemplo2);
    
                Console.WriteLine("Quantidade de Tabelas do DataSet 3: {0}", dataSet3.Tables.Count);
                Console.WriteLine("Quantidade de registros do DataSet 3: {0}", dataSet3.Tables[0].Rows.Count);
    
                System.Console.ReadKey();
                            
             
            }
        }
    }
    
    

    A DataSet2 e o DataSet3 foi atualizado, inserindo apenas o novo registro.

     

    O que te recomendo é clocar (.Clone > vai clonar a estrutura do objeto) e importar (ImportRow) o registro verificando se já existe o mesmo ou não no objeto.


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    sexta-feira, 18 de novembro de 2011 11:19