データベースにアクセスするクラスを作ってみた

データベースにアクセスするクラスを作ってみました。クラスのメソッドはテーブルを更新するメソッド、テーブルのデータを表示するメソッドを作成しました。テーブルを更新するメソッドは引数にSQL文のリストを設定するようにしています。一度に複数のSQL文を実行できるようにしました。デストラクタはあまり使わないようです。そのため、オブジェクトの破棄は各メソッドでtry{} finaly{}でfinalyで指定したほうがよかったのかもしれません。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlServerCe;
class DBAccess
{
    SqlCeConnection conn;

    // コンストラクタ
    public DBAccess(string dsrc, string pwrd){
        conn = null;
        string connection_str = "Data Source = " + dsrc + "; Password ='" + pwrd + "'";
        conn = new SqlCeConnection(connection_str);
        conn.Open();
    }

    // デストラクタ
    ~DBAccess()
    {
        conn.Close();
    }

    // テーブル更新メソッド
    public int RenewalTable(List<string> sql_list)
    {
        try
        {
            // SQL文実行
            SqlCeCommand cmd = conn.CreateCommand();
            foreach (string sql in sql_list){
                cmd.CommandText = sql;
                cmd.ExecuteNonQuery();
            }
            cmd.Dispose();
            return 0;
        }
        catch (Exception e)
        {
            // 例外処理
            Console.WriteLine(e.Message);
            conn.Close();
            return 1;
        }
    }

    // テーブル参照メソッド
    public int ReferenceTable(string table_name)
    {
        try
        {
            // テーブル読み込み
            SqlCeCommand cmd = conn.CreateCommand();
            cmd.CommandText = "SELECT * FROM " + table_name;
            SqlCeDataReader scdr = cmd.ExecuteReader();

            // 画面に表示
            int num = 1;
            while (scdr.Read())
            {
                Console.WriteLine(num + "件目のデータ");
                for (int i = 0; i <= scdr.FieldCount - 1; i++)
                {
                    Console.WriteLine(scdr.GetString(i));
                }
                Console.WriteLine("");
                num++;
            }

            scdr.Close();
            cmd.Dispose();

            return 0;
        }
        catch (Exception e)
        {
            // 例外処理
            Console.WriteLine(e.Message);
            conn.Close();
            return 1;
        }
    }
    
}
class Program
{
    static void Main(string[] args)
    {
        // テーブル更新用SQLリスト作成
        List<string> sql_list = new List<string>();
        
        sql_list.Add("DELETE FROM 電話帳テーブル");
        sql_list.Add("INSERT INTO 電話帳テーブル ([名前], [メールアドレス],[電話番号]) Values('ああああ', 'aaaa.jp', '1111-1111')");
        sql_list.Add("INSERT INTO 電話帳テーブル ([名前], [メールアドレス],[電話番号]) Values('いいいい', 'bbbb.jp', '2222-2222')");
        sql_list.Add("INSERT INTO 電話帳テーブル ([名前], [メールアドレス],[電話番号]) Values('うううう', 'cccc.jp', '3333-3333')");
        sql_list.Add("INSERT INTO 電話帳テーブル ([名前], [メールアドレス],[電話番号]) Values('ええええ', 'dddd.jp', '4444-4444')");
        sql_list.Add("INSERT INTO 電話帳テーブル ([名前], [メールアドレス],[電話番号]) Values('おおおお', 'eeee.jp', '5555-5555')");
        sql_list.Add("UPDATE 電話帳テーブル SET 電話番号 = '9999-9999' where 名前 = 'ああああ'");
        sql_list.Add("DELETE FROM 電話帳テーブル WHERE 名前 = 'うううう'");

        // DBAccessオブジェクト生成
        DBAccess dba = new DBAccess("dbfile3.sdf", "password123");
        int res;
        // テーブル更新
        res = dba.RenewalTable(sql_list);
        sql_list.Clear();
        if (res != 0)
        {
            Console.WriteLine("テーブル更新に失敗しました。");
            Console.ReadLine();
            return;
        }
        
        // テーブル表示
        res = dba.ReferenceTable("電話帳テーブル");
        if (res != 0)
        {
            Console.WriteLine("テーブル表示に失敗しました。");
            Console.ReadLine();
            return;
        }
        
        Console.ReadLine();
        return;

    }
}

プログラムを実行すると以下の画面が表示されます。