将巨大的xml参数传递给存储过程的最佳方法

时间:2015-04-08 13:34:42

标签: c# sql-server xml stored-procedures

实际上我试图将一个巨大的Xml传递给我的存储过程,但我总是得到一个of memory exception,因为我试图传递一个限制大小的string到2G。那么如何做到这一点呢。

2 个答案:

答案 0 :(得分:2)

不要使用XmlDocument - 将内存量作为源文档的10倍,将DOM完全加载到内存中。

如果您需要在将文档传递给SQL之前对文档进行操作,请使用XmlReaderXmlWriterXDocument。这些将起作用,因为它们将进行流处理(特别是XmlReader / XmlWriter,它们针对XML数据的仅向前读取进行了大量优化),而不是试图一次性加载整个文档及其DOM(如XmlDocument)。 p>

从文件中加载格式良好的XML:

command.Parameters.Add(new SqlParameter("@xmlParameterName", SqlDbType.Xml)
{
    Value = new SqlXml(XmlReader.Create("C:\\path\\to\\file.xml"));
});

从流中加载XML数据

Stream s;
// XML is in this stream
command.Parameters.Add(new SqlParameter("@xmlParameterName", SqlDbType.Xml)
{
    Value = new SqlXml(XmlReader.Create(s));
});

从XDocument加载:

XDocument xd = XDocument.Load/.Parse/etc....
command.Parameters.Add(new SqlParameter("@xmlParameterName", SqlDbType.Xml)
{
    Value = new SqlXml(xd.Root.CreateReader());
});

答案 1 :(得分:0)

你尝试过使用StringBuilder吗? reference