đến bây giờ tôi luôn luôn sử dụng một cấu trúc tương tự để lấy dữ liệu từ DB và điền vào một DataTableVứt bỏ lệnh SQL và đóng kết nối
public static DataTable GetByID(int testID)
{
DataTable table = new DataTable();
string query = @"SELECT * FROM tbl_Test AS T WHERE T.testID = @testID";
using (SqlConnection cn = new SqlConnection(Configuration.DefaultConnectionString))
{
SqlCommand cmd = new SqlCommand(query, cn);
cmd.Parameters.Add("@testID", SqlDbType.Int).Value = testID;
cn.Open();
table.Load(cmd.ExecuteReader());
}
return table;
}
Bây giờ tôi thấy một số cảnh báo trong phân tích xây dựng:
TestService. cs (37): CA2000: Microsoft.Reliability: Trong phương thức 'TestService.GetByID (int)', đối tượng 'table' không được xử lý dọc theo tất cả các đường dẫn ngoại lệ. Gọi System.IDisposable.Dispose trên đối tượng 'table' trước khi tất cả các tham chiếu đến nó nằm ngoài phạm vi.
TestService.cs (42): CA2000: Microsoft.Reliability: Trong phương thức 'TestService.GetByID (int)', hãy gọi System.IDisposable.Dispose trên đối tượng 'cmd' trước khi tất cả các tham chiếu đến nó nằm ngoài phạm vi.
Tôi có nên thay đổi mã của tôi trong
public static DataTable GetByID(int testID)
{
DataTable table = new DataTable();
string query = @"SELECT * FROM tbl_Test AS T WHERE T.testID = @testID";
using (SqlConnection cn = new SqlConnection(Configuration.DefaultConnectionString))
{
using (SqlCommand cmd = new SqlCommand(query, cn))
{
cmd.Parameters.Add("@testID", SqlDbType.Int).Value = testID;
cn.Open();
table.Load(cmd.ExecuteReader());
}
}
return table;
}
Phải làm gì với đối tượng DataTable? Có thực hành tốt để đặt SqlCommand bên trong việc sử dụng không?
Cảm ơn
Cheers
Yes. Mã của bạn là chính xác ngay bây giờ. Luôn loại bỏ lớp thực hiện IDisposable. Nhưng SqlDataReader cũng dùng một lần? – lnu
Bạn có vứt bỏ DataTable mà bạn quay trở lại không? – Kangkan
Tôi tin rằng người đọc là dùng một lần có, và có lẽ đó là vấn đề WRT bảng không được xử lý vì nó giữ một người đọc mà không được đóng một cách rõ ràng, mặc dù tôi hy vọng nó sẽ được đóng kín khi cmd được xử lý. –