2013-05-17 46 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

相关问题