A better way to get an XmlDocument or XPathDocument from FOR XML AUTO without using SqlXmlCommand?
When you use SqlCommand.ExecuteXmlReader() you get an XML fragment - you get no root node. What's a good (clean, elegant, performant, etc.) way to get an XmlDocument or XPathDocument (for XSLT purposes) populated with the data returned - without using the SQLXML 3.0 SqlXmlCommand stuff? Secondary question - what good is ExecuteXmlReader() anyway?
Is this gross? It feels odd:
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
SqlCommand command = new SqlCommand("select * from Customers as Customer for XML AUTO, ELEMENTS", conn);
XPathDocument xp = new XPathDocument();
XPathEditableNavigator xpathnav = xp.CreateEditor();
XmlWriter xw = xpathnav.PrependChild();
xw.WriteStartElement("Customers");
using(XmlReader xr = command.ExecuteXmlReader())
{
xw.WriteNode(xr,true);
}
xw.WriteEndElement();
xw.Close();
xp.WriteXml(XmlWriter.Create(Response.Output));
}
It works though, and produces this. Of course I wouldn't output it like this, I'd style the XPathDocument.
About Scott
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.
About Newsletter
Thanks Oleg!
Comments are closed.