我需要关闭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文件。任何帮助吗?

我需要关闭OleDbDataReader每次我使用它

我建议您使用关键字来使用。因为有时您可能会忘记关闭或处理连接和读取器。因为使用自动处理对象。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();      
}