[XML/SQL/C#] XML via korste weg importen in db

Pagina: 1
Acties:

  • PKP B-Man
  • Registratie: November 2002
  • Laatst online: 19-07-2023
Ik ben aan een tijdje opzoek naar een manier om XML gegevens te importeren in een SQL (MSDE) database via C#. Nu heb ik wel een aantal methoden gevonden die zouden moeten werken, maar iets zegt mij dat dezen onnodig moeilijk zijn.

Wat mij namelijk erg dwars zit is dat ik met dit commando:
code:
1
SELECT * FROM <table> FOR XML AUTO, ELEMENTS
heel erg makkelijk database gegevens kan omzetten naar XML. Maar ik kan nergens vinden of dit ook omgekeerd kan, terwijl mij persoonlijk dit wel zo logisch lijkt.

Nu heb ik wel een ander artikel wat ook volgens een redelijk simpele en snelle manier is: klik Maar hierbij weet ik niet hoe ik SQLXMLBulkLoad kan gebruiken in C# (ipv VB dus).

Alvast bedankt!

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:17
In .NET heb je een DataSet class. Een dataset heeft een member method 'ReadXml'.
Die method zal je xml file inlezen in je dataset, en dan kan je die gegevens gaan wegschrijven in je DB.

Indien dit niet lukt bij jou, omdat er bv. mapping naar verschillende tables moet gebeuren, dan kan je natuurlijk met een XmlReader ofzo aan de slag gaan, waarmee je lijn per lijn records gaat inserten ofzo.

https://fgheysels.github.io/


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Ik denk idd zoals whoami al zegt dat je gewoon met een XmlReader aan de slag moet.

Ik zie hier verder niet echt een anderen kant er klaren oplossen.

  • PKP B-Man
  • Registratie: November 2002
  • Laatst online: 19-07-2023
Ik ben nu met die XMLReader aan de gang (xmltextreader eigenlijk) en dat lukt best aardig, alleen kan ik niet echt vinden hoe ik de inhoud van een specifiek element kan inlezen... ik heb bijvoorbeeld:

code:
1
2
3
4
5
6
7
8
9
10
11
12
<bla>
  <blabla>
     <element1> </element1>
     <element2> </element2>
     <element3> </element3>
  </blabla>
  <blabla>
     <element1> </element1>
     <element2> </element2>
     <element3> </element3>
  </blabla>
</bla>
Hoe krijg ik dan de inhoud van de eerste blabla (element1+2+3) zonder dat ik problemen krijg dat ik de elementen van de andere blabla uitlees?
Is daar een functie voor? Of moet ik die zelf schrijven?
Alvast bedankt!

Verwijderd

Misschien offtopic, maar interessant leesvoer ivm. XML & relationale dbases/SQL: http://www.research.ibm.com/journal/sj/414/funderburk.pdf.

Hetgeen wat jij wilt doen (XML->SQL) staat achteraan beschreven!

  • PKP B-Man
  • Registratie: November 2002
  • Laatst online: 19-07-2023
Ik heb wat aan het werk gekregen:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
XmlTextWriter w = new XmlTextWriter(@"c:\filename.xml",null);
w.WriteStartDocument();

w.WriteStartElement("x","");
 w.WriteStartElement("y");
 w.WriteString("bla");
 w.WriteEndElement();
w.WriteEndElement();
w.WriteEndDocument();
w.Close();

XmlReader r = new XmlTextReader(@"c:\filename.xml");
r.ReadStartElement("x");
 r.ReadStartElement("y");
 MessageBox.Show(r.ReadString());
 r.ReadEndElement();
r.ReadEndElement();
r.Close();


Welke de volgende xml-file produceerd en weer uitleest:
XML:
1
<?xml version="1.0"?><x><y>bla</y></x>


Weet niet of het de beste methode is of niet, maar het werkt :7
Pagina: 1