Nếu kết nối được mở trước khi các phương pháp Fill() được gọi, thì không có, kết nối sẽ không được đóng lại bằng DataAdapter.
Tuy nhiên, nếu bạn không mở kết nối một cách rõ ràng, và thay vào đó hãy để DataAdapter mở và đóng kết nối trong lệnh Fill(), thì kết nối sẽ bị đóng do lỗi.
này có thể ngụ ý từ nhiều nguồn tài liệu, trong đó có một này: Data Access Strategies Using ADO.NET and SQL
Hơn nữa, điều này có thể được chứng minh trong mã bằng cách viết một thói quen mà sẽ báo lỗi ra ngoài và sau đó kiểm tra Nhà nước của kết nối.
Mã này từ ứng dụng Windows Forms chứng minh điều đó. Hộp tin nhắn đầu tiên sẽ hiển thị "Mở" và hộp thứ hai "Đã đóng".
string connString = "";
private void Form1_Load(object sender, EventArgs e)
{
connString = Properties.Settings.Default.EventLoggingConnectionString;
ExplicitlyOpenConnection();
LetDataAdapterHandleIt();
}
private void ExplicitlyOpenConnection()
{
System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.SqlConnection(connString);
System.Data.DataSet ds = new DataSet();
System.Data.SqlClient.SqlDataAdapter ad = new System.Data.SqlClient.SqlDataAdapter("Select bogusdata from nonexistenttable", cn);
cn.Open();
try
{
ad.Fill(ds);
}
catch (Exception ex)
{
}
MessageBox.Show(cn.State.ToString());
cn.Close();
}
private void LetDataAdapterHandleIt()
{
System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.SqlConnection(connString);
System.Data.DataSet ds = new DataSet();
System.Data.SqlClient.SqlDataAdapter ad = new System.Data.SqlClient.SqlDataAdapter("Select bogusdata from nonexistenttable", cn);
try
{
ad.Fill(ds);
}
catch (Exception ex)
{
}
MessageBox.Show(cn.State.ToString());
}
Mà không biết chính xác, tôi sẽ giả định rằng nó có, mặc dù. Tuy nhiên bạn có thể sử dụng Reflector (http://www.red-gate.com/products/reflector/) để xem xét việc triển khai và xem liệu nó có thực hiện cuối cùng hay không. – AxelEckenberger