Fill()メソッドが呼び出される前に接続が開いている場合、いいえ、接続はDataAdapterによって閉じられません。
ただし、接続を明示的に開かず、代わりにDataAdapterでFill()コマンド内の接続を開いたり閉じたりすると、エラー時に接続が閉じられます。
これは、次のドキュメントを含む複数のドキュメントソースから暗示されている可能性があります。ADO.NETおよびSQLを使用したデータアクセス戦略
さらに、これは、エラーになるルーチンを記述してから接続の状態をチェックすることにより、コードで示すことができます。
Windowsフォームアプリからのこのコードはそれを証明します。最初のメッセージボックスには「開く」、2番目のメッセージボックスには「閉じる」と表示されます。
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());
}