У меня есть требование, где я должен сохранить набор данных, в котором есть несколько таблиц, в столбце 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