2013-05-10 75 views

回答

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

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 
     } 
    } 
+0

我只从'IHttpHandler'做这种事情,所以不需要明确的方法。但好点。 – harpo 2013-05-11 02:08:45

+0

啊,是的,这是有效的。 – Tombala 2013-05-11 03:06:49