簡體   English   中英

將巨大的xml參數傳遞給存儲過程的最佳方法

[英]Best way to pass a huge xml parameter to stored procedure

實際上,我試圖將一個巨大的Xml傳遞給我的存儲過程,但是我總是遇到of memory exception不足of memory exception ,這是因為我試圖傳遞一個限制大小為2G的string 那么如何去做這樣的事情。

不要使用XmlDocument將源文件完全加載到內存中所需的內存量大約是源文檔的10倍。

如果需要在將文檔傳遞給SQL之前進行操作,請使用XmlReaderXmlWriterXDocument 之所以可以使用它們,是因為它們將進行流處理(尤其是XmlReader / XmlWriter,它們已針對XML數據的正向讀取進行了大量優化),而不是嘗試一次全部加載整個文檔及其DOM(例如XmlDocument)。

從文件加載格式正確的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());
});

您是否嘗試過使用StringBuilder 參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM