2014-05-04 55 views
0

如果執行失敗,哪個更好地確保db連接已關閉?try catch中的數據庫連接關閉位置/使用

try 
{ 
    using (var mySqlConnection = new MySqlConnection(DatabaseManagement.DatabaseConnectionString)) 
    { 
     DatabaseManagement.DatabaseCommand = mySqlConnection.CreateCommand(); 
     DatabaseManagement.DatabaseCommand.CommandText = "INSERT INTO lastlaptimes Values ('" + UserObject.UserName + "','" + _lastLapTime + "')"; 
     mySqlConnection.Open(); 
     DatabaseManagement.DatabaseCommand.ExecuteNonQuery(); 
    } 
} 
catch (MySqlException exception) 
{ 
    Logger.Error(exception); 
} 

或者這樣:

using (var mySqlConnection = new MySqlConnection(DatabaseManagement.DatabaseConnectionString)) 
{ 
    try 
    { 
     DatabaseManagement.DatabaseCommand = mySqlConnection.CreateCommand(); 
     DatabaseManagement.DatabaseCommand.CommandText = "INSERT INTO lastlaptimes Values ('" + UserObject.UserName + "','" + _lastLapTime + "')"; 

     mySqlConnection.Open(); 
     DatabaseManagement.DatabaseCommand.ExecuteNonQuery(); 
    } 
    catch (MySqlException exception) 
    { 
     mySqlConnection.Close(); 
     Logger.Error(exception); 
    } 
} 

我遇到的問題與對數據庫連接過多,而且,我想知道如果我的第一種方法是導致問題的連接作爲代碼被稱爲無數次,並打開一個新的連接,並再次失敗,並增加連接1.

感謝您的任何幫助。

+3

我會更擔心sql注入 – Steve

+0

我會擔心異常被吞噬,當有人未能得到正確的注射攻擊時。 –

+0

@TonyHopkinson你說得對,我誤解了他的問題。至少你管理這個例外。但這取決於你是否想寫更多或更少的代碼。使用SQL參數化來避免注入。 –

回答

0

這兩者之間的唯一區別是您是否明確地調用Close語句(都有using語句,該語句自動運行Dispose)。

所以這裏真正的問題是 - Dispose關閉連接還是需要明確調用它?我相信答案是Dispose會爲你打電話(見this question)。這意味着要麼工作得很好 - 選擇你喜歡的任何一個(我想第一個在技術上是一行少代碼...)

+0

謝謝你的提請_W。 – Blackvault