すぐ使えるADO.NET

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

本の紹介

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

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




【第48号】

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

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

前号で、Privateメンバー変数を、すべて基本クラスclsSyainBaseに移しまし
た。今号では、clsInsertSyain、clsUpdateSyain、clsDeleteSyainの各クラス
で重複するコードのうち、社員氏名プロパティ、社員カナプロパティ、更新日
時プロパティを基本クラスに移動します。

社員コードプロパティは、実装内容が異なりますので、次号インターフェース
を利用して実装します。

社員氏名セット、社員カナセット、更新日時セットなどの共通部分、たとえば、

  If IsDBNull(parSyain("社員カナ")) Then
    Throw New Exception("clsUpdateSyain.New引数例外:社員カナ未設定")
  Else
    pSyainKana = CStr(parSyain("社員カナ"))
  End If

などは、基本クラスで実装するために、

  '【社員氏名セット】
  Protected Sub setSyainSimei(ByVal parSyain As DataRow)

  '【社員カナセット】
  Protected Sub setSyainKana(ByVal parSyain As DataRow)

  '【更新日時セット】
  Protected Sub setSyainKosinNitizi(ByVal parSyain As DataRow)

のProtectedメソッドとして実装します。

また、明示的に既定コンストラクタを追加しました。

これで、基本クラスclsSyainBaseは完成です。


Option Strict On
Imports System.Text.RegularExpressions

Public Class clsSyainBase

  Protected mSyainCode As String
  Protected mSyainSimei As String
  Protected mSyainKana As String
  Protected mUpdateTime As Date

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

    MyBase.New()

  End Sub

  '-------------------- プロパティ:社員氏名 --------------------

  Public 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

  '-------------------- プロパティ:社員カナ --------------------
  Public 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

  '-------------------- プロパティ:更新日時 --------------------
  Public Property pUpdateTime() As Date

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

    'Setプロパティ
    Set(ByVal Value As Date)
      mUpdateTime = Value
    End Set

  End Property

  '-------------------- 【社員氏名セット】 --------------------
  Protected Sub setSyainSimei(ByVal parSyain As DataRow)

    If IsDBNull(parSyain("社員氏名")) Then
      Throw New Exception("clsUpdateSyain.New引数例外:社員氏名未設定")
    Else
      pSyainSimei = CStr(parSyain("社員氏名"))
    End If

  End Sub

  '-------------------- 【社員カナセット】 --------------------
  Protected Sub setSyainKana(ByVal parSyain As DataRow)

    If IsDBNull(parSyain("社員カナ")) Then
      Throw New Exception("clsUpdateSyain.New引数例外:社員カナ未設定")
    Else
      pSyainKana = CStr(parSyain("社員カナ"))
    End If

  End Sub

  '-------------------- 【更新日時セット】 --------------------
  Protected Sub setSyainKosinNitizi(ByVal parSyain As DataRow)

    If IsDBNull(parSyain("更新日時")) Then
      Throw New Exception("clsUpdateSyain.New引数例外:更新日時未設定")
    Else
      pUpdateTime = CDate(parSyain("更新日時"))
    End If

  End Sub

End Class


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

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

前号作成したプロジェクトに、更新処理するフォームを新規に追加します。

フォームに下記のコントロールを貼り付けます。Textプロパティを図のように
設定します。フォームのnameは、frmUpdateに変更します。

btnSelectを押すと、入力された社員コードの社員氏名・社員カナをテキスト
ボックスに表示します。同時に社員コードは編集不可に設定します。

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

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

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

検索ボタンを押したときの社員コードの処理は、更新処理時の社員コードプロ
パティと同一になりますので、次号インターフェースを利用して実装します。

クラスを使わずに検索処理をコーディングすると次のようになります。

Private Sub btnSelect_Click _
(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btnSelect.Click

  Dim dtRec As New DataTable()                 'リターン値

  Try
    Dim oDBIO As New clsDBIO()

    dtRec = oDBIO.getKeyRecord("社員テーブル", Me.txtSyainCode.Text)
    If dtRec.Rows.Count = 1 Then
      'レコード取得成功
      Me.txtSyainSimei.Text = CStr(dtRec.Rows(0)("社員氏名"))
      Me.txtSyainKana.Text = CStr(dtRec.Rows(0)("社員カナ"))
      Me.mUpdateTime = CDate(dtRec.Rows(0)("更新日時"))
      '更新画面設定
      updateForm()

    Else
      MessageBox.Show _
      ("このコードは社員テーブルにありません", "社員コード入力エラー")
      Me.txtSyainCode.Focus()
      '画面初期化
      initForm()

    End If

  Catch oExcept As myDBIOException
    '例外が発生した時の処理(レコード取得エラー)
    MessageBox.Show(oExcept.Message, "例外発生")
    '画面初期化
    initForm()

  Catch oExcept As Exception
    '例外が発生した時の処理
    MessageBox.Show(oExcept.ToString, "例外発生")

  End Try

End Sub

----------------------------------------------------------------------
              ■■ 次号予告 第49号(12月11日発行予定) ■■
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.