Merge von zwei Datasets

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Merge von zwei Datasets

    Hallo Freunde,

    Ich stehe vor folgendem Problem, ich habe zwei Datensets (einmal ein Return aus einer Stored Procedure (MSSQL) und einmal eingelesen aus einem XLS File)

    Struktur DS1 (variiert von den COLx her):

    COL1|COL2|COL3|recipVoice1
    Meier|Karl|Musterstr. 12|1
    Huber|Karl|Musterstr. 12|2
    Ganger|Karl|Musterstr. 12|3

    Struktur DS2 (statisch):

    RES1|RES2|recipVoice1
    2020|not found|1
    2030|not valid|2
    2020|not found|3

    So, soweit so gut, was ich nun gerne möchte ist das er mir für die jeweilige recipVoice1 in DS1 die Daten aus DS2 hinten anfügt so daß es anschließend (in DS1 oder einer neuen DS3) so aussieht:


    COL1|COL2|COL3|recipVoice1|RES1|RES2
    Meier|Karl|Musterstr. 12|1|2020|not found
    Huber|Karl|Musterstr. 12|2|2030|not valid
    Ganger|Karl|Musterstr. 12|3|2020|not found

    Wie kann ich das bewerkstelligen? Der gemeinsame Nenner ist RecipVoice1, ginge das dann mit Merge? Als ich mich zuletzt daran versucht habe hat er mir die Daten dann "unten" angefügt, also quasi an DS1 am Ende DS2 angehängt, leider habe ich diesen Code nimmer :(

    DS1/DS2 hat variable Größen von 10.000 - 50.000 Datensätzen, daher wäre es natürlich klasse wenn man ohne foreach/while/if auskommen würde da es ansonsten wahrscheinlich sehr lange dauert, richtig?

    Bin für eure Hilfe dankbar!

    Gruß,
    Matthias
    Das Leben ist binär - du bist eine 1, oder eine 0
  • Hi Vince,

    Ich möchte es mit einer Windows Form machen, in c sharp. Derzeit hole ich von einer MS SQL Stored Procedure die Daten für DS2 ab. und die Daten für DS1 kommen per OpenFileDialog aus einer Excel 2007 Datei. Ich habe also an meinem Ende zwei Datensets, und einen Unique Identifier (recipVoice1 (int der hochzählt, das ist dann sowohl in der Rückgabe als auch im XLS File vorhanden)). Was mir fehlt ist eine Funktion die hergeht und folgendes tut:

    DS2 => RecipVoice1 sucht gleichen RecipVoice1-Wert aus DS1 => wenn gefunden, kopiere komplette Zeile aus DS1 in ein neues Datenset (DS3) und füge am Ende die Werte aus DS2 hinzu.

    So, das wäre dann irendeine foreach/while/if Schleife nehme ich an, das wird aber bei 20.000-30.000 Zeilen ewig dauern, daher wäre mir ein schnellerer Weg natürlich weitaus lieber :)

    Danke,
    Matze
    Das Leben ist binär - du bist eine 1, oder eine 0
  • Hi,

    ja, das könnte in der Tat etwas Länger dauern.
    Ich würde dir vorschlagen das mit deiner Datenbank zu lösen, da diese für solche Operationen optimiert ist. Einfach die Daten aus deinem Excel 2007 Result in eine Datenbanktabelle schreiben und dann joinen.

    Da du mit Excel und MSSQL beides MS Produkte im Einsatz hast, wird der Import auch nicht schwierig sein. Ich kann mir auch vorstellen, dass es einen Wizard gibt, mit dem du aus der Exceltabelle gleich eine Tabelle erstellen kannst.
  • Hi Vince,

    Leider ist die Datenbank nicht direkt meine, Sie ist in meinem Netzwerk, ich "darf" aber nur die Stored-Procedures nutzen, nun könnte ich natürlich hergehen und meine eigene Datenbank aufsetzen, dort den Teil der aus der SP zurückkommt zusammen mit dem XLS das der Benutzer hochlädt rein-pasten, dort verarbeiten, wieder abfragen und daraus ein neues DS erstellen, aber das ist ja nicht der Sinn der Sache. Ich habe ja eigentlich alles was ich brauche, ich muss es nur vernünftig zusammenbringen, dafür muss es doch innerhalb von C-Sharp eine vernünftige Lösung geben.

    Keiner eine Idee?

    Gruß,
    Matze
    Das Leben ist binär - du bist eine 1, oder eine 0
  • Hi,

    ich habe das Thema mal in den C#/.NET Bereich rübergezogen.

    Wenn eine externe DB, verständlicherweise, dir zu viel overhead produziert, kannst du alternativ auch ein Programm mit einer embedded DB schreiben oder ACCESS benutzen.

    Ja, das sind wieder 2 Datenbanklösungen ;) ... aber das einzige was mir zu C# (oder auch anderen Sprachen) einfällt ist, die Daten mit Schleifen abzuarbeiten. Das ist sehr uneffektiv und benötigt sehr viel Zeit/Ressourcen.
    Es kommt natürlich auf die Maschine an, aber im Normalfall ist ein Join mit diesen Datenmengen innerhalb von wenigen (Milli-)Sekunden abgearbeitet. Ich behaupte, dass die C#-Lösung (auch mit mehreren Threads) mehrere Minuten benötigt.


    Wenn du jetzt immer noch sagst, dass dir die DB Lösung garnicht gefällt, dann kannst du dir mal Binärbäume/Binäre Suchbäume angucken (wahrschl. wird es schon eine fertige Implementierung für C# geben).

    edit:
    Der Artikel bezieht sich nicht auf C#, aber grade die Theorie ist sehr gut geschrieben: c-plusplus.de/forum/183441