如果在调用 Fill() 方法之前连接是打开的,那么不,连接不会被 DataAdapter 关闭。
但是,如果您没有显式打开连接,而是让 DataAdapter 在 Fill() 命令中打开和关闭连接,则连接将在出错时关闭。
这可以从多个文档来源中得到暗示,包括这个:使用 ADO.NET 和 SQL 的数据访问策略
此外,这可以通过编写一个将出错的例程然后检查连接的状态在代码中进行演示。
来自 Windows 窗体应用程序的这段代码证明了这一点。第一个消息框将显示“打开”,第二个消息框将显示“关闭”。
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());
}