2008-10-21 152 views

回答

3

命令可能出錯的方式很多。

最終,數據讀取器的Close方法會關閉連接,前提是沒有出錯。

如果在構造實際的DataReader對象之前發生了ExecuteReader或其任何調用方法內部的異常,則no,連接將不會關閉。

如果發生異常,我不會信任它來關閉連接。

0

這取決於發生異常的地方!

如果你正確地構建你的try catch,它會沒事的。

例如:

SqlCommand myCommand = new SqlCommand(); 

try 
{ 
    myCommand.dostuff(); 
} 
catch(Exception ex) 
{ 
    // display error message 
} 
finally 
{ 
    myCommand.ExecuteReader(CommandBehavior.CloseConnection); 
} 

如果行:myCommand.ExecuteReader(CommandBehavior.CloseConnection)失敗(?也許是數據庫已經下降),那麼連接不能以編程方式關閉。

7

做一個「正常」的查詢最安全的方式是

using (var conn = new SqlConnection("...")) 
{ 
    conn.Open(); 
    using (var cmd = conn.CreateCommand()) 
    { 
     cmd.CommandText = "..."; 
     using (var reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       // ... 
      } 
     } 
    } 
} 

例外可以將此代碼之外被抓住。