ListPage

2010年5月19日水曜日

研修用クラス群

研修用 クラス群


使用するクラス
ユーザーインターフェイス Form1
データアクセスクラス DataAccess
データインターフェイスクラスIDataAccess
データクラス Data

画面構成

担当者ID
氏名
年齢



使用テーブル構成

FIELD TYPE
ID NUMBER (5)
NAME VARCHAR (20)
AGE NUMBER (2)
IMAGE VARCHAR (255)


Form1(ユーザーインターフェイス)


using System;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Yahoo_Sample_WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            AddOnFormControlEvent();
            InitializeOnFormControl();
        }
        private void AddOnFormControlEvent()
        {
            this.button1.Click += new System.EventHandler(this.button1_Click);
            this.button2.Click += new System.EventHandler(this.button2_Click);
            this.button3.Click += new System.EventHandler(this.button3_Click);
        }

        private void InitializeOnFormControl()
        {
            this.lblID.Text = "ID";
            this.lblName.Text ="Name";
            this.lblAge.Text ="Age";
            this.pictureBox1.Image = null;
            this.txtDispID.Text = string.Empty;
            this.txtDispName.Text = string.Empty;
            this.txtDispAge.Text = string.Empty;
        }
        private void button1_Click(object sender, EventArgs e)
        {

        }
        private void button2_Click(object sender, EventArgs e)
        {

        }
        private void button3_Click(object sender, EventArgs e)
        {

        }
    }
}

各、ボタンイベントにて動作の発動を行います。他処理としてInitializeOnFormControlやAddOnFormControlEvent等を
Form1クラスのコンストラクタで呼び出すように設定します。

戻る

DataAccess(データアクセスクラス)


概要

DataAccessクラスでは、データベースに対してクエリを発行します。Insert UpDate Delete Select文を発行します。
SQLやデータの構造上、かなりのバリエーションが必要になる為基本の4つを今回は採用する事にしました。
各パラメーターはDataクラスに対応しており、データクラスに事前に値を設定してあれば基本4つのクエリを発行します。
その為、例えば特定のデータを1件のみ必ず毎回取得するような場合には新たにデータベースアクセスクラスにメソッドを追加します。


using System;
using System.Data.OleDb;

namespace Yahoo_Sample_WindowsFormsApplication1
{
     public class DataAccess : IDataAccess
     {
         private int _ID;
         public DataAccess(int ID)
         {
             _ID = ID;
         }

         public DataAccess(){}

         public bool ExistenceData()
         {
            OleDbConnection OleDbConnection1 = new OleDbConnection();
            OleDbConnection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" +
            @"C:\Documents and Settings\***\My Documents\db1.mdb";

            OleDbCommand OleDbCommand1 = new OleDbCommand();
            OleDbCommand1.Connection = OleDbConnection1;

            OleDbConnection1.Open();

            OleDbCommand1.CommandText="SELECT COUNT(*) FROM sampleTable";
            OleDbCommand1.CommandText += "WHERE ID = @ID";

            OleDbCommand1.Parameters.Add("@ID", OleDbType.Char, 5).Value = _ID;

            int counter = (int)OleDbCommand1.ExecuteScalar();
            if (counter > 0) 
            { return true; }
            else { return false; }
         }

         public bool InsertData(Data data1)
         {
             OleDbConnection OleDbConnection1 = new OleDbConnection();
             OleDbConnection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" +
             @"C:\Documents and Settings\***\My Documents\db1.mdb";

             OleDbCommand OleDbCommand1 = new OleDbCommand();
             OleDbCommand1.Connection = OleDbConnection1;

             OleDbConnection1.Open();

             OleDbCommand1.CommandText = "INSERT INTO sampleTable" +
                 "(ID, NAME, AGE, IMAGE) VALUES (@ID, @NAME, @AGE, @IMAGE)";

             OleDbCommand1.Parameters.Add("@ID", OleDbType.Char, 5).Value = data1.ID;
             OleDbCommand1.Parameters.Add("@NAME", OleDbType.Char, 50).Value = data1.Name;
             OleDbCommand1.Parameters.Add("@AGE", OleDbType.Char, 2).Value = data1.Age;
             OleDbCommand1.Parameters.Add("@IMAGE", OleDbType.Char, 255).Value = data1.Image;

             if (this.ExistenceData() != true)
             {
                 OleDbCommand1.ExecuteNonQuery();
                 return true;
             }
             else{return  false;}
         }
         public bool DeleteData(Data data1)
         {
             OleDbConnection OleDbConnection1 = new OleDbConnection();
             OleDbConnection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" +
             @"C:\Documents and Settings\***\My Documents\db1.mdb";

             OleDbCommand OleDbCommand1 = new OleDbCommand();
             OleDbCommand1.Connection = OleDbConnection1;

             OleDbConnection1.Open();

             OleDbCommand1.CommandText = "DELETE FROM sampleTable WHERE ID = @ID";

             OleDbCommand1.Parameters.Add("@ID", OleDbType.Char, 5).Value = data1.ID;

             if (this.ExistenceData() != true)
             {
                 OleDbCommand1.ExecuteNonQuery();
                 return true;
             }
             else { return false; }
         }

         public bool UpDateData(Data data1)
         {
             OleDbConnection OleDbConnection1 = new OleDbConnection();
             OleDbConnection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" +
             @"C:\Documents and Settings\***\My Documents\db1.mdb";

             OleDbCommand OleDbCommand1 = new OleDbCommand();
             OleDbCommand1.Connection = OleDbConnection1;

             OleDbConnection1.Open();

             OleDbCommand1.CommandText = "UPDATA sampleTable SET NAME = @NAME, AGE = @AGE, IMAGE = @IMAGE" +
                 " WHERE ID = @ID";

      OleDbCommand1.Parameters.Add("@ID", OleDbType.Char, 5).Value = data1.ID;
             OleDbCommand1.Parameters.Add("@NAME", OleDbType.Char, 50).Value = data1.Name;
             OleDbCommand1.Parameters.Add("@AGE", OleDbType.Char, 2).Value = data1.Age;
             OleDbCommand1.Parameters.Add("@IMAGE", OleDbType.Char, 255).Value = data1.Image;

             if (this.ExistenceData() != true)
             {
                 OleDbCommand1.ExecuteNonQuery();
                 return true;
             }
             else { return false; }
         }
  
  /// 
         /// dataSetを返す
         /// 
         /// SELECT文を発行し全てのデータを取得しDataSetで返す
         public System.Data.DataSet SelectData()
         {
             OleDbConnection OleDbConnection1 = new OleDbConnection();
             OleDbConnection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" +
             @"C:\Documents and Settings\***\My Documents\db1.mdb";

             OleDbConnection1.Open();

             string selectCommandText = "SELECT * FROM sampleTable";

             OleDbDataAdapter adapter1 = new OleDbDataAdapter(selectCommandText, OleDbConnection1);

             System.Data.DataSet dataset1 = new System.Data.DataSet();
             
             adapter1.Fill(dataset1);

             return dataset1;
         }
     }
}

Insert時のIDはnotnullの為このままでは使用できません。dataクラスにてどうにかしてコーディングするように提案を行います。
私的見解では、データベース側のトリガーを使用したほうが良いと思います。

戻る

データアクセスインターフェイス


概要

研修用の為インターフェイスの使い方のみを言及した形のクラスになります。


using System;

namespace Yahoo_Sample_WindowsFormsApplication1
{
    interface IDataAccess
    {
          bool ExistenceData();
          bool InsertData(Data value);
          bool UpDateData(Data value);
          bool DeleteData(Data value);
          DataSet SelectData();
    }
}
戻る

Data(データクラス)

概要

コンストラクタを2つに設定します。この場合、引数がある場合の用途とない場合の用途を考えてます。
例えば、現状のDataAccessクラスのSelectDataを使用する場合等はIDの指定等が必要ない場合がある為です。
しかし、このままのデータクラスでは全てのデータ形式に対応できない事を明確にします。

理由として、NAMEフィールド{"山","朗"}という文字列があるフィールドに追加したりそのデータを探したりする場合には
Nameプロパティを使用する事はできません。このような場合の対応の仕方を考えて下さい。

using System;
using System.Windows.Forms;
using System.Text;
using System.Text.RegularExpressions;

namespace Yahoo_Sample_WindowsFormsApplication1
{
    public  class Data
    {
        private IDataAccess mydata;
        public Data(string ID)
        {
            if (ID!= string.Empty)
            {
                Regex regex1 = new Regex("^[0-9]+$");
                if (!regex1.IsMatch(ID))
                { MessageBox.Show("not String); }
                else
                {
                    mydata = new DataAccess(int.Parse(ID));
                }
            }
            else
            {
                MessageBox.Show("Nothing");
            }
        }
        public Data() {}
#region property
        private int _ID;
        public int ID
        {
            get{return _ID;}
            set{_ID = value;}
        }
        private string _Name = string.Empty;
        public string Name
        {
            get{return _Name;}
            set{_Name = value;}
        }
        private int _Age;
        public int Age
        {
            get{return _Age;}
            set{_Age =value;}
        }
        private string _Image;
        public string Image
        {
            get { return _Image; }
            set{_Image = value;}
        }
#endregion
    }
}
戻る

0 件のコメント:

コメントを投稿