从SQL Server存储过程获取null结果返回XML

时间:2012-07-11 14:01:47

标签: c# sql-server xml

我有一个存储过程,它返回一段XML。当我从MS SQL Management Studio执行它时,它工作正常。 我需要编写一些C#代码来执行proc并获取生成的XML并将其写入文件。 我编写代码并执行proc(我使用profiler检查),并且没有错误,但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();
    }

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

有什么想法吗? -Sean

1 个答案:

答案 0 :(得分:0)

我没有看到它不应该工作的原因我的唯一猜测是你必须有一行你已经去了endoffile调用xmlr.Read();所以请尝试以下方式

using(System.Xml.XmlReader xmlr = myCommand.ExecuteXmlReader())
{
 while xmlr.Read())
 {
    MessageBox.Show(xmlr.ReadOuterXml());
 }
}