10

を使用してXmlReader取得したものを使用していますSqlCommand.ExecuteXmlReader

これが私の入力です

このコード行を実行すると、次のようになります。

XDocument currentXDoc = XDocument.Load(ktXmlReader.ReadSubtree());

初めて動作し、期待どおりに最初のProductノードを読み取ります。

2回目に実行すると、次の例外が発生します。

System.Xml.XmlException:
Message: Unexpected end of file while parsing Name has occurred. Line 1, position 2048.

Stacktrace:    at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
   at System.Xml.XmlTextReaderImpl.ParseQName(Boolean isQName, Int32 startOffset, Int32& colonPos)
   at System.Xml.XmlTextReaderImpl.ThrowTagMismatch(NodeData startTag)
   at System.Xml.XmlTextReaderImpl.ParseEndElement()
   at System.Xml.XmlTextReaderImpl.ParseElementContent()
   at System.Xml.XmlSubtreeReader.Read()
   at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r)
   at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r, LoadOptions o)
   at System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options)

私はこの質問と私の質問に似ていることを見つけましたが、私のXMLは整形式であるとかなり確信しています(sprocを実行することで直接取得できます)

これまでの私の考え:

  1. 2048は、コンピューターでは非常に疑わしい数値です。XDocumentまたはどこかで2KBの制限に遭遇していますかXmlReader
  2. whileループのktXmlReader.Read()は、他のすべてのノードをスキップしてEOFに直接移動しています。
4

2 に答える 2

6

ここで答えを見つけました。

私の問題は、XmlReaderを取得しているときに、usingステートメントを使用してSqlConnectionを閉じていたことです。

「タワーオブパワーを使用する」に接続を追加し、それをパラメーターとして渡して、開いたままにしておくと、すべてが完全に機能しました。

于 2013-03-19T19:31:11.410 に答える
0

XmlReaderの実行は一方向の操作です。位置をリセットするか、より簡単な方法で、既存のドキュメントから新しいリーダーを作成してみてください。

于 2013-03-19T02:06:55.267 に答える