【问题标题】:Backslashes in XML returned from stored procedure从存储过程返回的 XML 中的反斜杠
【发布时间】:2012-11-07 16:23:43
【问题描述】:

我编写了一个存储过程,它使用以下语法将我的行作为 XML 返回:

FOR XML PATH ('customer'), ROOT ('customers'), TYPE

从 SSMS 中的存储过程运行查询会产生输出,单击该输出时看起来还不错。

但是,从 C# 调用该存储过程会给我 XML,我认为它具有被转义的双引号,因此:

<customers><customer id=\"123456\" firstName=\"ABE\" lastName=\"LINCOLN\" dob=\"02/12/1809\">

我的 C# 代码如下所示:

public string GetCustomerXML()
{
     string xml = string.Empty;
     XmlDocument xmlDoc = new XmlDocument();

     using (SqlConnection myConnection = new SqlConnection(connectionString))
     {
          myConnection.Open();

          using (SqlCommand cmd = new SqlCommand("GetData_CreateXML", myConnection))
          {
               cmd.CommandType = CommandType.StoredProcedure;

               using (XmlReader reader = cmd.ExecuteXmlReader())
               {
                   while (reader.Read())
                   {
                       xmlDoc.Load(reader);
                       xml = xmlDoc.OuterXml.ToString();
                   }
               }
           }
     }

     return xml;
}

我在这里做错了什么?

提前致谢。

【问题讨论】:

  • 您遇到错误了吗?还是您只是看到调试器转义字符串的方式?

标签: c# sql xml escaping


【解决方案1】:

我在这里做错了什么?

我怀疑你只是在调试器中检查字符串,它通常会转义字符串,就好像你想把它写成 C# 字符串文字一样。

尝试 logging 字符串(例如,将其写入控制台这样简单的操作),我怀疑您会发现那些反斜杠根本不存在。

【讨论】:

  • 看起来就是这样。谢谢。
  • @DerPflug:如果您在监视窗口中突出显示值的情况下按 Enter,它会弹出一个“文本可视化器”窗口,该窗口显示字符串而不转义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
相关资源
最近更新 更多