私の質問に対する答えを見つけるために無数のトピックを読むのにうんざりしていたので、この主題に関するさらに別のトピック:)
次のクラスがあるとしましょう。
public class MyClass
{
private const string conString = "connection string";
private int Operation()
{
int count = 0;
using(var con = SqlConnection(conString))
{
string select_cmd = "SELECT * FROM TABLE";
using(var cmd = new SqlCommand(select_cmd, con))
{
using(var reader = cmd.ExecuteReader())
{
while(reader != null && reader.Read())
count++;
}
}
}
return count;
}
}
データベースへの接続はusingステートメント内でインスタンス化されるため、con.close()メソッドと最終的にはcon.dispose()メソッドが呼び出されますが、MyClassにIDisposableを実装する必要がありますか?MyClassは、スコープ外になるとガベージコレクションされますか?
編集:
お返事ありがとうございます、それは私が思ったことですが、それを明確にする必要がありました。もう1つ質問があります。
私のクラスにデータベースで何らかの作業を行う複数のOperations()がある場合、リソース消費の観点から、SqlConnectionメンバーを作成し、クラスコンストラクターでインスタンス化して開き、IDisposableを実装して閉じるのではなく実行することをお勧めします。各操作で「using」ステートメントを使用する(各操作でデータベースを開いたり閉じたりする)?もちろん、その方法では、ステートメントを使用する際にMyClassオブジェクトをインスタンス化して使用する必要があります。