【问题标题】:The Microsoft Office Access database engine cannot open or write to the fileMicrosoft Office Access 数据库引擎无法打开或写入文件
【发布时间】:2017-05-19 04:38:57
【问题描述】:

我得到了以下异常

“Microsoft Office Access 数据库引擎无法打开或写入 文件 ''。它已被其他用户独占打开,或者您 需要权限才能查看和写入其数据。”在 Econ.Open();

public partial class LBMIS1New : System.Web.UI.Page
{
    OleDbConnection Econ;
    SqlConnection con;

    string constr, Query, sqlconn;
    protected void Page_Load(object sender, EventArgs e)
    {


    }

    private void ExcelConn(string FilePath)
    {

        constr = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0 Xml;HDR=YES;""", FilePath);
        Econ = new OleDbConnection(constr);

    }
    private void connection()
    {
        sqlconn = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
        con = new SqlConnection(sqlconn);

    }


    private void InsertExcelRecords(string FilePath)
    {
        ExcelConn(FilePath);

        Query = string.Format("Select [Name],[City],[Address],[Designation] FROM [{0}]", "Sheet1$");
        OleDbCommand Ecom = new OleDbCommand(Query, Econ);
        Econ.Open();

        DataSet ds = new DataSet();
        OleDbDataAdapter oda = new OleDbDataAdapter(Query, Econ);
        Econ.Close();
        oda.Fill(ds);
        DataTable Exceldt = ds.Tables[0];
        connection();
        //creating object of SqlBulkCopy    
        SqlBulkCopy objbulk = new SqlBulkCopy(con);
        //assigning Destination table name    
        objbulk.DestinationTableName = "Employee";
        //Mapping Table column    
        objbulk.ColumnMappings.Add("Name", "Name");
        objbulk.ColumnMappings.Add("City", "City");
        objbulk.ColumnMappings.Add("Address", "Address");
        objbulk.ColumnMappings.Add("Designation", "Designation");
        //inserting Datatable Records to DataBase    
        con.Open();
        objbulk.WriteToServer(Exceldt);
        con.Close();

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string CurrentFilePath = Path.GetFullPath(FileUpload1.PostedFile.FileName);
        InsertExcelRecords(CurrentFilePath);
    }
}

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    此错误可能由以下原因引起:

    1. 文件在机器上仍然打开,或者如果它在网络上,那么有人仍然打开它。

    2. 如果文件在网络上,则由于安全设置导致此错误,建议将文件本地移动到服务器上。

    3. 如果文件是本地文件,则仍然存在权限问题

    解决方案

    如果您已经确保该文件没有在其他任何地方打开,并且您已将其复制到本地服务器,请参阅以下步骤:

    1. 确保文件本地保存在服务器上,并且位于文件夹而不是根文件夹中。

    2. 文件进入文件夹后,进入该文件夹的权限,确保以下用户具有完全读写权限:“网络服务”和“asp”。

      李>
    3. 授予这些用户对文件夹的访问权限后,您仍然看到错误,授予用户“所有人”并测试这是否解决了错误。

    更多信息,您可以参考:

    http://community.landesk.com/support/docs/DOC-24626

    http://www.vbforums.com/showthread.php?398478-RESOLVED-Webform-error-quot-It-is-already-opened-exclusively-by-another-user-or-you-need-(-)-quot

    问候

    【讨论】:

    • 想说授予用户“所有人”访问权限让我在此错误上畅通无阻。在 Windows 更新中推出了一些东西,尽管该功能在过去可以正常工作,但突然需要这样做。
    【解决方案2】:

    您可以使用文件的副本...

    【讨论】:

      【解决方案3】:

      您可以通过创新的解决方案来解决这个问题。使用文件的重复版本。例如将您的 FilePath 更改为该副本的版本。 不要忘记!最后,您应该删除复制版本。 以下是您的新 InsertExcelRecords:

         private void NewInsertExcelRecords(string FilePath)
          {
              try{
                      File.Copy(FilePath,FilePath += "tmp" + Path.GetExtension(FilePath));
                      InsertExcelRecords(FilePath);
              }
              finally{File.Delete(FilePath);}
          }
      

      享受...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-23
        • 2012-05-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多