C#のデータベース操作についての質問
解決したいこと
環境
OS:Windows10
Visual Studio 2019 Ver16.11.36
.NET Framework Ver 4.8.09037
SQL Server Ver16.0.1000.6
現在勉強中の初心者の為意味不明な質問かもしれませんが予めご了承ください。
次のプログラムを作成しました。
①3つのデータベース操作の共通メソッドを作成。
②作成した共通メソッドを使いメインクラスで初期化時にデータベースへ接続する
③SELECTしてデータを取得
④取得したしたデータから必要なデータを取り出しデータグリッドビューに表示
⑤データベースから切断
そこで質問なのですが、データベース操作をする際は、『レコードオブジェクト』『コマンドオブジェクト』『コネクションオブジェクト』をそれぞれ破棄?しないといけないと聞いたのですが、このソースコードではそれができているのでしょうか。
『コマンドオブジェクト』と『コネクションオブジェクト』はデータベース切断で破棄出来ていて、『レコードオブジェクト』はデータレコーダーのメソッドを呼ぶ際に毎回初期化(NULL代入)しているので大丈夫だと思うのですが、その認識で合っていますか。
以下が実際のソースコードを質問用に簡略化し編集したものです。編集する際に何か誤植があるかもしれませんが実行して求めている結果は得られています。
該当するソースコード
・共通メソッド
--------------------------------------------------------------------------------------
namespace Common
{
public class DB
{
#region 変数宣言
private string _connectionString = ""; // 接続文字列
private SqlConnection _objConnection; // 接続オブジェクト
private SqlTransaction _objTransaction; // トランザクションオブジェクト
#endregion
#region Connect
/// <summary>
/// データベースの接続
/// </summary>
/// <param name="connectionString"></param>
/// <returns></returns>
public bool Connect(string connectionString)
{
this._connectionString = connectionString;
if (this._objConnection == null)
{
try
{
this._objConnection = new SqlConnection(this._connectionString);
this._objConnection.Open();
}
catch
{
return false;
}
}
// 成功
return true;
}
#endregion
#region Disconnect
/// <summary>
/// データベースの切断
/// </summary>
public void Disconnect()
{
if (this._objConnection != null)
{
this._objConnection.Close();
this._objConnection.Dispose();
}
this._objConnection = null;
}
#endregion
/// <summary>
/// 検索SQL実行
/// </summary>
/// <param name="sql">(I) 選択型SQL文</param>
/// <returns>SqlDataReaderオブジェクト</returns>
public SqlDataReader CreateDataReader
(
string sql // (I) 選択型SQL文
)
{
if (this._objConnection == null)
{
this.Connect(this._connectionString);
}
// 実行結果(データリーダー)
SqlDataReader objReader = null;
// 実行
var cmd = new SqlCommand(sql, this._objConnection);
try
{
objReader = cmd.ExecuteReader();
}
catch
{
throw
}
// 結果
return objReader;
}
}
}
------------------------------------------------------------------------------------------------------------------------------
・メインクラス
------------------------------------------------------------------------------------------------------------------------------
namespace DBTest
{
public partial class DBTest : Form
{
#region INIファイルのパス
private const string connectionString = "xxx";
#endregion
#region コンストラクタ
public DBTest()
{
InitializeComponent();
}
#endregion
#region フォーム初期化時
private void DBTest_Shown(object sender, EventArgs e)
{
try
{
//DBクラスをインスタンス
var objDb = new Common.DB();
try
{
if(objDb.Connect(xxx))
{
#region SQL文作成
string sql = $@" yyy ";
#endregion
//データリーダー実行
DbDataReader reader = objDb.CreateDataReader(sql);
//データグリッドビューに表示する処理//
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
//データベース接続解除
objDb.Disconnect();
}
}
#endregion