研修用 クラス群
使用するクラス | |
ユーザーインターフェイス | Form1 |
データアクセスクラス | DataAccess |
データインターフェイスクラス | IDataAccess |
データクラス | Data |
画面構成
使用テーブル構成
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 件のコメント:
コメントを投稿