2012-09-27 131 views
1

我需要數據庫連接和我的winapp幫助。c#/ oracle:打開/關閉連接

我有一個Windows應用程序(C#),我登錄後,開始在Oracle數據庫中運行5或6個不同的查詢,每5-10秒。應用程序全天候運行。

什麼是正確的方法來做到這一點? 我應該在登錄過程中打開連接,並且在關閉應用程序之前不要關閉連接,或者每次運行查詢時是否應該打開和關閉連接? 例如:

//first query 
conn.Open(); 
DataSet ds1 = new DataSet(); 

string sql = "SELECT * FROM table1"; 

OracleCommand cmd = new OracleCommand(sql, conn); 
cmd.CommandType = CommandType.Text; 
OracleDataAdapter da = new OracleDataAdapter(cmd); 
da.Fill(ds1, "Result1"); 
conn.Dispose(); 

return ds1; 

//second query  
conn.Open(); 
DataSet ds2 = new DataSet(); 

string sql = "SELECT * FROM table2"; 

OracleCommand cmd = new OracleCommand(sql, conn); 
cmd.CommandType = CommandType.Text; 
OracleDataAdapter da = new OracleDataAdapter(cmd); 
da.Fill(ds2, "Result2"); 
conn.Dispose(); 

return ds2; 

什麼是做到這一點的最好方法是什麼?

+0

您能告訴我們連接池是否打開。這將決定最終的解決方案。 –

+0

啓用 - 我相信在ODT中的默認設置。 – Alex

回答

3

您在應用程序中使用的Oracle OleDB提供程序實現了池化。因此,當您創建並覆蓋連接時,您只需從「真實連接」池中獲取/釋放連接。

這使得創建和配置Connection對象成爲一個非常便宜的操作。如果我是你,我會打開一個連接,執行我的一批查詢,並在完成並休眠(即使幾秒鐘)後關閉+處理該連接。

+0

但是如果你打開它的話。我不相信這是默認的 –

+0

這應該是,除非你有充分的理由不這樣做。他沒有提到這一點。 – mbarthelemy

+0

這就是我要去的地方。我也使用塊實現,所以我不必擔心conn.open/conn.dispose ... – Alex

2

另一種選擇,當然是有疑問的每一「批」的單一連接

不過,如果你打的,往往那麼它聽起來像你需要的時間的永久連接數據庫應用程序。

我asuume當然,您的示例僅僅是舉例,並且您不是有效地使用原始SQL訪問數據庫。

+0

sql「select * from」僅僅是一個例子,當然...... – Alex

1

我建議你使用using塊以cleannon managed object

using(var connection = new OracleConnection("...")) 
{ 
..... 

} 

諾塔:使用你的對象上執行處置在治療結束

鏈接:http://msdn.microsoft.com/fr-fr/library/yh598w02(v=vs.80).aspx

+0

是的我可以使用塊來實現,但是,糾正我,如果我錯了,這將打開和關閉連接每時間。問題是,如果我每隔幾秒鐘就做一次,有多聰明? – Alex

+0

@Alex您創建連接對象,並在查詢結束時進行清理,以便優化連接池的管理 –