XML in SQL Server importieren mit LINQ

Written on January 29, 2008

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:

        Alexander Zeitler
        http://blog.alexonasp.net/
        http://blog.alexonasp.net/Rss.aspx
        RSS

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 ;-)