Сохранение огромного набора данных в таблицу SQL в столбце XML - MS SQL, C # .Net - PullRequest
0 голосов
/ 19 апреля 2010

У меня есть требование, где я должен сохранить набор данных, в котором есть несколько таблиц, в столбце XML таблицы SQL путем преобразования в XML.

Проблема в том, что в некоторых случаях набор данных становится чрезвычайно огромным, и я получаю OutOfMemoryException.

Что я в основном делаю, так это то, что я преобразую набор данных в файл XML и сохраняю его на локальном диске, а затем снова загружаю XML и отправляю его как параметр хранимой процедуры. Но когда я записываю набор данных xml на диск, размер файла превышает 700 Мб, а когда я загружаю его в объект XMLDocument в памяти, я получаю OutOfMemoryException.

Как получить набор данных xml, не сохраняя его в файле и не перечитывая снова?

Код для чтения XML из набора данных

MemoryStream msXML = new MemoryStream();
MemoryStream msXMLSchema = new MemoryStream();

XmlWriter xmlWriter = XmlWriter.Create(msXML);
XmlWriter xmlSchemaWriter = XmlWriter.Create(msXMLSchema);

dsContract.WriteXml(xmlWriter);
dsContract.WriteXmlSchema(xmlSchemaWriter);

xmlWriter.WriteStartDocument();
xmlWriter.WriteEndDocument();

xmlSchemaWriter.WriteStartDocument();
xmlSchemaWriter.WriteEndDocument();

XmlReader xmlReader = XmlReader.Create(msXML);
XmlReader xmlSchemaReader = XmlReader.Create(msXMLSchema);

XmlDocument contractHistoryXMLDoc = new XmlDocument();
XmlDocument contractHistoryXMLSchemaDoc = new XmlDocument();

contractHistoryXMLDoc.Load(xmlReader);
contractHistoryXMLSchemaDoc.Load(xmlReader);

Код для сохранения XML в столбце XML

Отправка их в качестве параметров USP

param = new SqlParameter("@XmlValue", SqlDbType.Xml);
param.Direction = ParameterDirection.Input;
param.Value = new XmlNodeReader(historyXML);
sqlcom.Parameters.Add(param);
param = new SqlParameter("@xmlSchemaHistory", SqlDbType.Xml);
param.Direction = ParameterDirection.Input;
param.Value = new XmlNodeReader(historyXMLSchema);
sqlcom.Parameters.Add(param);

Спасибо

NLV

Ответы [ 2 ]

0 голосов
/ 25 мая 2010

Мы разделили DataSet и сохранили его в нескольких столбцах XML.

0 голосов
/ 15 мая 2010

Используйте метод Data.DataSet.GetXML (). Он вернет огромную строку.

...