在ADO.NET中使用SQLXML,谁需要处理?

时间:2012-01-03 16:24:58

标签: sql-server xml ado.net sqlxml

我找不到这个问题的记录答案。 如果我使用SqlXml对象将xml传递给StoredProc,谁负责处理我正在创建的XmlTextReader?

从我到目前为止发现的,构造函数已经创建了我传入的xml的副本,所以我猜我可以在创建SqlXml对象后立即处理读取器。但这只是一个猜测,因为我不知道读者是否会被ado.net使用。

TIA 马丁

1 个答案:

答案 0 :(得分:2)

你的假设是正确的。 SqlXml的构造函数将XmlReader的内容存储在内存流中。它不包含对传入的XmlReader的引用。

反编译的SqlXml构造函数:

public SqlXml(XmlReader value)
{
    if (value == null)
    {
        this.SetNull();
        return;
    }
    this.m_fNotNull = true;
    this.firstCreateReader = true;
    this.m_stream = this.CreateMemoryStreamFromXmlReader(value);
}

因此,你应该处理XmlTextReader或等到它得到GC。前者通常是首选,因为它更惯用。