【发布时间】:2011-02-09 13:49:56
【问题描述】:
我有一个要求,我必须通过转换为 XML 来将包含多个表的数据集保存在 sql 表 XML 列中。
问题是在某些情况下数据集变得非常庞大,我得到了 OutOfMemoryException。
我基本上所做的是将数据集转换为 xml 文件并将其保存在本地磁盘中,然后再次加载 XML 并将其作为存储过程参数发送。但是当我将数据集 xml 写入磁盘时,文件大小超过 700 Mb,当我将它加载到内存中的 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
【问题讨论】:
-
向我们展示将文件保存到数据库中的代码。
-
我已经添加了代码。
标签: xml sql-server-2005 dataset