OLEDB чтение файла Excel не работает на IIS asp.net C # - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь просмотреть файл, затем сохраняю этот файл в одну папку и пытаюсь прочитать этот файл с помощью OLEDB. Все работает с файлом на локальном компьютере, а также на IIS локально.То же самое, когда я выпущен на сервер, он не работает, получая исключение, так как «Доступ к пути C: \ inetpub \ wwwroot \ exceptionApp \ 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);
        }
    }

1 Ответ

0 голосов
/ 13 января 2019

Вы должны предоставить доступ к папке inetpub для IIS_IUSRS на вашем сервере.

...