我已经在SQL Server 2005的存储过程生成一个170兆字节的XML文件(使用SELECT FOR XML
)如何流从SQL Server 2005中的XML HTTP响应流下载
如何在ASP.NET,我会将此XML流式传输下载为网页浏览器中的文件?
我已经在SQL Server 2005的存储过程生成一个170兆字节的XML文件(使用SELECT FOR XML
)如何流从SQL Server 2005中的XML HTTP响应流下载
如何在ASP.NET,我会将此XML流式传输下载为网页浏览器中的文件?
像这样的事情已经工作了我一会儿。注意你必须调整使其适合于您的情况:
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,您的输出大小对于网络下载来说可疑的大。我只是试图回答这个问题,但你可能不得不重新考虑这个问题。
在此之后应该插入一些行中的一些表,这个文件已经准备就绪。
事情是这样的......
反正170 MB XML hmmmm听起来像是你要检讨许多事情以减少输出大小...
Harpo的答案很好,但您需要准备好您的响应以使其在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
}
}
我只从'IHttpHandler'做这种事情,所以不需要明确的方法。但好点。 – harpo 2013-05-11 02:08:45
啊,是的,这是有效的。 – Tombala 2013-05-11 03:06:49