none
XML-Datei in SQL-Datenbank importieren

    Question

  • Hallo,

    Ich habe hier eine kleine Datenbank auf Basis von SQL Server compact (da auch auf CE Terminal zu verwenden) und bekomme jetzt Daten (Einzeltabellen) aus einem Fremd-Programm in XML-Format ohne Schema-Header. Die Tabellen entsprechen fast genau meinen SQL-Server Tabellen, aber teilweise sind die Spalten-Namen etwas anders und Spalten könnten auch gänzlich fehlen, falls davon alle Werte unbelegt sind.

    Die Tabellen aus dem SQL-Server liegen in einem DataSet vor. Wie bekomme ich jetzt am Besten die XML-Tabellendaten dazu (und so, dass ich sie danach auf den SQL-Server speichern kann)?

    Gruß,

    WiWo

    Monday, August 20, 2012 11:47 AM

Answers

  • Die einfachste Lösung ist ReadXml. Das setzt aber voraus, dass die XML-Datei eine passende Struktur aufweist:

        Dim filename = "c:\temp\x.xml"
        Dim ds As New DataSet
        ds.ReadXml(fileName)
    Peter
    Wednesday, September 19, 2012 4:10 PM
  • Hallo Peter,

    ich hab inzwischen eine etwas aufwendigere aber dafür sehr saubere Lösung gefunden:

    Ich hab eine eine von DataTable geerbte Basis-Klasse gebaut, die für mich die SQL-Server Tabellen erzeugt, die dann (leer) einliest um die Typisierung zu machen, dann die zugehörige (schemalose) XML-Datei einliest und schließlich wieder in den SQL-Server speichert. Die einzelnen Instanzen unterscheiden sich dann jeweils nur im "Create Table"-String und im XML-Dateinamen.

    Gruß,

    WiWo

    Thursday, September 27, 2012 4:58 PM

All replies

  • Du kannst die XML-Daten z.B. in eine csv-Datei transformieren (mit XSLT) und dann die csv-Datei mit der Jet in das DataSet einlesen. Dabei kannst Du das gesamte Namen-Mapping recht einfach integrieren.
     
    Es gibt aber auch noch viele andere Wege.
     
    --
    Viele Gruesse
    Peter
    Monday, August 20, 2012 7:29 PM
  • Hallo Peter,

    so einen Umweg wollte ich nicht gehen. Eigentlich hoffe ich ja, dass in den vielen XML-bezogenen Methoden schon etwas halbwegs passendes zu finden ist; bislang ist es mir aber nicht gelungen. Ich bin allerdings auch noch VS-Anfänger; zuvor hab ich mit Visual-Foxpro gearbeitet und da ist das mit wenigen Programmzeilen zu lösen.

    Das Importieren von Fremddaten ist ja auch eine ziemlich häufige Anforderung. Ich werd aber wohl nicht drum herum kommen, eine Klasse zum XML-Import per XmlTextReader zu basteln, obwohl ich mir vorstellen kann, dass das tausende schon vor mir besser gelöst haben.

    Aber vielleicht hat hier ja noch jemand einen guten Tipp..

    Gruß,

    Winfried

    Tuesday, August 21, 2012 8:49 AM
  • Die einfachste Lösung ist ReadXml. Das setzt aber voraus, dass die XML-Datei eine passende Struktur aufweist:

        Dim filename = "c:\temp\x.xml"
        Dim ds As New DataSet
        ds.ReadXml(fileName)
    Peter
    Wednesday, September 19, 2012 4:10 PM
  • Hallo Peter,

    ich hab inzwischen eine etwas aufwendigere aber dafür sehr saubere Lösung gefunden:

    Ich hab eine eine von DataTable geerbte Basis-Klasse gebaut, die für mich die SQL-Server Tabellen erzeugt, die dann (leer) einliest um die Typisierung zu machen, dann die zugehörige (schemalose) XML-Datei einliest und schließlich wieder in den SQL-Server speichert. Die einzelnen Instanzen unterscheiden sich dann jeweils nur im "Create Table"-String und im XML-Dateinamen.

    Gruß,

    WiWo

    Thursday, September 27, 2012 4:58 PM