Если соединение открыто до вызова метода Fill (), то нет, соединение не будет закрыто DataAdapter.
Однако, если вы явно не открываете соединение и вместо этого позволяете DataAdapter открывать и закрывать соединение в команде Fill (), тогда соединение будет закрыто при ошибке.
Это может подразумеваться из нескольких источников документации, включая этот: Стратегии доступа к данным с использованием ADO.NET и SQL
Кроме того, это можно продемонстрировать в коде, написав подпрограмму, которая выдаст ошибку, а затем проверив состояние соединения.
Этот код из приложения Windows Forms подтверждает это. В первом окне сообщения будет указано «Открыто», а во втором - «Закрыто».
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());
}