我每次使用时都需要关闭OleDbDataReader吗?

时间:2013-05-31 17:39:34

标签: c# ms-access oledb ole

我在我的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文件。有什么帮助吗?

2 个答案:

答案 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();      
}