0

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

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

谢谢是提前

4

4 回答 4

0

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

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

由于您没有说明除了 XML 和 SQL Server 还使用了哪些技术,因此很难具体说明。

于 2009-03-06T16:49:37.377 回答
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) - 大致符合这些要求(不包括错误处理 - 我将把它留给你处理:-))。

这有帮助吗?

马克

于 2009-03-06T20:11:31.993 回答
0

SQL 2005 及更高版本支持该FOR XML语句。看这里

例如:

SELECT * FROM MyTable FOR XML RAW;

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

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

于 2009-03-06T20:17:49.780 回答
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"]);
    }
于 2009-03-09T08:58:12.383 回答