2010-07-30 26 views
14

Trong Dal của tôi, tôi viết các truy vấn như thế này:Đóng SqlConnection và SqlCommand C#

using(SQLConnection conn = "connection string here") 
{ 
    SQLCommand cmd = new ("sql query", conn); 
    // execute it blah blah 
} 

Bây giờ nó chỉ xảy ra với tôi rằng tôi không đóng cửa một cách rõ ràng đối tượng SqlCommand. Bây giờ tôi biết khối 'sử dụng' sẽ xử lý đối tượng SQLConnection, nhưng điều này cũng sẽ xử lý đối tượng SQLCommand? Nếu không phải là tôi có một vấn đề nghiêm trọng. Tôi sẽ phải đưa vào 'sử dụng' trên SQLCommand trên hàng ngàn và hàng ngàn dòng mã hoặc làm một cmd.Close() trên hàng trăm phương pháp. Xin vui lòng cho tôi biết rằng nếu đưa vào sử dụng hoặc đóng lệnh sẽ cung cấp một quản lý bộ nhớ tốt hơn của ứng dụng web?

+0

Tôi nghĩ rằng đây cũng nên thú vị cho bạn: http://valueinjecter.codeplex.com/ wikipage? title = Dữ liệu% 20access% 20layer% 20% 28ORM% 29% 20with% 20the% 20Value% 20Injecter & referringTitle = Trang chủ – Omu

Trả lời

9

Không, câu lệnh using sẽ không xử lý lệnh.

Bạn nên quấn lệnh với using báo cáo là tốt, vì đây đúng cách sẽ gọi Dispose trên chúng:

using(SQLConnection conn = 'connection string here') 
{ 
    using(SQLCommand cmd = new ('sql query', conn)) 
    { 
     //execute it blah blah 
    } 
} 
12

Các SqlConnection không có kiến ​​thức về SqlCommand, vì vậy bạn nên đóng nó bằng cách riêng của mình:

using (SqlConnection conn = new SqlConnection("connection string here")) 
using (SqlCommand cmd = new SqlCommand("sql query", conn)) 
{ 
    // execute it blah blah 
} 
4

Nó sẽ không xử lý các SqlCommand, nhưng SqlCommand sẽ cuối cùng được xử lý bởi các nhà sưu tập rác. Tôi có xu hướng thực hiện những việc sau:

using (SqlConn conn ...) 
using (SqlComm comm ...) 
{ 
    conn.Open(); 
} 

Việc sắp xếp các câu lệnh sử dụng ở đây sẽ xử lý cả hai.

Các vấn đề liên quan