バックナンバー:VB.NETデータベースプログラミング
ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。
【第23号】
第23号(2005.3.14発行) ====================================================================== ★★ VB.NETデータベースプログラミング奮闘記 ★★ ---------------------------------------------------------------------- いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを中 心に掲載しますので、今後ともよろしくお願い申し上げます。 すぐ使えるADO.NET --> サンプルプログラム満載 http://park5.wakwak.com/‾weblab/ ====================================================================== ■■ VB.NETワンポイント:配列の配列の初期化 ■■ 今回は、配列の配列(多段階配列)の初期化方法を紹介します。配列の配列は、 N次元配列と違い、要素の数を一定にする必要はありません。要素の長さは、 トップレベルのみ指定可能です。 '◆配列の要素がない場合 Dim arry1()() As Integer = New Integer()() {} '◆要素の長さのみ初期値に指定(注:トップレベルのみ指定可能) 'arry2(0) = Nothing, arry2(1) = Nothing Dim arry2()() As Integer = New Integer(1)() {} '◆要素の値のみ初期値に指定(要素の長さも決まる) 'arry3(0)(0) = 1, arry3(0)(1) = 2, arry3(0)(2) = 3, 'arry3(1)(0) = 7, arry3(1)(1) = 8 Dim arry3()() As Integer = _ New Integer()() {New Integer() {1, 2, 3}, New Integer() {7, 8}} '結果の確認 Console.WriteLine(arry3(0)(0)) Console.WriteLine(arry3(0)(1)) Console.WriteLine(arry3(0)(2)) Console.WriteLine(arry3(1)(0)) Console.WriteLine(arry3(1)(1)) '◆トップレベル要素の長さと値の初期値を指定 Dim arry4()() As Integer = _ New Integer(1)() {New Integer() {1, 2, 3}, New Integer() {7, 8}} '◆配列の長さを指定して変数のみ宣言し、後から値を代入 'arry5(0) = Nothing, arry5(1) = Nothing Dim arry5(1)() As Integer '値の代入 'arry5(0)(0) = 10, arry5(0)(1) = 20, arry5(0)(2) = 30, 'arry5(1)(0) = 55, arry5(1)(1) = 66 arry5(0) = New Integer() {10, 20, 30} arry5(1) = New Integer() {55, 66} ◆配列の境界外の代入は、実行時エラーになります。 ---------------------------------------------------------------------- ■■ ADO.NETのトランザクション制御 2 ■■ トランザクション制御を使用して、社員テーブルと権限テーブルに登録するプ ログラムを作成します。使用するテーブルの定義は、前号を参照してください。 今回は、社員登録クラスclsSyainTorokuと、独自例外クラスclsExceptionにつ いて説明します。DBアクセスクラスclsDBIOは次回になります。 ◆フォームレイアウトは下記のようになります。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ 社員登録 _□×┃ ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ ┃ Label1 txtSyainCode ┃┌―――――┐ ┌―――――┐ ┃│社員コード│ │ │ ┃└―――――┘ └―――――┘ ┃ Label2 txtSyainSimei ┃┌―――――┐ ┌―――――――――┐ ┃│社員氏名 │ │ │ ┃└―――――┘ └―――――――――┘ ┃ Label3 txtSyainKana ┃┌―――――┐ ┌―――――――――┐ ┃│社員カナ │ │ │ ┃└―――――┘ └―――――――――┘ ┃ Label4 cmbBumonMei lblBumonCode ┃┌―――――┐ ┌――――――――┐ ┌―――┐ ┃│部門コード│ │ │▼│ │ │ ┃└―――――┘ └――――――――┘ └―――┘ ┃ Label5 txtPassWord btnInsert btnClear ┃┌―――――┐ ┌――――――┐ ┌――――┐ ┌――――┐ ┃│パスワード│ │ │ │ 登録 │ │クリア │ ┃└―――――┘ └――――――┘ └――――┘ └――――┘ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ---------------------------------------------------------------------- ◆【社員登録クラスclsSyainToroku】 GetプロパティプロシージャとSetプロパティプロシージャを実装します。 Getプロパティプロシージャは、内部変数の値を取得するだけですので、 Returnステートメントに、リターン値をコーディングします。 Setプロパティプロシージャの引数Valueには、画面からの入力値が渡されます。 このValue値のエラーチェックをして、エラーがなければ、内部変数に格納します。 エラーがあれば、clsExceptionクラスの例外をスローします。 なおエラーチェックでは、正規表現を使ったRegex.IsMatch(Value, "^[0-9]+$") を使用していますが、ひとつ^[0-9]+$の正規表現を説明します。 ^は、先頭文字位置の指定で、[文字-文字]は文字の範囲指定を表していますの で、[0-9]は、0〜9までのいずれかの文字を表します。]の後の+は、0〜9まで のいずれかの文字が、必ず1文字以上連続しているという意味になります。 最後の$は、文字列の最後尾位置の指定です。 したがって、^[0-9]+$ は、文字列の先頭が数字で始まり、1文字以上の数字が 文字列の最後まで連続しているという意味になります。 英数字文字を表現すると、[0-9A-Za-z]となります。今回はここまでとします。 --【プログラムソースリスト】------------------------------------------ Imports System.Data.OleDb Imports System.Text.RegularExpressions Public Class clsSyainToroku '---------------<< 変数 >>--------------- Private m社員コード As String Private m社員氏名 As String Private m社員カナ As String Private m部門コード As String 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のコンストラクタで例外発生" + vbCrLf + 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) = True Then Throw New clsException("この社員コードは登録済です") End If m社員コード = Value End Set End Property '◆社員氏名プロパティ Public Property p社員氏名() As String '◇Getプロパティ Get Return m社員氏名 End Get '◇Setプロパティ Set(ByVal Value As String) '********** 入力値エラーチェック ********** '未入力はエラー If Value = "" Then Throw New clsException("社員氏名を入力してください") End If m社員氏名 = Value End Set End Property '◆社員カナプロパティ Public Property p社員カナ() As String '◇Getプロパティ Get Return m社員カナ End Get '◇Setプロパティ Set(ByVal Value As String) '********** 入力値エラーチェック ********** '全角カタカナチェック If Not Regex.IsMatch(Value, "^[ァ-ー]+$") Then Throw New clsException _ ("社員カナを全角カタカナで入力してください") End If m社員カナ = Value End Set End Property '◆部門コードプロパティ Public Property p部門コード() As String '◇Getプロパティ Get Return m部門コード End Get '◇Setプロパティ Set(ByVal Value As String) 'コンボボックスから選んだ部門コードをセット m部門コード = Value End Set End Property '◆パスワードプロパティ Public Property pパスワード() As String '◇Getプロパティ Get Return mパスワード End Get '◇Setプロパティ Set(ByVal Value As String) '********** 入力値エラーチェック ********** '英数字以外はエラー If Not Regex.IsMatch(Value, "^[0-9A-Za-z]+$") Then Throw New clsException("パスワードは英数字で入力してください") End If '5桁未満または15桁超はエラー If Value.Length < 5 Or Value.Length > 15 Then Throw New clsException("パスワードの文字数が範囲外です") End If mパスワード = Value End Set End Property End Class ---------------------------------------------------------------------- ◆【独自例外クラスclsException】 clsException例外クラスは、ApplicationExceptionクラスを継承し、エラー メッセージを設定します。 Public Class clsException Inherits ApplicationException Public Sub New(ByVal errorMessage As String) MyBase.New(errorMessage) End Sub End Class ---------------------------------------------------------------------- ■■ 次号予告 第24号(4月1日発行予定) ■■ 1. VB.NETワンポイント 2. ADO.NETのトランザクション制御 3 ====================================================================== 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.