Tôi có mã dưới đây để truy vấn hồ sơ từ một thủ tục đã lưu trữ nhưng có liên quan tôi có thể không xử lý những gì tôi cần hoặc đang xử lý khi đối tượng sẽ bị xóa bởi Garbage Collector ngay sau đó.C# sql gì cần vứt bỏ
Tôi có cần phải vứt bỏ SqlDataReader vì nó nằm trong khối try catch không?
Tôi có cần chạy cả cmd.Dispose và cmd.Connection.Close hay không suy luận cái kia?
Nhà sưu tập rác cuối cùng sẽ xử lý tất cả các đối tượng này (có thể không đủ kịp thời) hoặc các đối tượng này có đòi hỏi phải vứt bỏ có thể do sử dụng mã không được quản lý không?
public void GetData(string studentID)
{
SqlCommand cmd = new SqlCommand("sp_stored_proc",
new SqlConnection(Settings.Default.connectionString))
{ CommandType = CommandType.StoredProcedure };
try
{
cmd.Connection.Open();
cmd.Parameters.AddWithValue("@student_id", studentID);
SqlDataReader dr = cmd.ExecuteReader();
//do something with the data
if (dr != null)
dr.Dispose();
}
catch
{
//error handling
}
finally
{
if (cmd != null)
{
cmd.Dispose();
cmd.Connection.Close();
}
}
}
Nếu tôi có thể upvote điều này nhiều hơn một lần, tôi sẽ. BẮT ĐẦU VÀO NGƯỜI! SỬ DỤNG SỬ DỤNG KHÓA! –
Việc hủy bỏ đối tượng 'SqlCommand' sẽ không ** hủy bỏ' SqlConnection'. Điều này rất dễ dàng để kiểm tra. http://stackoverflow.com/questions/60919/is-sqlcommand-dispose-enough/60934#60934 – arcain
Tôi có phải vứt bỏ người đọc ngay cả khi tôi vứt bỏ lệnh không? Tôi có phải vứt bỏ lệnh ngay cả khi tôi bỏ kết nối không? Bạn có thể giới thiệu chúng tôi với bất kỳ nguồn nào trong số này không? – Lii