Microsoft Office Access数据库引擎无法打开或写入该文件

时间:2017-05-19 04:38:57

标签: c# asp.net

我得到的是以下异常

  

" 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);
    }
}

3 个答案:

答案 0 :(得分:1)

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

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

享受...

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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

  3. 如果文件是本地文件,那么仍然存在许可问题

  4. 解决方案

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

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

    2. 一旦文件在文件夹中,请转到该文件夹​​的权限,并确保以下用户具有读写的完全访问权限:"网络服务"和" asp"。

    3. 授予这些用户访问该文件夹的权限后,您仍然会看到错误,请授予用户" Everyone"并测试这是否可以解决错误。

    4. 有关详细信息,请参阅:

      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

      此致