すぐ使えるADO.NET

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

本の紹介

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

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




【第49号】

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

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

社員氏名プロパティ、社員カナプロパティ、更新日時プロパティは、基本クラ
スclsSyainBaseに移しました。社員コードプロパティは、レコード追加時と、
更新時や読取時で実装内容が異なりますので、インターフェースを利用して実
装します。

まず、インターフェイスを定義します。インタフェース名をISyainとして、戻
り値がない社員コードメソッドsetSyainCodeの場合には、

Public Interface ISyain

    Sub setSyainCode(ByVal parSyain As DataRow)

End Interface

とします。中身は記述しません。End Sub も不要です。複数のメソッドやプロ
パティを定義できます。

実装時には、戻り値と引数の型は、Interfaceの定義で記述とされたメソッド
と一致させる必要がありますが、メソッド名は一致させる必要はありません。
しかし、Implementsキーワードの後に、インターフェイス名.メソッド名を記
述します。

  Protected Sub setSyainCode(.....) Implements ISyain.setSyainCode

レコード追加処理用のclsInsertSyainBaseクラスと、レコード更新処理用の
clsSUDSyainBaseクラスに、ISyainインターフェイスのsetSyainCodeメソッド
を実装します。Implements ISyain を Inherits clsSyainBaseの次行に追加し
てください。

clsInsertSyainBaseクラスと、clsSUDSyainBaseクラスのソースリストは次の
ようになります。

----------------------------------------------------------------------
'======================= 【社員追加基本クラス】=======================
Public Class clsInsertSyainBase
  Inherits clsSyainBase
  Implements ISyain

  '-------------------------------------------------------------------
  ' 機能:コンストラクタ
  ' 引数:なし
  '-------------------------------------------------------------------
  Sub New()

    MyBase.New()

  End Sub

  '-------------------- プロパティ:社員コード --------------------
  Public 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

  '-------------------- 【社員コードセット】 --------------------
  Protected Sub setSyainCode(ByVal parSyain As DataRow) _
  Implements ISyain.setSyainCode

    If IsDBNull(parSyain("社員コード")) Then
      Throw New Exception _
      ("clsInsertSyain.New引数例外:社員コードが未設定")
    Else
      pSyainCode = CStr(parSyain("社員コード"))
    End If

  End Sub

End Class


'=================== 【社員読取更新削除基本クラス】===================
Public Class clsSUDSyainBase
  Inherits clsSyainBase
  Implements ISyain

  '-------------------------------------------------------------------
  ' 機能:コンストラクタ
  ' 引数:なし
  '-------------------------------------------------------------------
  Sub New()

    MyBase.New()

  End Sub

  '-------------------- プロパティ:社員コード --------------------
  Public 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) = False Then
            Throw New mySyainCodeException("社員コード未登録")
          Else
            Me.mSyainCode = Value
          End If
        End If
      End If

    End Set

  End Property

  '【社員コードセット】
  Protected Sub setSyainCode(ByVal parSyain As DataRow) _
  Implements ISyain.setSyainCode

    If IsDBNull(parSyain("社員コード")) Then
      Throw New Exception _
      ("clsInsertSyain.New引数例外:社員コードが未設定")
    Else
      pSyainCode = CStr(parSyain("社員コード"))
    End If

  End Sub

End Class


----------------------------------------------------------------------
                   ■■ マスターテーブル保守 3 ■■

【社員テーブル】
------------------------------------------------------------
key フィールド名   データ型   サイズ  値要求  空文字列の許可
------------------------------------------------------------
○ 社員コード  テキスト型   5 はい  いいえ
− 社員氏名   テキスト型  20 はい  いいえ
− 社員カナ   テキスト型  40 いいえ はい
− 更新日時   日付/時刻型  − はい  −
------------------------------------------------------------

社員テーブルの更新処理クラスを完成させていきます。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 社員マスタ更新    _□×┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃  Label1    txtSyainCode   btnSelect
┃┌―――――┐ ┌―――――┐  ┌―――――┐
┃│社員コード│ │     │  │ 検 索 │
┃└―――――┘ └―――――┘  └―――――┘
┃  Label2    txtSyainSimei
┃┌―――――┐ ┌―――――――――┐
┃│社員氏名 │ │         │
┃└―――――┘ └―――――――――┘
┃  Label3    txtSyainKana
┃┌―――――┐ ┌―――――――――┐
┃│社員カナ │ │         │
┃└―――――┘ └―――――――――┘
┃
┃ btnUpdate    btnClear
┃┌―――――┐ ┌―――――┐
┃│ 更 新 │ │ クリア │
┃└―――――┘ └―――――┘
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

検索ボタンを押すと、社員コードのレコードを社員テーブルから検索します。

更新ボタンを押すと、変更された社員氏名・社員カナのエラーチェックをし、
エラーがなければ、社員テーブルを更新します。

クリアボタンを押すと、入力データをクリアして、初期画面に戻します。

更新処理は、clsUpdateSyainクラスのオブジェクトを生成してコーディングす
ると、次のようになります。画面処理を含めた全ソースリストは、次号に掲載
します。

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

    oRow = oDBIO.createDataRow("社員テーブル")

    oRow("社員コード") = Me.txtSyainCode.Text
    oRow("社員氏名") = Me.txtSyainSimei.Text
    oRow("社員カナ") = Me.txtSyainKana.Text
    oRow("更新日時") = Me.mUpdateTime

    Dim oSyain As New clsUpdateSyain(oRow)

    updateCount = oDBIO.updateRecord(oSyain)

----------------------------------------------------------------------
              ■■ 次号予告 第50号(1月10日発行予定) ■■
1. VB.NETワンポイント
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」ホームページに掲載されてい
る会社名・製品名等は、各社の登録商標または商標です。
======================================================================

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