2013-05-17 84 views
0

我確定我錯過了一些明顯的東西。對於上傳的文件,什麼是有效的OleDbConnection ConnectionString?

一個簡單的任務就在我面前:'在Forms頁面上通過ASP.NET上傳Excel(2003)文件,並將該文件的內容推送到DataTable中以準備數據驗證/存儲'。當應用到文件的本地存儲版本

這些操作做工精細已經 - 對,我只是利用的OleDbConnection-的ConnectionString「的String.Format(」供應商= Microsoft.Jet.OLEDB.4.0;數據源= {0};擴展屬性= Excel 8.0;「,fileName)」從OleDbDataAdapter

然而,試圖重複使用完全相同的文件(通過FileUpload控件)的上傳的版本,在這裏我填的是OleDbDataAdapter的我收到錯誤的行[「Microsoft Jet數據庫引擎不能找到對象「Sheet1 $」,確保對象存在,並且正確拼寫其名稱和路徑名稱。「]一個如此普遍而且痛苦的錯誤 - 我仍然不確定下一步要看的地方。我猜測連接字符串結構對於上傳的文件是不合法的。

我通過StackOverflow和MSDN搜索,甚至在網絡上搜索,迄今爲止沒有成功,但搜索條件可能過於無處不在。我是否需要在試圖解析其內容之前找到本地存儲庫以保存上傳的文件?我能不能簡單地建立一個'內存中的文件'的連接?如果涉及到答案,上傳的文件的大小不會超過200 kb。提前提供的任何援助

真誠的感謝...

+2

是的,你需要將其暫時保存到磁盤.. –

回答

2

我在這種情況下,做的是建立一個Parser類,將暫時保存文件,處理它,然後銷燬時刪除臨時文件。喜歡的東西:

public class ExcelParser : IDisposable 
{ 
    string filename; 
    string connStr = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0}; Extended Properties=\"Excel 12.0 Xml;HDR=YES\""; 

    public ExcelParser(HttpPostedFile file) 
    { 
     filename = String.Format("{0}{1}.xlsx", System.IO.Path.GetTempPath(), Guid.NewGuid().ToString()); 
     file.SaveAs(filename); 
    } 

    public MyData Process() 
    { 
     OleDbConnection conn = new OleDbConnection(String.Format(connStr, filename)); 
     conn.Open(); 

     OleDbCommand cmd = new OleDbCommand("Select * From [Sheet1$]", conn); 
     OleDbDataReader reader = cmd.ExecuteReader(); 

     while (reader.Read()) 
     { 
      // Build Data to return 
     } 

     reader.Close(); 
     conn.Close(); 
     return data; // Return data you built 
    } 

    public void Dispose() 
    { 
     File.Delete(filename); 
    } 
} 

然後,您可以使用它作爲這樣的:

using (ExcelParser parser = new ExcelParser(file)) 
{ 
    var results = parser.Process(); 
    // Do stuff 
} 
+0

當我發現時嘗試了這一點,如果它作爲希望我會給你那個肯定會賺到的答案。 – Hardryv

+0

從IIS中使用之後,刪除文件是否存在任何問題? – Moustachio

相關問題