【问题标题】:Simplest way to output XML from SQL Server to client将 XML 从 SQL Server 输出到客户端的最简单方法
【发布时间】:2009-03-06 16:03:20
【问题描述】:

我需要通过单击 URL 将 sql server 中 xml 列的内容返回给客户端。 xml 具有打开正确应用程序的处理指令(在本例中为 Infopath)。

我对所有可用的各种 xmlreader 编写器和流有点困惑。我想我想将 SQL ExecuteXmlReader 的内容发送到 Response.OutputStream - 但我不确定如何将它们组合在一起。

先谢谢了

【问题讨论】:

  • 从表面上看,这是指 ASP.NET 和 SQL Server >= 2005

标签: sql-server xml stream infopath


【解决方案1】:

我建议从数据库中获取 XML 作为文本,然后动态创建一个页面并将标题中的 MIME 类型设置为“application/xml”。这应该告诉浏览器 DTRT(假设它配置正确)。

如果您不使用 Web 应用程序,那么您可能需要考虑使用 RE 来解析文本并确定要启动的应用程序,然后将 XML 提供给它(使用临时文件或通过某些输入重定向类型)。

由于您没有说明您在使用 XML 和 SQL Server 之外的哪些技术,因此很难具体说明。

【讨论】:

    【解决方案2】:

    您为什么不直接使用标准 SQL 查询数据库以获取 XML 列的内容,然后在页面中获取该内容并将该字符串流式传输给用户?

    类似:

    string xmlContents = string.Empty;
    
    using(SqlConnection _con = new SqlConnection("server=(local);database=Northwind;Integrated Security=SSPI;")
    {
      string queryStatement = "SELECT XmlColumn FROM dbo.MyTable WHERE id = @ID";
    
      using(SqlCommand _cmd = new SqlCommand(queryStatement, _con)
      {
        _cmd.Parameters.AddWithValue("@ID", 5555);
    
        _con.Open();
    
        xmlContents = _cmd.ExecuteScalar().ToString(); // returns an object
        _con.Close();
      }
    }
    

    然后将 XML 流回给用户,例如使用 Response.Write(xmlContents) - 大致遵循这些路线(不包括错误处理 - 我将把它留给你处理:-))。

    这有帮助吗?

    马克

    【讨论】:

      【解决方案3】:

      SQL 2005 及更高版本支持FOR XML 语句。见here

      例如:

      SELECT * FROM MyTable FOR XML RAW;
      

      还有其他关键字可以将 XML 标记名称调整为与数据库列不同。

      然后查看 ExecuteXmlReader 文档,了解您在 C# 中使用的任何 Command 类。

      【讨论】:

      • 嗯...没关系,如果您想选择关系数据并将其显示为 XML(并且效果很好)。但这里的问题是关于 SQL Server 中 XML 列中已经存在的数据 ....
      【解决方案4】:

      我通过简单地使用带有 xml 作为文本的 Response.Write 来实现它,但我仍然不确定我是否真的应该使用 XmlReaders 和流。这是我所做的:

      SqlCommand cmd = conn.CreateCommand();
      cmd.CommandType = CommandType.Text;
      cmd.CommandText = "select Name, InfopathDoc from document where id = @id";
      cmd.Parameters.AddWithValue("@id", docId);
      
      using (SqlDataReader dr = cmd.ExecuteReader())
      {
          if (dr.Read())
          {
              Response.ContentType = "application/xml";
              Response.AppendHeader("Content-disposition", "attachment; filename=" + dr["Name"]);
              Response.Write(dr["InfopathDoc"]);
          }
      

      【讨论】:

        猜你喜欢
        • 2011-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多