【问题标题】:Getting null result from SQL Server stored proc which returns XML从返回 XML 的 SQL Server 存储过程中获取空结果
【发布时间】:2012-07-11 14:01:47
【问题描述】:

我有一个存储过程,它返回一段 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 返回的数据类型有关,这使得它看起来是空的。

有什么想法吗? -肖恩

【问题讨论】:

标签: c# sql-server xml


【解决方案1】:

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

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

【讨论】:

  • 谢谢。我尝试了您的建议,但得到了相同的结果。至少,while() 从未评估为真,因此 Read 必须返回 EOF。我不想对 XML 做任何花哨的事情,我只想将它存储在字符串或文件中,以便我可以用它覆盖现有 XML 文件的内容。我不打算对内存中的 XML 进行任何分析。也许有更好的方法来做到这一点?你知道是否有一种方法可以告诉 SQL Server 例如以字符串形式返回结果?
  • 您可以像这样在 sql 中将 xml 转换为字符串 CONVERT(VARCHAR(100), @xml, 1);如果这就是你所追求的
  • 再次感谢。我尝试过这个。但这没有任何区别。我很困惑!我编写的另一个 proc 只返回一个硬编码的 XML 工作正常,但是这个 proc 使用“FOR XML”子句,然后将结果转换为 VARCHAR,然后再将其传回,不起作用。
  • 我发现读取并没有失败,它可以工作,但只是返回一个空值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
相关资源
最近更新 更多