Вероятно, есть способ сделать это в LINQ в виде вставки в выбор ... из MyXLDoc, но я еще недостаточно изучил, чтобы дать вам это.
Итак, продолжаем с XmlDocument.
Создайте соединение с вашей базой данных Oracle.
Определите объект команды для соединения.
Установите SQL в
Вставить MyTable (ID, os_lev, title, parent_id, cut_url) значения (@ ID, @ os_lev, @ title, @ parentID, @ cut_url)
Теперь все, что вам нужно сделать, это перебрать xml, выкопать значения, установить соответствующий параметр и выполнить запрос.
public void SaveInDB(IdbCommand argCommand,String argFileName)
{
using(FileStream fs = new FileStream(argFileName, FileMode.Open, FileAccess.Read))
{
XmlDocument doc = new XmlDocument();
doc.Load(fs);
XmlNamespaceManager ns = new XmlNameSpaceManager(doc.NameTable);
ns.Add("os",doc.DocumentElement.NamespaceUri);
foreach(XmlNode catNode in doc.DocumentElement.SelectNodes("os:cat",ns))
{
argCommand.Parameters["ID"].Value = catNode.Attributes["id"].Value; // convert to an int?
argCommand.Parameters["os_lev"].Value = catNode.LocalName;
argCommand.Parameters["title"].Value = catNode.Attributes["name"].Value;
argCommand.Parameters["parent_id"].Value = DBnull;
argCommand.Parameters["cut_url"].Value = DBNull;
argCommand.ExecuteNonQuery();
foreach(XMlNode subcatNode in catNode.SelectNodes("os:subcat",ns)
{
SaveSubcatInDB(argCommand,subcatNode,ns);
}
}
}
}
private static void SaveSubcatInDB(IdbCommand argCommand, XmlNode argNode, XmlNameSpaceManager argNs)
{
// you get the idea.
}
NB. Нет ошибок при проверке, поэтому, если, скажем, ваш xml испорчен, а атрибуты name или id отсутствуют, или если id должен быть целым числом, а это не так, порции будут уничтожены.
Кроме того, я написал это на макушке, так что вы можете получить волнистую или две ...
И это быстрый и грязный, не элегантный и довольно многоразовый подход. Хотя это будет легко понять и отладить.
PS не забудьте менеджер пространства имен, Xpath просто не найдет ничего с префиксом, если вы не скажете ему, что к чему.