使用OleDb关闭与Access DB的连接

时间:2013-08-07 20:32:12

标签: c# ms-access oledb

我有一个Access数据库,我正在与OleDb连接。连接和使用一切正常,但我需要备份文件。

我正在关闭连接:

  public class myDbHandlerClass
  {

    private OleDbConnection myConnection;
    //in reality this string gets built by properties to the class
    //it ends up being this...
    //Yes Jet 4.0 this is an Access 2003 database
    private string myConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=myDatabase.mdb";

    public void OpenDatabase()
    {
      //to open the database
      try
      {
        // Does a previous connection exist?
        if ((myConnection != null) && myConnection.State != ConnectionState.Closed) return;

        //No database connection string is specified, can't continue
        if (string.IsNullOrEmpty(myConnectionString)) return;

        myConnection = new OleDbConnection(myConnectionString);
        myConnection.Open();

      }
      catch (Exception ex)
      {
        ExTrace.WriteLineIf(TraceLog.TraceError, ExTrace.ShowException(ex));
      }
    }

    public void CloseDatabase()
    {
      try
      {
        if ((myConnection == null)) return;

        if (myConnection.State != ConnectionState.Closed) myConnection.Dispose();
        myConnection = null;
        GC.Collect();
      }
      catch (Exception ex)
      {
        ExTrace.WriteLineIf(TraceLog.TraceError, ExTrace.ShowException(ex));
      }
    }
  }

没有抛出异常,连接状态==关闭,myConnection == null,但.ldb文件永远不会消失。我的后续代码应该将“myDatabase.mdb”文件移动到“myDatabase.bak”失败,因为该文件已被我的程序使用。

如何确保它实际上已关闭且未锁定。

编辑: 我使用以下评论中的建议修改了代码,现在它正在运行。

myConnection.Dispose(); 

明确地打电话     GC.Collect()

是它的工作原理。

感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

myConnection.Close();尝试拨打myConnection.Dispose();

事实上,我相信.Dispose()正在关闭连接,因此使用.Close()替换.Dispose()非常简单。

答案 1 :(得分:2)

我有同样的问题,这就是解决方案:

CONSTRAINT shift_planned_duration_check CHECK (planned_duration >= 0)

现在可行。

答案 2 :(得分:1)

实际上,这就是问题所在。我在处置后添加了GC.Collect(),现在它可以正常工作。 - trashrobber 2013年8月7日21:14

我有同样的问题,这就是解决方案。