[問題] ASP.NET with C# Error Handling

看板Programming作者 (...)時間16年前 (2009/11/23 14:26), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/3 (看更多)
程式功能 : (如以下程式片段) 經由 url 給定 filename及 datestring , 程式呼叫Excel COM讀取該檔案然後另存新檔 再download 此 File 到 client 端 問題描述 : 正常情況下程式都可正常運作 但有時候會有 COM Error 的情況發生 (發生問題不明) 當有 Error 發生時 程式就會轉到Catch那一段輸出 Error Message 現在的問題是如何在 Error Processing (即 Catch 裡)加上關掉 COM Object的程式 亦即用綠色標起來那一段 如果直接加那一段沒改變的話 會產生找不到變數的錯誤 請問該如何處理呢 [Defauls.aspx.cs] using Microsoft.Office.Interop.Excel; using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication1 { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { try { string InputFile = Request.QueryString["file_name"]; string DateStr = "_"+Request.QueryString["date_str"]; string ProcessMode = Request.QueryString["mode"]; string OutputFile = InputFile.Replace(DateStr, ""); string FilePath = "F:\\excel_process\\"+InputFile; if (!System.IO.File.Exists(FilePath)) { Response.Write("<script language=\"javascript\">\n"); Response.Write("alert(\"Internal Error!!\");\n"); Response.Write("</script>\n"); return; } Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass(); Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Open(FilePath); Microsoft.Office.Interop.Excel.Worksheet xlSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlBook.Worksheets.Item[1]; string SaveFilePath = "F:\\excel_process\\" +OutputFile; xlBook.SaveAs(SaveFilePath); //close all object Start System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet); xlSheet = null; xlBook.Close(false, Type.Missing, Type.Missing); xlApp.Workbooks.Close(); System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook); xlBook = null; System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp.Workbooks); xlApp.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp); xlApp = null; GC.Collect(); GC.WaitForPendingFinalizers(); //close all object end if ((ProcessMode == "")||(ProcessMode == null)) { Response.AppendHeader("Content-Type", "application/X-MS-Excel;"); Response.AppendHeader("Content-Disposition", "attachment; filename=" + OutputFile); Response.WriteFile(SaveFilePath); } } catch (Exception error_msg) { Response.Write("<BR>[Error]<BR>" + error_msg.ToString()); } } } } [Default.aspx] <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "" rel="nofollow">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="" rel="nofollow">http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> </div> </form> </body> </html> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.184.146 ※ 編輯: cyril63 來自: 118.169.184.146 (11/23 14:29)

11/29 15:48, , 1F
用dotNet的OLEDB PROVIDER也可以處理EXCEL
11/29 15:48, 1F
文章代碼(AID): #1B2YiKXH (Programming)
文章代碼(AID): #1B2YiKXH (Programming)