バックナンバー:VB.NETデータベースプログラミング
ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。
【第26号】
第26号(2005.5.18発行)
======================================================================
★★ VB.NETデータベースプログラミング奮闘記 ★★
----------------------------------------------------------------------
いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを中
心に掲載しますので、今後ともよろしくお願い申し上げます。
すぐ使えるADO.NET --> サンプルプログラム満載
http://park5.wakwak.com/‾weblab/
======================================================================
■■ VB.NETワンポイント:列挙型Enum ■■
列挙型Enumは、ある特定の整数値しか代入できないデータ型で、任意につくる
ことができます。数値にわかりやすい名前をつけておけば、数値が何を意味す
るのかがわかりやすくなります。基本的な定義方法は、次のようになります。
Enum enumPlanet
Mercury
Venus
Earth
Mars
End Enum
As句を省略すると、Integer型になります。Enumの値は整数値に限られますの
で、As句を指定する場合は、Byte, Short, Integer, Longのいずれかの型にな
ります。
値を指定しない場合は、先頭の名前が0となり、以降の名前は、順に+1した値
になります。
Console.WriteLine(enumPlanet.Mercury) 'enumPlanet.Mercury = 0
Console.WriteLine(enumPlanet.Venus) 'enumPlanet.Venus = 1
Console.WriteLine(enumPlanet.Earth) 'enumPlanet.Earth = 2
Console.WriteLine(enumPlanet.Mars) 'enumPlanet.Mars = 3
'列挙型enumPlanetの変数定義及び代入
Dim wakusei As enumPlanet
wakusei = enumPlanet.Earth
Console.WriteLine(wakusei) 'wakusei = 2
名前に値を指定すると、指定した名前がその値となり、以降の名前は、順に+1
した値になります。
Enum enumPlanet2
Mercury
Venus = -5
Earth
Mars
End Enum
Dim wakusei2 As enumPlanet2
wakusei2 = enumPlanet2.Earth
Console.WriteLine(wakusei2) 'wakusei2 = -4
----------------------------------------------------------------------
■■ DataTableとTextBoxをバインドする ■■
検索ボタンをクリックすると、入力した社員コードのエラーチェックをして、
エラーが無ければ、社員テーブルから該当レコードをDataTableオブジェクト
に取得し、TextBoxにバインドして、社員氏名と社員カナを表示します。
使用するテーブルは、sample.mdbの社員テーブルです。
------------------------------------------------------------
key フィールド名 データ型 サイズ 値要求 空文字列の許可
------------------------------------------------------------
○ 社員コード テキスト型 5 はい いいえ
− 社員氏名 テキスト型 20 はい いいえ
− 社員カナ テキスト型 40 いいえ はい
− 部門コード テキスト型 3 はい いいえ
− 更新日時 日付/時刻型 − はい −
------------------------------------------------------------
◆プロジェクトをひとつ作成します。フォームに下記のコントロールを貼り付
けます。プロパティを図のように設定します。
また、txtSyainSimeiとtxtSyainKanaは、読取専用で使うため、入力不可にし
てフォーカスがあたらないように、次のプロパティも変更します。
ReadOnly:True、TabStop:False
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ DataTableとTextBoxのバインド _□×┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ Label1 txtSyainCode BtnKensaku
┃┌―――――┐ ┌―――――┐ ┌――――┐
┃│社員コード│ │ │ │ 検索 │
┃└―――――┘ └―――――┘ └――――┘
┃ Label2 txtSyainSimei
┃┌―――――┐ ┌――――――――┐
┃│社員氏名 │ │ │
┃└―――――┘ └――――――――┘
┃ Label3 txtSyainKana
┃┌―――――┐ ┌――――――――┐
┃│社員カナ │ │ │
┃└―――――┘ └――――――――┘
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
エラーチェックは、社員検索クラスclsSyainKensakuのSetプロパティに実装
します。入力エラーがあれば、clsExceptionクラスの例外をスローします。
clsException例外クラスは、独自のエラーメッセージを表示するためのクラス
として実装します。
DBアクセス処理は、clsDBIOクラスに実装します。
----------------------------------------------------------------------
テキストボックスにテーブル列を連結するためには、DataBindingsコレクショ
ンプロパティのaddメソッドを呼び出します。addメソッドには、3個の引数を
指定します。今回の場合は次のようになります。
Me.txtSyainSimei.DataBindings.Add("Text", oTable, "社員氏名")
テキストボックスコントロールが、BindingContextオブジェクトをとおして、
データテーブルoTableの社員氏名フィールド(列)に連結されます。同様に社員
カナフィールド(列)に連結するには、
Me.txtSyainKana.DataBindings.Add("Text", oTable, "社員カナ")
とします。"Text"は、テキストボックスのプロパティ名で、テキストボックス
にフィールド(列)の値が表示されるようになります。DataTable型のoTableに
は、入力した社員コードに一致する社員テーブルレコード(行)が格納されてい
ます。
--【プログラムソースリスト:Form1.vb】--------------------------------
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Windows フォーム デザイナで生成されたコード "
'自動生成部分省略
#End Region
Private oTable As New DataTable()
'検索ボタンをクリックしたときの処理
Private Sub btnKensaku_Click( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btnKensaku.Click
Dim oTblSyain As New clsDBIO()
Dim oSyain As New clsSyainKensaku()
Try
'入力項目のエラーチェック
oSyain.p社員コード = Me.txtSyainCode.Text
oTable = oTblSyain.getSyainRec(Me.txtSyainCode.Text)
'テキストボックスにテーブル列を連結
Me.txtSyainSimei.DataBindings.Add("Text", oTable, "社員氏名")
Me.txtSyainKana.DataBindings.Add("Text", oTable, "社員カナ")
Catch oExcept As clsException
'例外が発生した時の処理
MessageBox.Show(oExcept.Message, "エラー発生")
Catch oExcept As Exception
'例外が発生した時の処理
MessageBox.Show(oExcept.ToString, "例外発生")
End Try
End Sub
End Class
--【プログラムソースリスト:clsSyainKensaku.vb】----------------------
Imports System.Text.RegularExpressions
Public Class clsSyainKensaku
'---------------<< 変数 >>---------------
Private m社員コード As String
Private mDBIO As clsDBIO
'---------------<< コンストラクタ >>---------------
Public Sub New()
'必ず1行目に記述(コンストラクタに引数のない場合は省略可能)
MyBase.New()
Try
'DBアクセスオブジェクト生成
mDBIO = New clsDBIO()
Catch oExcept As Exception
Throw New Exception _
("clsDBIOのコンストラクタで例外発生. " + oExcept.ToString)
End Try
End Sub
'---------------<< プロパティ >>---------------
'◆社員コードプロパティ
Public Property p社員コード() As String
'◇Getプロパティ
Get
Return m社員コード
End Get
'◇Setプロパティ
Set(ByVal Value As String)
'********** 入力値エラーチェック **********
'数字以外はエラー
If Not Regex.IsMatch(Value, "^[0-9]+$") Then
Throw New clsException("社員コードは数字で入力してください")
End If
'5桁以外はエラー
If Not Value.Length = 5 Then
Throw New clsException("社員コードは5桁で入力してください")
End If
'社員マスタになければエラー
If mDBIO.existKeySyain(Value) = False Then
Throw New clsException("この社員コードは未登録です")
End If
m社員コード = Value
End Set
End Property
End Class
--【プログラムソースリスト:clsException.vb】-------------------------
Public Class clsException
Inherits ApplicationException
Public Sub New(ByVal errorMessage As String)
MyBase.New(errorMessage)
End Sub
End Class
--【プログラムソースリスト:clsDBIO.vb】------------------------------
Imports System.Data.OleDb
Public Class clsDBIO
'--------------------< メンバ:変数 >--------------------
'コネクション
Private mConn As OleDbConnection
'コマンド
Private mCommand As OleDbCommand
'*******************************************************************
' 機能:コンストラクタ
' 引数:なし
'*******************************************************************
Public Sub New()
Try
'DB接続文字列の設定
mConn = New OleDbConnection()
mConn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" _
& Application.StartupPath & "¥sample.mdb"
'コネクションオブジェクトの設定
mCommand = New OleDbCommand()
mCommand.Connection = mConn
Catch oExcept As Exception
Throw New Exception _
("clsDBIOのコンストラクタで例外発生" + oExcept.ToString)
End Try
End Sub
'*******************************************************************
' 機能:引数にした社員コードのレコードを社員テーブルから取得する
' 引数:String型:取得する社員コード
' 戻値:DataTable型
'*******************************************************************
Public Function getSyainRec(ByVal parCode As String) As DataTable
Dim retDataTable As New DataTable() 'リターン値
Dim dataAdapter As New OleDbDataAdapter()
Try
'SQL文設定
mCommand.CommandText = "SELECT * FROM 社員テーブル " + _
"WHERE 社員コード = " + "'" + parCode + "'"
'テーブルからレコード取得
dataAdapter.SelectCommand = mCommand
dataAdapter.Fill(retDataTable)
Catch oExcept As Exception
Throw New Exception _
("clsTableSyainのgetAllRecで例外発生" + oExcept.ToString)
End Try
Return retDataTable
End Function
'*******************************************************************
' 機能:社員テーブルのキー値のレコードの有無を調べる
' 引数:キー値
' 戻値:ある-->True、ない-->False
'*******************************************************************
Public Function existKeySyain(ByVal parKey As String) As Boolean
Dim retBool As Boolean 'リターン値
Try
'SQL文設定
mCommand.CommandText = _
"SELECT COUNT(*) FROM 社員テーブル WHERE 社員コード = @Key"
'***** SQL文の引数設定 *****
mCommand.Parameters.Clear()
mCommand.Parameters.Add( _
New OleDbParameter("@key", OleDbType.Char, 5))
'----------< コマンドパラメータに値を設定 >----------
mCommand.Parameters("@key").Value = parKey 'キー値の設定
'DB接続を開く
mConn.Open()
'レコード件数取得
Dim Count As Integer = CInt(mCommand.ExecuteScalar())
'----------< 戻値を設定 >----------
If Count = 1 Then
retBool = True
Else
retBool = False
End If
Catch oExcept As Exception
Throw New Exception _
("clsTableSyainのexistKeyRecで例外発生" + oExcept.ToString)
End Try
Return retBool
End Function
End Class
----------------------------------------------------------------------
■■ 次号予告 第27号(6月9日発行予定) ■■
1. VB.NETワンポイント
2. DataTableとTextBoxをバインドする2
======================================================================
VB.NET データベースプログラミング奮闘記
http://park5.wakwak.com/‾weblab/
----------------------------------------------------------------------
このメールマガジン(マガジンID: 0000128094)は、
インターネットの本屋さん『まぐまぐ』から配信されています。
http://www.mag2.com/
【購読中止の方法】購読の中止は次のホームページからお願い致します。
http://park5.wakwak.com/‾weblab/
http://www.mag2.com/m/0000128094.htm
----------------------------------------------------------------------
このメールマガジン及び、「すぐ使えるADO.NET」ホームページで公開してい
るソースプログラム・データの利用により生じた損害等については、発行者は
一切責任を負いません。
ソースプログラムの再利用は自由です。著作権は発行者が所有します。
このメールマガジン及び、「すぐ使えるADO.NET」ホームページに掲載されて
いる会社名・製品名等は、各社の登録商標または商標です。
======================================================================
↑このページ(メルマガ:VB.NETデータベース) 先頭へ | すぐ使えるADO.NET ホームへ
Copyright© すぐ使えるADO.NET. All rights reserved.