バックナンバー: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.