我需要关闭OleDbDataReader每次我使用它
本文关键字:OleDbDataReader | 更新日期: 2023-09-27 18:16:22
我在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文件。任何帮助吗?
我建议您使用关键字来使用。因为有时您可能会忘记关闭或处理连接和读取器。因为使用自动处理对象。Using语句告诉。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),自动释放用于存储不存在的对象的内存不再需要。内存的释放是不确定的;记忆是在CLR决定执行垃圾收集时释放。但是,通常最好释放有限的资源,如文件尽快处理和网络连接。using语句允许程序员指定何时使用对象使用资源应该释放它们。提供给使用者的对象语句必须实现IDisposable接口。这个接口提供Dispose方法,该方法应该释放对象的资源。
始终是.Close()
连接的良好实践。要不要依赖于垃圾收集器为您做这件事。在某些情况下,连接会自动关闭;就像使用SqlDataAdapter
及其.Fill()
方法一样。但这并不能改变你应该在代码中管理连接的事实。
也就是说,最好使用using语句来实现,像这样:
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();
}