上传文件的有效OleDbConnection连接字符串是什么?

时间:2013-05-17 20:10:17

标签: c# asp.net file-upload connection-string oledbdataadapter

我确信我错过了一些明显的东西。

一个简单的任务摆在我面前:'在Forms页面上通过ASP.NET上传Excel(2003)文件,并将该文件的内容推送到DataTable,为数据验证/存储做准备。

当应用于本地存储的文件版本时,这些操作已经正常工作 - 因为我只使用 OleDbConnection-ConnectionString “String.Format(”Provider = Microsoft.Jet.OLEDB。 4.0;数据源= {0};扩展属性= Excel 8.0;“,fileName)”来自 OleDbDataAdapter

但是,尝试使用上传版本的同一文件重复(通过FileUpload控件),在我填充 OleDbDataAdapter 的行上,我收到错误[“The Microsoft Jet数据库引擎无法找到对象“Sheet1 $”。请确保该对象存在,并且您正确拼写其名称和路径名称。“]错误如此通用且痛苦 - 我仍然不确定在哪里看下一个。我猜测连接字符串结构对于上传的文件是非法的。

我搜索了StackOverflow和MSDN,甚至在网络上搜索到目前为止没有成功,但搜索条件可能过于普遍。在尝试解析其内容之前,我是否需要实际找到用于保存上传文件的本地存储库?我是否可以简单地构建与“内存中的文件”的连接?如果它涉及到答案,则预计上传的文件的大小不会超过200 kb。

真诚地感谢所提供的任何帮助......

1 个答案:

答案 0 :(得分: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
}