Der Import von XML in eine SQL Server Tabelle ist mit Linq richtig einfach, wie ich heute feststellen durfte...

Gegeben ist ein XML-File folgender Struktur:

<?xml version="1.0" standalone="yes"?>
<bloggers>
    <blogger>
        <name>Alexander Zeitler</name>
        <blogurl>http://blog.alexonasp.net/</blogurl>
        <blogfeedurl>http://blog.alexonasp.net/Rss.aspx</blogfeedurl>
        <feedtype>RSS</feedtype>
    </blogger>
</bloggers>

Die Datenbank-Tabelle besitzt folgende Struktur:

dbtable

Das dbml-File sieht dann wie folgt aus:

dbml

Der Code für das Auslesen des XML-Files ("Bloggers.xml") und das Schreiben in die Tabelle Blogger ist dieser:

XDocument xml = XDocument.Load("Bloggers.xml");
BloggersDataContext db = new BloggersDataContext();

var xmlbloggers = from b in xml.Descendants("blogger")
                  orderby b.Element("name").Value ascending
                  select new Blogger
                  {
                      bloggername = b.Element("name").Value,
                      blogurl = b.Element("blogurl").Value,
                      blogfeedurl = b.Element("blogfeedurl").Value,
                      feedtype = b.Element("feedtype").Value,
                      guid = Guid.NewGuid()
                  };

db.Bloggers.InsertAllOnSubmit(xmlbloggers);
db.SubmitChanges();

Wie man sieht, ist nur minimal mehr Aufwand als für das reine Lesen eines XML-Files notwendig.

Konkret ist es nur die Verwendung von "new Blogger" im select-Statement, die Zuweisung der Guid sowie die Instanzierung des DB-DataContexts und der Aufruf des eigentlichen Inserts / SubmitChanges.

Getestet habe ich das Ganze übrigens mit über 20.000 Datensätzen im XML, wobei hier keinerlei Datenfehler auftauchten. Performance-Tests habe ich aus Zeitgründen nicht durchgeführt - gefühlt waren es ca. 20 Sekunden ;-)

tags: , ,