すぐ使えるADO.NET

【Visual BasicによるADO.NETデータベースプログラミング】

本の紹介

バックナンバー: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」ホームページに掲載されて
いる会社名・製品名等は、各社の登録商標または商標です。
======================================================================

Copyright© すぐ使えるADO.NET. All rights reserved.