研修用 クラス群
使用するクラス |
ユーザーインターフェイス | Form1 |
データアクセスクラス | DataAccess |
データインターフェイスクラス | IDataAccess |
データクラス | Data |
画面構成
使用テーブル構成
FIELD | TYPE |
ID | NUMBER (5) |
NAME | VARCHAR (20) |
AGE | NUMBER (2) |
IMAGE | VARCHAR (255) |
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
}
}
戻る