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