private List<test> UploadExcel(HttpPostedFileBase FileUpload)
        {
            List<test> list = new List<test>();
                string file = ""; 
                   file= FileUpload.FileName;
                string result = string.Empty;
                string strConn =@"Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + file + "; " + "Extended Properties='Excel 8.0;HDR=No'";
                OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();
                OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", conn);
                DataSet myDataSet = new DataSet();
                myCommand.Fill(myDataSet, "[Sheet1$]");
for (int i = 1; i < myDataSet.Tables["[Sheet1$]"].Rows.Count; i++)
                {
                    test it = new test();
                    it.test1 = myDataSet.Tables["[Sheet1$]"].Rows[i][0].ToString();
                    it.test2 = myDataSet.Tables["[Sheet1$]"].Rows[i][1].ToString();
                    list.Add(it);
                }
                result = "导入成功!";
                JsonResult json = new JsonResult();
                json.Data = result;
                myCommand.Dispose();
                KillExcelProceed();
                conn.Close();
                return list;

   这是我的导入的controller,在本机测试都能成功而且list的数据能在view里面显示出来,但是一发布到服务器后,上传了excel就提示不行了,是不是我写的controller有误            

解决方案 »

  1.   

    本帖最后由 net_lover 于 2012-04-20 13:49:04 编辑
      

  2.   

    [OleDbException (0x80004005): Microsoft Jet 数据库引擎打不开文件''。  它已经被别的用户以独占方式打开,或没有查看数据的权限。]
       System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) +351
       System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +86
       System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) +31
       System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +76
       System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +126
       System.Data.OleDb.OleDbConnection.Open() +43
       DepTrain.Controllers.DepTrainUploadController.UploadExcel(HttpPostedFileBase FileUpload) in D:\PersonTrain20120220\DepTrain\DepTrain\Controllers\DepTrainUploadController.cs:3380
       DepTrain.Controllers.DepTrainUploadController.TestExcel(HttpPostedFileBase FileUpload) in D:\PersonTrain20120220\DepTrain\DepTrain\Controllers\DepTrainUploadController.cs:3345
       lambda_method(Closure , ControllerBase , Object[] ) +108
       System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
       System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +199
       System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
       System.Web.Mvc.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a() +56
       System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +267
       System.Web.Mvc.<>c__DisplayClassf.<InvokeActionMethodWithFilters>b__c() +20
       System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +190
       System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +345
       System.Web.Mvc.Controller.ExecuteCore() +115
       System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +42
       System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
       System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__4() +34
       System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
       System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12
       System.Web.Mvc.Async.WrappedAsyncResult`1.End() +55
       System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +43
       System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
       System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8970301
       System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184 
      

  3.   

    本帖最后由 net_lover 于 2012-04-20 14:01:20 编辑
      

  4.   

    另外,不要使用内部类FileUpload作为参数名称
      

  5.   


    已下载安装,并查看了temp和IIS里面的权限,并把控制面板里面文件夹选项的设置改动了,现运行报下面的错误
    异常详细信息: System.Data.OleDb.OleDbException: 找不到可安装的 ISAM。源错误: 
    行 3383:                       OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", conn);
    行 3384:                       DataSet myDataSet = new DataSet();
    行 3385:                       myCommand.Fill(myDataSet, "[Sheet1$]"); 
      

  6.   

    成功了,感谢net_lover的指导结贴
      

  7.   

    wanghai023 你好! 请问这个问题你是怎么解决的,我最近也遇到了,实在不知道怎么处理,麻烦告诉我下吧,谢谢哦