0

我有一个返回一段 XML 的存储过程。当我从 MS SQL Management Studio 执行它时它工作正常。我需要编写一些 C# 代码来执行 proc 并获取生成的 XML 并将其写入文件。我编写了代码并执行了 proc(我使用分析器进行了检查),没有错误,但 XmlReader 为空。我的代码是这样的:

using (SqlConnection c = new SqlConnection(-snip-))
{
c.Open();
SqlCommand myCommand = new SqlCommand("sp_formfill_contract_xml", c);

myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.AddWithValue("@i_contract_id", frm_contract_id.Text.ToString());                    

System.Xml.XmlReader xmlr = myCommand.ExecuteXmlReader();
xmlr.Read();


while (xmlr.ReadState != System.Xml.ReadState.EndOfFile)
    {
    MessageBox.Show(xmlr.ReadOuterXml());
    // do stuff with the XML snippet here
    }

    c.Close();
    }

作为比较测试,我创建了第二个存储过程,它返回一个包含第一个过程生成的 XML 的纯字符串,只要我不使用 XML 阅读器,C# 代码就可以很好地接收它。所以这与 XML proc 返回的数据类型有关,这使得它看起来是空的。

有任何想法吗?-肖恩

4

1 回答 1

0

我看不出它不应该起作用的原因我唯一的猜测是你必须有一行并且你已经去 endofile 调用 xmlr.Read(); 所以请尝试以下方式

using(System.Xml.XmlReader xmlr = myCommand.ExecuteXmlReader())
{
 while xmlr.Read())
 {
    MessageBox.Show(xmlr.ReadOuterXml());
 }
}
于 2012-07-11T14:14:13.767 回答