3

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

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

蒂亚·马丁

4

1 回答 1

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 处理。前者通常是首选,因为它更惯用。

于 2012-01-04T07:33:45.270 回答