hallo alle zusammen,
ich habe mir vorgenommen xml dateien auszulesen um dann sie in eine sql datenbank zu schreiben. ich bin auf dem gebiet ein newbie.
hier ist der code den ich bisher geschrieben hab. der hat zwar noch ein paar kosmetische macken, aber es würde mich interessieren, ob ihr mein ansatz für richtig haltet bzw ein paar vorschläge hab was ich ändern könnte.
private void button1_Click(object sender, EventArgs e)
{
int index=0;
string datei, sqlstring1, sqlstring2, sqlbefehl, sqlstring3 = "",sqlstring4="",strtest="";
openFileDialog1.ShowDialog();
datei = this.openFileDialog1.FileName;
System.Data.DataSet set = new System.Data.DataSet();
set.ReadXml(datei);
for (int z = 0; z < set.Tables.Count; z++)
{
listBox1.Items.Add(set.Tables[z].TableName);
if (set.Tables[z].Rows.Count > 1)
{
strtest = set.Tables[z].TableName;
break;
}
}
MessageBox.Show(strtest);
System.Xml.XmlDocument xmldDoc = new System.Xml.XmlDocument();
System.Xml.XmlElement xmlElem;
System.Xml.XmlNode xmlElem2,node,node2;
System.Xml.XmlNodeList xmlNodes;
xmldDoc.Load(datei);//Laden der Datei
xmlElem = xmldDoc.DocumentElement;//Ermitteln des Root-Elements
xmlNodes = xmlElem.GetElementsByTagName(strtest);
for (int intI = 0; intI < xmlNodes.Count; intI++)
{
sqlstring1 = "";
sqlstring2 = "";
sqlstring3 = "";
sqlstring4 = "";
xmlElem2 = xmlNodes[intI];//durchsuchen der Datensätze
while (true)
{
node = xmlElem2.ChildNodes[0];
if (node.ChildNodes[0].Name == "#text")
break;
else
{
xmlElem2 = node.ChildNodes[0];
}
}
for(int ink=1;ink<xmlElem2.ChildNodes.Count;ink++)
{
if (xmlElem2.ChildNodes[ink].Name != "#text")
{
node2 = xmlElem2.ChildNodes[ink];
if (node2.ChildNodes[0].Name != "#text")
{
for (int inl = 0; inl < node2.ChildNodes.Count; inl++)
{
sqlstring3 = sqlstring3 + node2.ChildNodes[inl].Name + " ";
sqlstring4 = sqlstring4 + node2.ChildNodes[inl].InnerText + " ";
}
MessageBox.Show(sqlstring3);
MessageBox.Show(sqlstring4);
}
}
}
listBox1.Items.Add(index);
for (int intJ = 0; intJ < xmlElem2.ChildNodes.Count; intJ++)
{
listBox1.Items.Add(xmlElem2.HasChildNodes);
if (xmlElem2.ChildNodes[intJ].InnerText != null)
{
if (xmlElem2.ChildNodes.Count - intJ == 0)
{
sqlstring1 = sqlstring1 + xmlElem2.ChildNodes[intJ].Name;//Name der Spalte
sqlstring2 = sqlstring2 + "'" + xmlElem2.ChildNodes[intJ].InnerText + "'";//Werte der Spalte
}
else
{
sqlstring1 = sqlstring1 + xmlElem2.ChildNodes[intJ].Name + ",";
sqlstring2 = sqlstring2 + "'" + xmlElem2.ChildNodes[intJ].InnerText + "',";
}
}
}
sqlbefehl = "INSERT INTO Tabellenname (" + sqlstring1 + ") VALUES (" + sqlstring2+")";//nach einem schleifendurchlauf der liste werden die Daten in die Tabelle eingefügt
MessageBox.Show(sqlbefehl);
}
}