Laden...

xml -> dataset -> msssql

Erstellt von WSX vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.258 Views
W
WSX Themenstarter:in
32 Beiträge seit 2007
vor 16 Jahren
xml -> dataset -> msssql

verwendetes Datenbanksystem: ms sql server 2000

folgendes problem, entweder ist es der urlaub der mir seit 1 1/2 jahren abgeht oder das schädelweh durch die weihnachtsfeiern ...
mein problem liegt darin, bekomme von einem partner alle paar stunden statusdaten zurueck, dies wird bis zum 31.12 noch via csv weitergefuehrt, was meiner meinung nach eine releativ gute methode ist.
leider will der partner auf xml umstellen, mein wissen rund um xml hält sich leider in grenzen. besser gesagt der umgang mit dataset und dataadapter, da ich eigentlich nur connected mit der datenbank arbeite.

im vorhinein angemerkt, ich hab jetzt ne halbe stunde lang gegoogelt und finde leider nur das die fill methode zum da, bzw. die update methode, aber hier hab ich leider keine ahnung wie ich das insertcommand, falls ich hier richtig liege gestalten soll.

es geht also darum diese xml statusfiles einfach in eine tabelle in meiner datenbank abzulegen.
meine idee sah eigentlich folgend aus.
wie krieg ich den inhalt des datasets nun in eine tabelle in der datenbank?


private void read(string filename)
{
DataSet dstracking = new DataSet("collistatus");
dstracking.ReadXml(filename);
}

vielen dank im voraus.

"Arbeit ist die altmodische Form der Vermögensbildung in Arbeitnehmerhand."

Wolfram Weidner (*1925), dt. Journalist

J
3.331 Beiträge seit 2006
vor 16 Jahren

wie krieg ich den inhalt des datasets nun in eine tabelle in der datenbank?

Ganz einfach:

1. Schritt: Erstelle Dir eine xsd-Schemadatei, die den Aufbau der Datenstruktur beschreibt. Muster sind über die Forumssuche nach "xsd" zu finden, z.B. unter Fragen bzgl. XML/Dataset und Speicherung.

2. Schritt: Erzeuge eine **DataTable **und ordne ihr dieses Schema zu:

DataTable importTable = new DataTable();
importTable.ReadXmlSchema(Path.Combine(filepath, "ImportTable.xsd"));

3. Schritt: Lies die Daten dazu ein:

importTable.ReadXml(Path.Combine(filepath, "ImportTable.xml"));

Dabei sind die Namen von Dateien, Items und Feldern genau anzupassen. Aber mehr gehört wirklich nicht dazu (vorausgesetzt natürlich, die xml-Datei entspricht in ihrem Aufbau einer Tabelle).

Viel Erfolg! Jürgen

W
WSX Themenstarter:in
32 Beiträge seit 2007
vor 16 Jahren

das einzige problem dabei ist, dass der partner nicht über solch eine xsd verfügt...
ich hab mir jetzt selbst was gebastelt, funktioniert anscheinend auch recht gut, aber ist halt relativ resourcenlastig, hat wer ne andere variante als das hier?
wäre sehr sehr dankbar, funktioniert zwar aber es macht mich nervös wenn ich in hilfsvariablen speichern muss ...


public void do_job()
{
try
{
string path = "\\\\standbyserver/importPARTNER9113/";
DirectoryInfo di = new DirectoryInfo(path);
FileInfo[] rgFiles = di.GetFiles("*.xml";);
foreach (FileInfo fi in rgFiles)
{
read(fi.FullName.ToString());
//File.Delete(fi.FullName.ToString());
}
}
catch (Exception errormessage)
{
MessageBox.Show(errormessage.Message.ToString());
}
}

private void read(string filename)
{
DataSet ds = new DataSet();
ds.ReadXml(filename);

for(int i = 0; i<=ds.Tables["collistatus"].Rows.Count-1; i++)
{
string[] help = new string[8];
ds.Tables["collistatus"].Rows[i].ItemArray.CopyTo(help, 0);[/i]

ms.cm.CommandText = @"insert into ws_temp_tracking
(coll_nr,stat_date,stat_time,stat_code,stat_text,ex_orderid)
values (@collnr,@statdate,@stattime,@statcode,@stattext,@exorderid);";
ms.cm.Parameters.Clear();
ms.cm.Parameters.AddWithValue("collnr", help[0]);
ms.cm.Parameters.AddWithValue("statdate", help[1]);
ms.cm.Parameters.AddWithValue("stattime", help[2]);
ms.cm.Parameters.AddWithValue("statcode", help[3]);
ms.cm.Parameters.AddWithValue("stattext", help[4]);
ms.cm.Parameters.AddWithValue("exorderid", help[5]);
ms.open();
try
{
ms.cm.ExecuteNonQuery();
}
finally
{
ms.close();
}
}

"Arbeit ist die altmodische Form der Vermögensbildung in Arbeitnehmerhand."

Wolfram Weidner (*1925), dt. Journalist