dbからデータを取得するための以下のコードがあり、Visual Studioからコード分析を実行すると、SqlConnection
オブジェクトでdisposeメソッドを呼び出すように提案されます。DataTable
SqlDataAdapter
SqlConnection sqlconn = new SqlConnection(ConfigurationManager.ConnectionStrings["connstr"].ConnectionString);
SqlCommand cmd = sqlconn.CreateCommand();
cmd.CommandText = "SELECT * FROM tbl_serial WHERE serial = @serial";
cmd.Parameters.AddWithValue("@serial", txtQuery.Text);
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter();
try
{
sqlconn.Open();
da.SelectCommand = cmd;
da.Fill(dt);
}
catch (SqlException ex)
{
lblStatus.Text = ex.Message;
}
finally
{
sqlconn.Close();
}
if (dt.Rows.Count > 0)
{
lblStatus.Text = "FOUND!";
}
else
{
lblStatus.Text = "NOT FOUND!";
}
そして、これは私がこれを行うのは初めてです、私はsqlconn
ちょうどこのようにdisposeメソッドを呼び出しました-
finally
{
sqlconn.Close();
sqlconn.Dispose();
}
しかし、その後、VisualStudioはこのように私に警告します-
CA2202:Microsoft.Usage:オブジェクト'sqlconn'は、メソッド'test_search.Unnamed1_Click(object、EventArgs)'で複数回破棄できます。System.ObjectDisposedExceptionの生成を回避するには、オブジェクトに対してDisposeを複数回呼び出さないでください。:行:41
したがって、disposeメソッドを正しく呼び出す必要があるのはいつかを知りたいのです。