如何将XML从SQL Server 2005流式传输到HTTP响应流以供下载

时间:2013-05-10 19:28:14

标签: .net sql-server xml

我在SQL Server 2005中有一个存储过程,它生成一个170兆字节的XML文件(使用SELECT FOR XML

在ASP.NET中,如何将此XML流式传输以便在Web浏览器中作为文件下载?

3 个答案:

答案 0 :(得分:2)

这样的事情已经为我工作了一段时间。请注意,您必须根据自己的情况定制:

var settings = new XmlWriterSettings {
    // your settings
};

using (var xmlWriter = XmlWriter.Create(response.Output, settings))
using (var connection = YourConnection())
using (var command = CreateCommand(sql, connection, dbParams) as SqlCommand )
{
    try {
        connection.Open();
        using (var reader = command.ExecuteXmlReader())
        {
            while (reader.Read())
                xmlWriter.WriteNode(reader, true);
        }
    }
    catch ( Exception ex )
    {
        // log, whatever
        throw;
    }
}

此外,如果您想要进行响应下载,则必须设置HTTP标头,例如this。这真的是一个单独的问题。

我同意@Metropolitan的说法,您的输出大小对于网络下载而言非常大。我只想回答问题,但你可能不得不重新考虑这个问题。

答案 1 :(得分:1)

Harpo的答案很好但你需要准备好你的Response以使其在ASP.NET中运行。创建一个页面,您可以将其命名为“Download.aspx”。然后在Page_load中,您需要流式传输内容。

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();

            if (Request.QueryString["key"] != null)
            {
                Response.AppendHeader("content", contentType);
                Response.AppendHeader("content-disposition", "attachment; filename=something.xml");
                Response.ContentType = "text/xml";

                // Here you would call your sproc (see harpo's answer)
                // and write to Response.Output
            }
            HttpContext.Current.ApplicationInstance.CompleteRequest();
            Response.End();
        }
        catch (Exception ex)
        {
            // Handle your errors
        }
    }

答案 2 :(得分:-1)

I am pretty sure you need to write some SQL SERVER DLL that will ZIP that XML file and save it locally.

在此之后,它应该在某个表中插入一些该文件准备就绪的行。

Perhaps you have to add WCF service into you ASP .NET project that will be able to stream that ZIP file.

像这样......

无论如何170 Mb XML hmmmm听起来你必须要审查很多东西以减少输出尺寸......