我有一个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()
是它的工作原理。
感谢您的帮助!
答案 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
我有同样的问题,这就是解决方案。