Tuyên bố using
sẽ đã ngăn chặn các kết nối từ tích lũy - nó phía dọn dẹp những thứ cho bạn , bằng cách thực sự là một khối try
/finally
với một cuộc gọi đến Dispose
trong khối finally
. Nếu bạn cũng muốn một khối try
/catch
, bạn có thể đặt nó bên trong hoặc bên ngoài - nhưng bạn có chắc chắn không nên ở cấp cao hơn không? Bạn thực sự mong đợi như thế nào để xử lý ngoại lệ?
Là một sang một bên, nó không phải là rõ ràng lý do tại sao bạn xóa các thông số từ lệnh khi lệnh sắp được xử lý anyway ...
Tôi sẽ khuyến khích bạn khai báo các biến trong using
báo cáo quá , để bạn không phải cố gắng đọc từ họ bên ngoài khối:
using (SqlConnection connSQL = new SqlConnection(strConn)) {
Nói chung, thích cung cấp cho các biến của bạn phạm vi hẹp nhất có thể. Ồ, và số SqlDataReader
của bạn cũng phải có trong tuyên bố using
. Nó có thể không quan trọng như bạn đang đóng kết nối và lệnh anyway, nhưng tôi sẽ làm điều đó như là một điểm của nguyên tắc - nó thực hiện IDisposable
, vì vậy bạn nên xử lý nó.
Ồ, và cách bạn lặp lại trên sqlParameters
là khá dài lúc này. foreach
làm cho nó đơn giản hơn, và thậm chí nếu nó không tôi muốn sử dụng for (int i = 0; i < sqlParameters.Length; i++)
trừ khi tôi có lý do để tin rằng nó không phải là một mảng "đơn giản".
Vì vậy, mã tương đương của tôi sẽ giống như thế này:
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand(strPreparedStatement, connection))
{
if (sqlParameters != null)
{
// If sqlParameter is an array, you can just use
// command.Parameters.AddRange(sqlParameters) instead
foreach (SqlParameter parameter in sqlParameters)
{
command.Parameters.Add(parameter);
}
}
using (SqlDataReader reader = command.ExecuteReader())
{
DataTable table = new DataTable();
// Perform any extra initialization here
table.Load(reader);
return table;
}
}
}
Nguồn
2011-10-27 06:16:44
Thú vị. Tất cả các điểm rất tốt. Tôi đánh giá cao điểm về 'SqlDataReader'. Tôi hoàn toàn bỏ lỡ điều đó. – Andrew
Thấy chỉnh sửa của bạn, lại đơn giản hơn nhiều. Cảm ơn bạn. – Andrew