すぐ使えるADO.NET

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

本の紹介

バックナンバー:VB.NETデータベースプログラミング

ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。




【第40号】

 第40号(2006.4.24発行)
======================================================================
           ★★ VB.NETデータベースプログラミング奮闘記 ★★
----------------------------------------------------------------------
いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを中
心に掲載しますので、今後ともよろしくお願い申し上げます。

すぐ使えるADO.NET --> サンプルプログラム満載
                      http://park5.wakwak.com/‾weblab/
======================================================================
             ■■ VB.NETワンポイント:独自例外クラス ■■

入力項目別に、独自例外クラスを作成すると、入力エラー時のにフォーカス設
定やエラーメッセージ処理が簡単になります。独自例外クラスは入力項目数だ
け必要ですが、コーディングは楽になりますのでお勧めです。独自例外クラス
は、myDBIOException のようにコーディングします。

    Try

      Dim oRow As DataRow
      Dim insertCount As Integer
      Dim oDBIO As New clsDBIO()

      'DataRowオブジェクトの取得
      oRow = oDBIO.createDataRow("社員テーブル")

      'DataRowオブジェクトにフィールド値を保管
      oRow("社員コード") = Me.txtSyainCode.Text
      oRow("社員氏名") = Me.txtSyainSimei.Text
      oRow("社員カナ") = Me.txtSyainKana.Text

      'clsInsertSyainのインスタンスを生成してエラーチェック
      Dim oSyain As New clsInsertSyain(oRow)

      '社員テーブルに1レコードを追加
      insertCount = oDBIO.insertRecord(oSyain)

    Catch oExcept As 社員コードの例外
      '社員コード入力エラーが発生した時の処理

    Catch oExcept As 社員氏名の例外
      '社員氏名入力エラーが発生した時の処理

    Catch oExcept As 社員カナの例外
      '社員カナ入力エラーが発生した時の処理

    Catch oExcept As myDBIOException
       'clsDBIOで例外が発生した時の処理

    Catch oExcept As Exception
      '上記以外の例外が発生した時の処理

    End Try

'--------------- << 独自エラーメッセージ用例外クラス >> --------------
Public Class myDBIOException
  Inherits ApplicationException

  Public Sub New(ByVal errorMessage As String)
    MyBase.New(errorMessage)
  End Sub

End Class

----------------------------------------------------------------------
     ■■ データベースアクセスクラスの汎用メソッドについて 9 ■■

clsInsertSyainクラスをプロジェクトに追加します。

clsInsertSyainクラスは、レコード追加時のエラーチェックをする専用クラス
です。変更や削除の場合には、別にクラスを作成します。今回は継承を考えず、
それぞれ独立したクラスとして作成しますが、時間がある方は、継承を検討し
てみてください。

DataRowオブジェクトをコンストラクタの引数に指定して、clsInsertSyainク
ラスのインスタンスを生成します。

コンストラクタでは、各入力データをSetプロパティを使って、Private変数に
保存します。Setプロパティに、エラーチェックをコーディングします。
エラーがあれば、入力項目に対応する独自の例外を Throwします。

今回のclsInsertSyainクラスは、23号で掲載したclsSyainTorokuクラスを修正
して掲載しています。おもな修正点は、次の2点です。

1. コンストラクタに引数を指定
2. SetプロパティをPublic宣言からPrivate宣言に変更


-----【エラーチェック内容】-----
社員コード
1.入力必須。未入力ならエラー
2.数字なら正常。数字以外が含まれていればエラー
3.社員テーブルにレコードがなければ正常。あればエラー

社員氏名:
1.入力必須。未入力ならエラー

社員カナ:
1.入力任意。未入力でも正常
2.入力時は、全角カタカナなら正常。全角カタカナ以外があればエラー


Setプロパティを呼び出す前に、各項目のDBNull値のチェックをします。

DBNull値のチェック:
DataRowオブジェクトには、他のどんな値とも異なるDBNull値が格納されます。
そのため、値を代入しないとDBNull値のままになり、例外が発生します。念の
ため、コンストラクタの中で、IsDBNull関数を呼び出して、エラーチェックを
します。


--【プログラムソースリスト】------------------------------------------
Option Strict On

Imports System.Text.RegularExpressions

Public Class clsInsertSyain

  Private mSyainCode As String
  Private mSyainSimei As String
  Private mSyainKana As String

  '----------------------------------------------------------------------
  ' 機能:コンストラクタ
  ' 引数:in 社員テーブル1レコード分のデータ
  '----------------------------------------------------------------------
  Sub New(ByVal parSyain As DataRow)

    MyBase.New()


    '【社員コードセット】
    If IsDBNull(parSyain("社員コード")) Then
      Throw New Exception("clsInsertSyain.New引数例外:社員コード未設定")
    Else
      pSyainCode = CStr(parSyain("社員コード"))
    End If

    '【社員氏名セット】
    If IsDBNull(parSyain("社員氏名")) Then
      Throw New Exception("clsInsertSyain.New引数例外:社員氏名未設定")
    Else
      pSyainSimei = CStr(parSyain("社員氏名"))
    End If

    '【社員カナセット】
    If IsDBNull(parSyain("社員カナ")) Then
      Throw New Exception("clsInsertSyain.New引数例外:社員カナ未設定")
    Else
      pSyainKana = CStr(parSyain("社員カナ"))
    End If

  End Sub

  '-------------------- プロパティ:社員コード --------------------
  Private Property pSyainCode() As String

    'Getプロパティ
    Get
      Return Me.mSyainCode
    End Get

    'Setプロパティ
    Set(ByVal Value As String)

      '未入力はエラー
      If Value = "" Then
        Throw New mySyainCodeException("社員コードを入力してください")
      Else
        '数字以外はエラー
        If Not Regex.IsMatch(Value, "^[0-9]+$") Then
          Throw New _
           mySyainCodeException("社員コードは数字で入力してください")
        Else
          Dim oDBIO As New clsDBIO()
          '社員マスタにこの社員コードがあればエラー
          If oDBIO.existKeyRecord("社員テーブル", Value) = True Then
            Throw New mySyainCodeException("この社員コードは登録済です")
          Else
            Me.mSyainCode = Value
          End If
        End If
      End If

    End Set

  End Property

  '-------------------- プロパティ:社員氏名 --------------------
  Private Property pSyainSimei() As String

    'Getプロパティ
    Get
      Return Me.mSyainSimei
    End Get

    'Setプロパティ
    Set(ByVal Value As String)

      '未入力はエラー
      If Value = "" Then
        Throw New mySyainSimeiException("社員氏名を入力してください")
      Else
        mSyainSimei = Value
      End If

    End Set

  End Property

  '-------------------- プロパティ:社員カナ --------------------
  Private Property pSyainKana() As String

    'Getプロパティ
    Get
      Return mSyainKana
    End Get

    'Setプロパティ
    Set(ByVal Value As String)

      '未入力はエラーとしない
      If Value = "" Then
        mSyainKana = Value
      Else
        '全角カタカナチェック
        If Regex.IsMatch(Value, "^[ァ-ー]+$") Then
          mSyainKana = Value
        Else
          Throw New mySyainKanaException _
          ("社員カナを全角カタカナで入力してください")
        End If
      End If

    End Set

  End Property

End Class

----------------------------------------------------------------------
              ■■ 次号予告 第41号(5月18日発行予定) ■■
1. VB.NETワンポイント
2. データベースアクセスクラスの汎用メソッドについて 10
======================================================================
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.