У меня есть база данных доступа, с которой я подключаюсь с OleDb. Все работает нормально с подключением и использованием, но мне нужно сделать резервную копию файла.Закрытие соединения с Access DB с 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», терпит неудачу, потому что файл уже используется - моей программой.
Как я могу убедиться, что он фактически закрыт и не заблокирован.
EDIT: Я изменил код с предложениями ниже, и теперь он работает.
myConnection.Dispose();
И явным вызовом GC.Collect()
является то, что получил это работает.
Спасибо за помощь!
Были ли вы объявлены myConnection ?? – Botonomous
Шансы закрыты, но не удалены, он просто возвращается в пул соединений. – Tim
Я редактировал код, чтобы включить объявление и открытие базы данных. myConnection объявляется как приватная переменная в классе. Я убедился, что есть только один экземпляр класса, поэтому должно быть только одно открытое соединение. – trashrobber