【问题标题】:OLEDB reading Excel File Not Working on IIS asp.net C#OLEDB 读取 Excel 文件在 IIS asp.net C# 上不起作用
【发布时间】:2018-10-17 18:19:29
【问题描述】:

我正在尝试浏览文件,然后将该文件保存到一个文件夹中并尝试使用 OLEDB 读取该文件,一切都在本地工作文件以及在本地工作在 IIS 上。当我在服务器上发布时,它不起作用,出现异常,因为“访问路径'C:\inetpub\wwwroot\exceptApp\Files\TemplateFile.xlsx'被拒绝。”,IIS_USERS 用户对文件夹具有完全权限。下面是我的代码

 protected void BtnSubmit_Click(object sender, EventArgs e)
 {
     try
         {
            grdResult.DataSource = null;
            grdResult.DataBind();
            BtnExport.Visible = false;

            if (fuFile.HasFile)
            {
                string readConnString = "";
                var fileExtn = Path.GetExtension(fuFile.FileName).ToLower();
                var dir = Server.MapPath("~\\Files");
                if (!Directory.Exists(dir))
                {
                    Directory.CreateDirectory(dir);
                }
                var fileName = Path.GetFileName(fuFile.FileName.Trim());

                var fileNameWithPath = Path.Combine(dir, fileName);

                if (File.Exists(fileNameWithPath))
                {
                    File.Delete(fileNameWithPath);
                }
                fuFile.PostedFile.SaveAs(fileNameWithPath);
                fuFile.FileContent.Dispose();
                //Connection String to Excel Workbook
                if (fileExtn.Trim() == ".xls")
                {
                    readConnString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";", fileNameWithPath);
                }
                else if (fileExtn.Trim() == ".xlsx")
                {
                    readConnString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\";", fileNameWithPath);
                }


                using (var dbConn = new OleDbConnection(readConnString))
                {                        
                    dbConn.Open();
                    var dt = dbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                    using (var cmd = new OleDbCommand(@"SELECT * FROM [" + dt.Rows[0]["TABLE_NAME"].ToString() + "]", dbConn))
                    {                            
                        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
                        DataSet ds = new DataSet();
                        da.Fill(ds);
                        var resultDt = ds.Tables[0];
                        dbConn.Close();
                          if (resultDt.Rows.Count > 0)
                            {
                                BtnExport.Visible = true;
                                grdResult.DataSource = resultDt;
                                grdResult.DataBind();
                            }                         

                    }                        

                }
                Thread.Sleep(1000);

                if (File.Exists(fileNameWithPath))
                {
                    File.Delete(fileNameWithPath);
                }

            }
        }
        catch (Exception ex)
        {
            exlog.Log("BtnSubmit_Click", ex.Message);
        }
    }

【问题讨论】:

  • 我会将文件夹设置为文件共享,然后让程序通过文件共享地址 (\\server\Share) 访问它,即使它在本地运行也是如此
  • 尝试为每个文件夹授予完全权限,看看是否仍然出现错误?如果错误消失这意味着文件夹权限配置中的点,这将节省一些时间并使事情更容易找到解决方案。

标签: c# asp.net excel oledb


【解决方案1】:

您必须向服务器上的 IIS_IUSRS 授予对 inetpub 文件夹的访问权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    相关资源
    最近更新 更多