将XML从SQL Server输出到客户端的最简单方法

时间:2009-03-06 16:03:21

标签: sql-server xml stream infopath

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

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

谢谢是提前

4 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

为什么不直接使用标准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) - 大致沿着这些线(没有包含错误处理 - 我会留给你处理:-))。

这对任何事都有帮助吗?

马克

答案 2 :(得分:0)

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

例如:

SELECT * FROM MyTable FOR XML RAW;

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

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

答案 3 :(得分:0)

我通过简单地使用带有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"]);
    }