System.Xml.XmlException: Unexpected end of file while parsing Name has occurred

Codeman picture Codeman · Mar 19, 2013 · Viewed 22.2k times · Source

I'm using an XmlReader retrieved using SqlCommand.ExecuteXmlReader.

Here is my input

When I run this line of code:

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

it works the first time, reading in the first Product node as expected.

The second time it runs, I get the following exception:

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)

I did find this question and this question that were similar to mine, but I'm fairly sure my XML is well-formed (I can get it directly from running a sproc)

My ideas so far:

  1. 2048 is a very suspicious number in computers. Am I running into a 2KB limit somewhere in XDocument or XmlReader?
  2. My ktXmlReader.Read() in the while loop is somehow skipping all the other nodes and going straight to the EOF

Answer

Codeman picture Codeman · Mar 19, 2013

I found the answer here.

My problem was that I was closing the SqlConnection with a using statement when I was getting the XmlReader.

I added the connection to my "using tower of power" and passed it as a parameter, keeping it open, and everything worked perfectly.