Si la conexión está abierta antes de llamar al método Fill(), entonces no, la conexión no se cerrará por el adaptador de datos.
Sin embargo, si no abre explícitamente la conexión, y en su lugar deja que el DataAdapter abra y cierre la conexión dentro del comando Fill(), la conexión se cerrará en caso de error.
Esto puede deducirse de varias fuentes de documentación, incluyendo éste: Data Access Strategies Using ADO.NET and SQL
Además, esto puede ser demostrado en el código escribiendo una rutina que el error fuera y luego la comprobación del estado de la conexión.
Este código de una aplicación de Windows Forms lo demuestra. El primer cuadro de mensaje dirá "Abrir" y el segundo "Cerrado".
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());
}
Sin saberlo exactamente, supongo que sí. Sin embargo, puede usar Reflector (http://www.red-gate.com/products/reflector/) para examinar la implementación y ver si implementa finalmente. – AxelEckenberger