[C#] xml in SQL importieren

ademo

Mitglied
Hallo zusammen

Ich möchte gerne eine xml datei auf meiner Webseite in meine SQL Datenbank importieren. Da ich noch nicht so viel Erfahrung hab mit C# weiss nicht genau wie ich das anstellen soll.


Ich hoffe das mir da jemand weiter helfen kann.

lg ademo

was ich gerne machen würde:

1. Button mit welchem der Import gestartet werden soll
2. XML Datei: Bezug.xml
ca 20'000 Einträge pro Jahr kommen ca 2000-4000 neue dazu.

Auszug aus der xml Datei:
Code:
<root>
    <IDs ID ='1'>
        <IstNR">55400</IstNR>
        <BezugNR>38000</BezugNR>
    </IDs>
    <IDs ID="2">
      <IstNR>10005</IstNR>
      <BezugNR>45750</BezugNR>
    </IDs>
</root>

3. sql Tabelle

Tabelle: CoNummerAbgleich

Spalten: CoNummer < --- IstNR
wieCoNummer <--- BezugNR
 
Hi und herzlich Willkommen auf tutorials.de

Du könntest deine Xml-Datei in ein DataSet einlesen und dieses dann in die Tabelle in die Datenbank übertragen.
Alternative:
Via XmlDocument oder XmlReader einlesen und die Daten dann "von Hand" mit Hilfe SqlCommand usw. in die Datenbank schreiben
 
hallo Nico

ich habe die tage ein wenig im google gesucht aber leider keine gute anleitung gefunden nur Anlehnungen wie es so ungefähr funktionieren soll. ich glaub das mit dem xmlReader und sql comand würde sehr viel zeit in Anspruch nehmen.
Ich glaube eine Effiziente Lösung wäre "BULK INSERT" aber bis jetzt bin ich noch nicht genau gestiegen wie das geht.
Hast du die Methode mit DataSet schon mal verwendet um eine xml datei in sql zu importieren? könntest du mir eventuell sagen wie ich das machen müsste?

lg ademo
 
ich habe nun eine Lösung gefunden die funktioniert.Es geht auch sehr schnell hab mal einen test mit 10'000 Einträgen gemacht das ging ca 5sec.
jedoch hab ich nun noch das Problem das ich einen Fehlermeldung bekomme wen die Daten schon in der Datenbank sind.



"Violation of PRIMARY KEY constraint 'PK_CoNummerAbgleich'. Cannot insert duplicate key in object 'dbo.CoNummerAbgleich'.
The statement has been terminated."

wie kann ich die verhindern?


was ich bis jetzt hab:

Bezug.xml

Code:
<?xml version='1.0' encoding='iso-8859-1'?>
<root>
    <Element>
        <IstNR>99500</IstNR>
        <BezugNR>98500</BezugNR>
    </Element>
    <Element>
      <IstNR>105500</IstNR>
      <BezugNR>104500</BezugNR>
    </Element>
</root>

+

XMLtoSQL.dbml

+

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Linq;

public partial class Import : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {

        XDocument xml = XDocument.Load("\\Users\\Chihyu\\Projekte\\spy-glass_1_0\\Bezug.xml");
        XMLtoSQLDataContext db = new XMLtoSQLDataContext();

        var xmlbloggers = from b in xml.Descendants("Element")
                          orderby b.Element("IstNR").Value ascending
                          select new CoNummerAbgleich
                          {
                              CoNummer = b.Element("IstNR").Value,
                              wieCoNummer = b.Element("BezugNR").Value,
                              
                          };

        db.CoNummerAbgleich.InsertAllOnSubmit(xmlbloggers);
        db.SubmitChanges();  
    }
}
 
Zurück