2012-04-26 43 views
4

我有以下設置的代碼:嵌套「使用」語句的正確格式?

using (OracleConnection conn = new OracleConnection(m_fceConn)) 
{ 
    conn.Open(); 

    using (OracleCommand cmd = new OracleCommand(m_sql, conn)) 
    { 
     using (OracleDataReader reader = cmd.ExecuteReader()) 
     { 
      reader.Read(); 
     } 
    } 

    conn.Close(); 
} 

有沒有更好的方式來格式化這個?當然,以後我可能會被打破了打開連接,運行查詢,並關閉在以後的日子連接到單獨的功能,但這種嵌套依然存在「幕後」可以這麼說。

我讀了另一個線程,我能格式化的東西,像這樣:

using (OracleConnection conn = new OracleConnection(m_fceConn)) 
using (OracleCommand cmd = new OracleCommand(m_sql, conn)) 

但考慮到我在這些語句之間有一些代碼,我不相信,我可以省略這樣的括號。我只是在尋找最好的/最安全的做法,因爲我仍然是C#的新手/新手。謝謝。

+0

你並不需要關閉,因爲處置的連接(使用)隱含調用close。 – 2012-04-26 22:54:29

+0

@Tim Schmelter:謝謝你的收藏。我很確定它的確如此,但我認爲我寧願安然無恙。儘管如此,我也有點像寫出它的明確性,因爲它沒有得到任何更清晰的結果:Open-> Read <-Close。離開它可能會產生什麼問題嗎? – Kittoes0124 2012-04-26 23:00:43

+0

@Kittoes - 不,沒問題。你也可以執行'cmd.ExecuteReader(CommandBehavior.CloseConnection)',它也會關閉連接。 – 2012-04-26 23:09:17

回答

3

我可能是錯的,但我不認爲你需要它傳遞給之前的OracleCommand打開連接。您只需在執行命令之前打開它。所以你可以寫上面的:

using (OracleConnection conn = new OracleConnection(m_fceConn)) 
using (OracleCommand cmd = new OracleCommand(m_sql, conn)) 
{ 
    conn.Open(); 
    using (OracleDataReader reader = cmd.ExecuteReader()) 
    { 
     reader.Read(); 
    } 
} 

(你也不應該需要顯式關閉,因爲處置連接應該自動關閉它)。

沒有什麼特別的,上面的代碼(除它看起來不錯),它只是使用了適用單一命令這樣的塊普通的C#的規則。這是一樣的:

if (...) 
if (...) 
    dosomething(); // Look Ma, no curly braces 

它只是你「疊加」多個單語句。

2

你所擁有的格式是正確的,儘管沒有必要調用conn.Close(),因爲在聲明它的using塊的末尾連接將被處理(並關閉)。

你可以,但是,省略了括號內爲第二次發言,因爲這句話的全部是另一種using塊。

2

你的第一個using語句需要有括號,因爲你有conn.Open()電話那裏。第二個和第三個可以像你說的那樣堆疊,這是非常習慣的C#(在我的情況下是首選)。

0
using (OracleConnection conn = new OracleConnection(m_fceConn)) 
{ 
    conn.Open(); 

    using (OracleDataReader reader = new OracleCommand(m_sql, conn).ExecuteReader()) 
    { 
     reader.Read(); 
    } 

    conn.Close(); 
} 

編輯 關於第二個想法,不這樣做。它不會處理命令對象。我將把答案留在這裏作爲不做的一個例子。

+1

這不會處理該命令,除非Oracle庫中的其他一些技巧會這樣做。 – 2012-04-26 22:52:52

+0

啊,很好。有沒有辦法編輯? – therealmitchconnors 2012-04-26 22:53:54

+0

您可以隨時編輯您的答案或刪除不再相關的問題。 – 2012-04-26 22:54:55