郵便番号クラス [VB]

Visual Basic ADO.NET [Community Express]

郵便番号データ管理クラス

郵便番号データ管理クラスは、販売管理データベースアクセスクラスを再利用できるようにするため、新規に作成します。

このクラスは、販売管理データベースアクセスクラスのメソッドを呼び出すだけで、データベースをアクセスするメソッドを実装する必要はありません。

基本クラス・派生クラスの実装

最初に、基本クラスClsYubinBangoBaseに、郵便番号マスター表アクセスの共通のメンバーを抽象クラスとして実装します。

次に、派生クラス(レコード選択・更新・削除用)ClsYubinBangoには、コンストラクタと読取専用の郵便番号プロパティを実装します。


郵便番号マスター表
Key 列名 データ型 NULLを許容
郵便番号 nchar(7) しない
都道府県名 nvarchar(4) しない
市区町村名 nvarchar(10) しない
町域名 nvarchar(20) しない

Option Strict On
Imports System.Text.RegularExpressions

'////////// 基本クラス:郵便番号データクラス //////////
Public MustInherit Class ClsYubinBangoBase

    '----------<< メンバー:定数 >>----------
    Protected Const TABLE_NAME As String = "郵便番号マスター表"
    Protected Const KEY_FIELD As String = "郵便番号"

    '----------<< メンバー:変数 >>----------
    Protected yBangoValue As String    ' 郵便番号
    Protected tMeiValue As String      ' 都道府県名
    Protected sMeiValue As String      ' 市区町村名
    Protected cMeiValue As String      ' 町域名

    '--------------------------------------------------------
    ' プロパティ:都道府県名
    '--------------------------------------------------------
    Public Property TodofukenMei() As String

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

        ' Setプロパティ
        Set(ByVal tMei As String)
            ' 【エラーチェック】
            If value.Length = 0 Then
                ' 未入力ならば例外スロー
                Throw New TodofukenMeiException("都道府県名が未入力です")
            Else
                tMeiValue = tMei
            End If
        End Set

    End Property

    '--------------------------------------------------------
    ' プロパティ:市区町村名
    '--------------------------------------------------------
    Public Property ShikuchosonMei() As String

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

        ' Setプロパティ
        Set(ByVal sMei As String)
            ' 【エラーチェック】
            If value.Length = 0 Then
                ' 未入力ならば例外スロー
                Throw New ShikuchosonMeiException("市区町村名が未入力です")
            Else
                sMeiValue = sMei
            End If
        End Set

    End Property

    '--------------------------------------------------------
    ' プロパティ:町域名
    '--------------------------------------------------------
    Public Property ChoikiMei() As String

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

        ' Setプロパティ
        Set(ByVal cMei As String)
            ' 【エラーチェック】
            If value.Length = 0 Then
                ' 未入力ならば例外スロー
                Throw New ChoikiMeiException("住所が未入力です")
            Else
                cMeiValue = cMei
            End If
        End Set

    End Property

    '*******************************************************
    ' 機能:郵便番号エラーチェックメソッド(プロシ-ジャ)
    ' 引数:郵便番号
    ' 戻値:なし
    ' 補足:エラーがあれば例外をスロー
    '*******************************************************
    Protected Sub CheckYubinBango(yBango As String)

        ' 引数設定チェック
        If yBango.Length = 0 Then
            Throw New YubinBangoException("郵便番号が未入力です")
        End If
        ' 数字以外はエラー
        If Not Regex.IsMatch(yBango, "^[0-9]+$") Then
            Throw New YubinBangoException _
                ("郵便番号に数字以外の文字があります")
        End If
        ' 得意先コード長さチェック(4桁以外はエラー)
        If Not yBango.Length = 4 Then
            Throw New YubinBangoException _
                ("郵便番号の桁数が正しくありません")
        End If

    End Sub

End Class

'//////// 派生クラス:郵便番号選択更新削除クラス ////////
Public MustInherit Class ClsYubinBango
    Inherits ClsYubinBangoBase

    '=======================================================
    ' 機能:コンストラクタ
    ' 引数:郵便番号
    '=======================================================
    Protected Sub New(ByVal yBango As String)

        MyBase.New()  ' 基本クラスのコンストラクタを呼び出す

        ' 郵便番号コードエラーチェック
        CheckYubinBango(yBango)

        ' 郵便番号マスター表からレコード取得
        Dim dbIO As New ClsYubinBango( _
             TABLE_NAME, KEY_FIELD, yBango)
        Dim dt As DataTable = dbIO.GetRowsData()

        If dt.Rows.Count = 1 Then
            ' レコードがあった時
            yBangoValue = yBango       ' 郵便番号
            tMeiValue = CStr(dt.Rows(0)("都道府県名"))
            sMeiValue = CStr(dt.Rows(0)("市区町村名"))
            cMeiValue = CStr(dt.Rows(0)("町域名"))
        Else
            ' レコードが無かった時
            Throw New YubinBangoException _
            ("郵便番号マスター表にレコードがありません")
        End If

    End Sub

    '--------------------------------------------------------
    ' プロパティ:郵便番号コード(読取専用)
    '--------------------------------------------------------
    Public ReadOnly Property YubinBango() As String

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

    End Property

End Class