2013-05-31 50 views
1

我在我的c#項目中使用OleDbDataReader類,我的程序在運行後保持鎖定我的mdb文件。我想知道如何最終可靠地關閉連接以釋放鎖定。如果我每次運行查詢都需要關閉它,或者我可以在程序結束時一次完成所有操作。這裏是我如何設置它:我每次使用它時都需要關閉OleDbDataReader嗎?

private OleDbConnection myDbC = new OleDbConnection(connectionString); 
myDbC.Open(); 

,這裏是我如何使用它,很多很多次:

OleDbCommand cmd = new OleDbCommand(SQL, myDbC); 
OleDbDataReader reader = cmd.ExecuteReader(); 
reader.Close(); 

當程序完成後,我也做到以下幾點:

myDbC .Close(); 

所以這是以某種方式鎖定mdb文件。任何幫助?

+2

請訪問http ://stackoverflow.com/questions/744051/sqldatareader-dispose – nawfal

回答

1

我建議你使用使用關鍵字。因爲有時你可能忘記關閉或處理連接和閱讀器。因爲使用自動配置對象。使用語句告訴.NET一旦不再需要,就釋放使用塊中指定的對象。

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方法,該方法應釋放對象的 資源。

+0

請分享msdn鏈接 – nawfal

+0

@nawfal我更新了答案。 –

+0

無論如何,我可以強制連接關閉在最後? – Bill

1

這是總是一個很好的做法.Close()連接。做不是依靠垃圾收集器爲你做。有些情況下連接會自動關閉,例如當使用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();  
} 
+0

無論如何,我可以強制連接關閉在最後? – Bill

+0

是的。調用連接對象的'.Close()'方法。看到我上面的代碼更正。 – Brian

相關問題