2013-05-10 74 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