我在我的c#项目中使用OleDbDataReader类,我的程序在运行后继续锁定我的mdb文件。我想知道如何在最后可靠地关闭我的连接以释放锁。如果我每次运行查询时都需要关闭它,或者我可以在程序结束时一次性完成。以下是我的设置方法:
private OleDbConnection myDbC = new OleDbConnection(connectionString);
myDbC.Open();
这就是我多次使用它的方式:
OleDbCommand cmd = new OleDbCommand(SQL, myDbC);
OleDbDataReader reader = cmd.ExecuteReader();
reader.Close();
程序完成后,我还会执行以下操作:
myDbC .Close();
所以这是以某种方式锁定mdb文件。有什么帮助吗?
答案 0 :(得分:1)
我建议您使用使用关键字。因为有时你可能忘记关闭或处理连接和阅读器。因为使用自动处理对象。使用语句告诉.NET在不再需要时释放using块中指定的对象。
using (OleDbConnection conn = /* Create new instance using your favorite method */)
{
conn.Open();
using (OleDbCommand command = /* Create new instance using your favorite method */)
{
using (OleDbDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
//read here
}
}
}
conn.Close(); // Optional
}
MSDN的其他详细信息:
C#,通过.NET Framework公共语言运行库(CLR), 自动释放用于存储no的对象的内存 需要更长时间记忆的释放是不确定的;记忆是 CLR决定执行垃圾收集时释放。 但是,通常最好释放有限的资源,例如文件 尽快处理和网络连接。
using语句允许程序员指定对象的时间 使用资源应该释放它们。提供给使用的对象 语句必须实现IDisposable接口。这个界面 提供Dispose方法,该方法应该释放对象 资源。
答案 1 :(得分:1)
始终是.Close()
个连接的良好做法。 NOT 依靠垃圾收集器为您完成此操作。在某些情况下,连接会自动关闭;比如使用SqlDataAdapter
及其.Fill()
方法时。但这并没有改变您应该在代码中管理连接的事实。
话虽这么说,最好用using statement实现,如下所示:
using(OleDbConnection oledbConn = new OleDbConnection())
{
oledbConn.Open();
}
您还可以嵌套这些using语句,包装命令对象甚至数据适配器:
using(OleDbConnection oleDbConn = new OleDbConnection())
{
oleDbConn.Open();
using (OleDbCommand oleDbCmd = new OleDbCommand())
{
using (OleDbDataAdapter oleDbAdapter = new OleDbDataAdapter())
{
//More code can go here.
}
}
oleDbConn.Close();
}