Mã sau có để mở kết nối nếu có ngoại lệ không?Cách đúng để đóng kết nối cơ sở dữ liệu trong trường hợp ngoại lệ
Tôi đang sử dụng cơ sở dữ liệu ấn bản Microsoft SQL nhỏ gọn.
try
{
SqlCeConnection conn = new SqlCeConnection(ConnectionString);
conn.Open();
using (SqlCeCommand cmd =
new SqlCeCommand("SELECT stuff FROM SomeTable", conn))
{
// do some stuff
}
conn.Close();
}
catch (Exception ex)
{
ExceptionManager.HandleException(ex);
}
Chắc chắn cách tốt hơn là khai báo đối tượng kết nối trước khi thử, thiết lập kết nối bên trong khối thử và đóng nó trong khối cuối cùng?
SqlCeConnection conn = null;
try
{
conn = new SqlCeConnection(ConnectionString);
conn.Open();
using (SqlCeCommand cmd =
new SqlCeCommand("SELECT stuff FROM SomeTable", conn))
{
// do some stuff
}
}
catch (Exception ex)
{
ExceptionManager.HandleException(ex);
}
finally
{
if(conn != null) conn.Close();
}
Tôi vẫn không thể bao quanh đầu. Từ ref: "Nếu SqlCeConnection nằm ngoài phạm vi, nó không bị đóng. Bạn phải đóng kết nối một cách rõ ràng bằng cách gọi Close hoặc Dispose." Trong ví dụ đầu tiên của bạn, bạn không "đóng kết nối rõ ràng". –
Khi sử dụng câu lệnh 'using', nó gọi phương thức' Dispose' trên đối tượng đang được sử dụng, lần lượt gọi phương thức 'Close', trong trường hợp' SqlCeConnection'. Sử dụng một công cụ như ILSpy để xem mã nào được thực hiện khi 'Dispose' được gọi trên' SqlCeConnection'. Xem tài liệu [tại đây] (http://msdn.microsoft.com/en-us/library/bb300654%28v=vs.100%29.aspx). – shahkalpesh