【问题标题】:Saving a huge dataset into SQL table in a XML column - MS SQL, C#.Net将庞大的数据集保存到 XML 列中的 SQL 表中 - MS SQL、C#.Net
【发布时间】: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


【解决方案1】:

我们将 DataSet 划分并保存在多个 XML 列中。

【讨论】:

    【解决方案2】:

    使用 Data.DataSet.GetXML() 方法。它将返回一个巨大的字符串。

    【讨论】:

    • 字符串有大小限制。调用 DataSet.GetXML() 时会出现异常。
    • @NLV: string not 有大小限制。是什么让您认为它确实有效?
    • 对不起,我错了。当你执行 DataSet.GetXml() 时,如果数据集很大,你会得到 OutOfMemoryException。
    猜你喜欢
    • 2013-08-28
    • 2018-04-29
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多