Tabellen kopieren



  • Hallo,

    ich habe von Datenquell A eine Tablle eingelesen (DataTable).
    Diese Tabelle will ich unverändert nach Datenquelle B schreiben.

    Momentan gehe ich so, dass ich die Tabelle Zeile für Zeile und Spalte für Spalte kopiere. Das ist natürlich sehr langsam.

    Ideal wäre es, wenn sich der RowState einer Zeile auf "Added" setzen ließe, da ich dann nur "Update" vom SqlDataAdapter aufrufen müßte um die Tabelle nach Datenquelle B zu schreiben ( natürlich müsste man die Tabelle vorher mit "Copy"(Member von DataTable) kopieren ).

    Leider ist der RowState readonly, so dass das nicht funktioniert.
    Kennt jemand eine schnellere Methode eine Tabelle zu kopieren ?

    Gruß



  • Ich habe mal ein kleines Beispiel vorbereitet. Schau es dir mal an.
    Ich oberen Teil wird eine Tabelle erzeugt, mit Daten gefüllt und einem DataSet zugeordent. Der DataSet wird in einer XML-Datei gespeichert.

    Danach erzeuge ich einen neuen DataSet und hänge eine neue Tabelle in den DataSet. In diese neue Tabelle kopiere ich die Daten und die Struktur aus der ersten Tabelle und speichere den zweiten DataSet als XML-Datei. Danach existieren zwei XML-Dateien mit gleichem Inhalt.

    Nach der Kopie muss noch AcceptChanges aufgerufen werden!

    Hier nun der Code:

    using System;

    using System.Data;

    namespace DataTableCopy

    {

    /// <summary>
    
    /// Zusammendfassende Beschreibung für CMain.
    
    /// </summary>
    
    class CMain
    
    {
    
        /// <summary>
    
        /// Der Haupteinstiegspunkt für die Anwendung.
    
        /// </summary>
    
        static void Main()
    
        {
    
            DataTable tblPersonen = new DataTable("Person");
    
            DataColumn colData = new DataColumn();
    
            colData.ColumnName = "PersonenID";
    
            colData.DataType = Type.GetType("System.Int32");
    
            colData.ColumnMapping = MappingType.Attribute;
    
            colData.AutoIncrement = true;
    
            colData.AllowDBNull = false;
    
            colData.Unique = true;
    
            tblPersonen.Columns.Add(colData);
    
            colData = new DataColumn("Vorname");
    
            tblPersonen.Columns.Add(colData);
    
            colData = new DataColumn("Nachname");
    
            tblPersonen.Columns.Add(colData);
    
            colData = new DataColumn("Email");
    
            tblPersonen.Columns.Add(colData);
    
            // Primärschlüsselliste erstellen
    
            // Im Beispiel wird nur ein Element verwendet
    
            DataColumn[] colayPrimaryKey = new DataColumn[1];
    
            colayPrimaryKey[0] = tblPersonen.Columns["PersonenID"];
    
            // Primärschlüsselliste an Tabelle übergeben
    
            tblPersonen.PrimaryKey = colayPrimaryKey;
    
            int id = 1;
    
            tblPersonen.Rows.Add(new object[] {id, "Donald", "Duck", "donald@duck.com"});
    
            id++;
    
            tblPersonen.Rows.Add(new object[] {id, "Dagobert", "Duck", "dagobert@duck.com"});
    
            id++;
    
            tblPersonen.Rows.Add(new object[] {id, "Daisy", "Duck", "daisy@duck.com"});
    
            tblPersonen.AcceptChanges();
    
            DataSet ds1 = new DataSet("Personen");
    
            ds1.Tables.Add(tblPersonen);
    
            ds1.WriteXml("Personen.xml");
    
            DataTable tblPersonenII = new DataTable("PersonII");
    
            DataSet ds2 = new DataSet("PersonenII");
    
            ds2.Tables.Add(tblPersonenII);
    
            tblPersonenII = tblPersonen.Copy();
    
            tblPersonen.AcceptChanges();
    
            ds1.WriteXml("PersonenII.xml");
    
            Console.WriteLine("Fertig!");
    
            Console.ReadLine();
    
        }
    
    }
    

    }[/code]



  • @Happy Builder,

    danke, habe aber mittlerweile festgestellt, dass das Problem nicht an meinem Programm liegt, sondern dass der der DB-Server bremmst ( momentan mein Arbeitsrechner ).
    Trotzdem danke für die Informationen

    Gruß


Anmelden zum Antworten