2014-01-15 84 views
4

什麼是正確的方法try/catch內部使用或使用內部try/catch?sqlConnection /命令使用語句+ try/catch塊

using (SqlConnection connection = CreateSqlConnection(connString)) 
{ 
       using (SqlCommand command = CreateSqlCommand() 
       { 
        try{//open connection + execute command + do something else} 
        catch{//do something} 
       } 
} 

try 
{ 
    using (SqlConnection connection = CreateSqlConnection(connString)) 
    { 
       using (SqlCommand command = CreateSqlCommand() 
       { 
        //open connection + execute command + do something else 
       } 
    } 
} 
catch 
{ 
//do something 
} 

回答

5

從我的角度來看:

try 
{ 
    using (SqlConnection connection = CreateSqlConnection(connString)) 
    { 
       using (SqlCommand command = CreateSqlCommand() 
       { 
        //open connection + execute command + do something else 
       } 
    } 
} 
catch 
{ 
//do something 
} 

以上是正確的做法。

因爲,用這種方法,如果有與數據庫連接的異常,那將會被捕獲到catch塊中。但是用第一種方法,它不會。

+0

我也同意,但使用statment本身是有問題的,犯規它的行爲類似於try,catch和finally函數?如果是這樣,是否需要包裝使用功能? – lemunk

+0

但是這並不反對:'嘗試{使用(...){嘗試{}}}'。另外,你正在**''using'語句中打開連接**,而不是在外面,所以爲什麼我應該用'Try-Catch'來包圍使用本身,這是一個不同的範圍。你很有可能抓得太多,這很糟糕。 –

+0

但從我的角度來看,從上面的選擇第二個更好 –

1

兩者都是正確的,因爲如果出現錯誤,兩者都會關閉一次性資源。

放置try-catch-statement的位置應該取決於您想要對該信息做什麼,即如果您想對與SqlCommand本身有關的錯誤或更常見的SQL錯誤作出反應,那也可能涉及連接。

1

就個人而言,我認爲最好的辦法是 - 那麼連接,而不管關閉,你會得到更好的處理異常,如你所願

using (SqlConnection connection = CreateSqlConnection(connString)) 
{ 
    using (SqlCommand command = CreateSqlCommand()) 
    { 
      try { //open connection, execute } 
      catch { // log and handle exception } 
      finally { // check connection state and close if required } 
    } 
}