2013-11-14 104 views
1

我有一個過程,允許用戶下載電子表格,進行一些更改,然後上傳這些更改。將CSV導入到Web應用程序

上傳方法樣子 -

public DataTable ImportXLS(String SourceFilePath) { 
     string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + 
         "Data Source=" + SourceFilePath + ";" + 
         "Extended Properties=Excel 8.0;"; 

     using (OleDbConnection cn = new OleDbConnection(ConnectionString)) { 
      cn.Open(); 

      DataTable dbSchema = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
      if (dbSchema == null || dbSchema.Rows.Count < 1) { 
       throw new Exception("Error: Could not determine the name of the first worksheet."); 
      } 

      string WorkSheetName = dbSchema.Rows[0]["TABLE_NAME"].ToString(); 

      OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + WorkSheetName + "]", cn); 
      DataTable dt = new DataTable(WorkSheetName); 

      da.Fill(dt); 

      return dt; 
     } 
    } 

當我在本地調用該方法,它的作品,因爲我可以看到我的本地驅動器。

當部署到Web服務器,並呼籲像 -

ExportImport _ei = new ExportImport(); 
DataTable dt = null; 
dt = _ei.ImportXLS("C:\Users\mike\Desktop\mike.xls"); 

我得到一個錯誤,「C:\用戶\麥克風\桌面\ mike.xls」不是一個有效的路徑,顯然是因爲它在Web服務器上不存在。

有沒有人有任何嘗試通過網絡上傳文件的經驗,以及如何解決文件位置問題?

+0

你需要傳遞'_ei.ImportXLS()'到的路徑上傳的文件被保存。 –

+0

您也可以先將您的文件上傳到服務器,讓我們說一個'files'目錄,然後用朝向那個URL的URL打開它。如'_ei.ImportXLS(「/ files/mike.xls」);' –

+0

使用此功能的用戶將無法訪問Web服務器。我如何將它上傳到網絡服務器? – duckmike

回答

0

您需要將FileUpload控件添加到您的Asp.Net頁面。點擊一個按鈕,你需要將調用保存在服務器上的文件:

FileUpload1.SaveAs("C:\\Uploads\\" + FileUpload1.FileName); 

之後,您可以打電話給你的方法將文件

ExportImport _ei = new ExportImport(); 
DataTable dt = null; 
dt = _ei.ImportXLS("C:\\Uploads\\" + FileUpload1.FileName); 

這樣的想法是先上傳的文件處理在處理之前將其發送到服務器。

使用FileUpload控件的鏈接(.NET 2.0)
http://msdn.microsoft.com/en-us/library/aa479405.aspx

相關問題