Không, việc hủy bỏ SqlCommand
sẽ không ảnh hưởng đến Kết nối. Một cách tiếp cận tốt hơn sẽ còn quấn SqlConnection
trong một khối sử dụng cũng như:
using (SqlConnection conn = new SqlConnection(connstring))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(cmdstring, conn))
{
cmd.ExecuteNonQuery();
}
}
Nếu không, kết nối là không thay đổi bởi thực tế là một chỉ huy đã được sử dụng nó đã được xử lý (có lẽ đó là những gì bạn muốn?). Nhưng hãy nhớ, rằng một kết nối nên được xử lý là tốt, và có khả năng quan trọng hơn để xử lý hơn một lệnh.
EDIT:
tôi chỉ thử nghiệm này:
SqlConnection conn = new SqlConnection(connstring);
conn.Open();
using (SqlCommand cmd = new SqlCommand("select field from table where fieldid = 1", conn))
{
Console.WriteLine(cmd.ExecuteScalar().ToString());
}
using (SqlCommand cmd = new SqlCommand("select field from table where fieldid = 2", conn))
{
Console.WriteLine(cmd.ExecuteScalar().ToString());
}
conn.Dispose();
Lệnh đầu tiên được xử lý khi khối sử dụng được kết thúc. Kết nối vẫn mở và tốt cho lệnh thứ hai.
Vì vậy, việc vứt bỏ lệnh chắc chắn sẽ không loại bỏ kết nối đang sử dụng.
Nguồn
2008-09-13 22:20:59
Sau khi xử lý SqlCommand com, trường hợp kết nối của nó sẽ không bị hủy bỏ (không được sử dụng bởi bất kỳ thứ gì). Vì vậy, khi GarbageCollector hoàn thành cá thể SqlConnection, sẽ không kết nối được xử lý? Tôi nghĩ rằng nó sẽ được, bởi vì kết nối được tham chiếu bởi chỉ cmd ở đây. – mecek
Cũng trong trường hợp đó, @ Mecek, bộ nhớ sẽ được giải phóng khó hơn vì nó sẽ đi qua quyết toán mà sẽ thúc đẩy nó từ gen0 đến gen1, tôi đoán vậy. –