有没有一种方法可以记录从 SqlCommand.ExecuteXmlReader 返回的原始 XML?
Is there a method to log the raw XML returned from a SqlCommand.ExecuteXmlReader?
我正在维护一个遗留应用程序,它在某些情况下第一次执行一系列查询时会显示暂时性错误。
应用程序使用 SqlCommand.ExecuteXmlReader,其中 return 是一个 XmlReader 对象。包含invalidXML时出错,应用程序抛出异常。
尽我所能,但在将输出传递给从中创建新 XPathDocument 的方法之前,我找不到一种方法来查看输出的原始 XML。我对 XmlReader 对象所做的任何操作(例如尝试记录其内部内容)都会导致 reader 无法被任何其他代码使用。
我正在寻找能够简单地记录所有来自命令的原始 XML 的方法,以便在发生错误时我可以看到导致错误的确切 XML , 帮助我缩小搜索范围。
我已经尝试克隆 XmlReader,但是 SQL 的结果包含多个结果集(这是一个包含多个 return 语句的存储过程)。使用 stringbuilder 将结果转换为字符串,然后尝试将该字符串转换回 XmlReader 会导致异常,因为存在多个根节点。
有什么直接的解决方法吗?
//execute the command
var xmlReader = sqlCommand.ExecuteXmlReader();
var xpathDoc = new XPathDocument(xmlReader); //<--exception thrown here
我真正希望能够做的是:
var xmlReader = sqlCommand.ExecuteXmlReader();
LogXmlResults(xmlReader);
var xpathDoc = new XPathDocument(xmlReader);
您的 XML 包含无效字符。出于某种原因 XML 被定义为不允许某些字符,即使是编码形式。这对我来说毫无意义。
解决方案似乎是您需要自己创建 XmlReader
并将 CheckCharacters
选项设置为 false
。
因此您需要从 ADO.NET 获得一个 TextReader
并从中创建一个 XmlReader
。我会为此使用 SqlDataReader.GetTextReader
。
我正在维护一个遗留应用程序,它在某些情况下第一次执行一系列查询时会显示暂时性错误。
应用程序使用 SqlCommand.ExecuteXmlReader,其中 return 是一个 XmlReader 对象。包含invalidXML时出错,应用程序抛出异常。
尽我所能,但在将输出传递给从中创建新 XPathDocument 的方法之前,我找不到一种方法来查看输出的原始 XML。我对 XmlReader 对象所做的任何操作(例如尝试记录其内部内容)都会导致 reader 无法被任何其他代码使用。
我正在寻找能够简单地记录所有来自命令的原始 XML 的方法,以便在发生错误时我可以看到导致错误的确切 XML , 帮助我缩小搜索范围。
我已经尝试克隆 XmlReader,但是 SQL 的结果包含多个结果集(这是一个包含多个 return 语句的存储过程)。使用 stringbuilder 将结果转换为字符串,然后尝试将该字符串转换回 XmlReader 会导致异常,因为存在多个根节点。
有什么直接的解决方法吗?
//execute the command
var xmlReader = sqlCommand.ExecuteXmlReader();
var xpathDoc = new XPathDocument(xmlReader); //<--exception thrown here
我真正希望能够做的是:
var xmlReader = sqlCommand.ExecuteXmlReader();
LogXmlResults(xmlReader);
var xpathDoc = new XPathDocument(xmlReader);
您的 XML 包含无效字符。出于某种原因 XML 被定义为不允许某些字符,即使是编码形式。这对我来说毫无意义。
解决方案似乎是您需要自己创建 XmlReader
并将 CheckCharacters
选项设置为 false
。
因此您需要从 ADO.NET 获得一个 TextReader
并从中创建一个 XmlReader
。我会为此使用 SqlDataReader.GetTextReader
。