すぐ使えるADO.NET

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

本の紹介

バックナンバー 【第61号】

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




【第61号】

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

すぐ使えるADO.NET --> http://park5.wakwak.com/‾weblab/
======================================================================
                  ■■ 社員テーブルに追加する 3 ■■

社員コード、社員氏名、カナ名、部署コードを入力して、追加ボタンをクリッ
クすると、入力したデータのエラーチェックをして、エラーが無ければ、社員
テーブルに1レコード追加します。接続文字列は、app.configに登録しておき
ます。

【sampleデータベースの社員テーブル】
----------------------------------------------------------------------
key  列 名   データ型    nullを許容  備 考
----------------------------------------------------------------------
○ 社員コード  nchar(5)       許容しない 英数字のみ
− 社員氏名   nvarchar(20)   許容しない
− 社員カナ   nvarchar(40)   許容しない
− 部署コード  nchar(4)       許容しない
− 更新日時   datetime       許容しない
----------------------------------------------------------------------

【sampleデータベースの部署テーブル】
----------------------------------------------------------------------
key  列 名   データ型    nullを許容  備 考
----------------------------------------------------------------------
○ 部署コード  nchar(4)       許容しない 英数字のみ
− 部署名    nvarchar(20)   許容しない
− 更新日時   datetime       許容しない
----------------------------------------------------------------------

コンボボックスのDropDownStyleプロパティは、DropDownListを選択して、テ
キストボックス部分を入力できないように設定します。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 社員テーブル追加                _□×┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃  Label1    TxtShainCode
┃┌―――――┐ ┌―――――┐
┃│社員コード│ │     │
┃└―――――┘ └―――――┘
┃  Label2    TxtShainShimei
┃┌―――――┐ ┌――――――――┐
┃│社員氏名 │ │        │
┃└―――――┘ └――――――――┘
┃  Label3    TxtShainKana
┃┌―――――┐ ┌――――――――――――――┐
┃│社員カナ │ │              │
┃└―――――┘ └――――――――――――――┘
┃  Label4    CboBusho
┃┌―――――┐ ┌――――――――┐
┃│部署コード│ │      │▼│
┃└―――――┘ └――――――――┘
┃ BtnInsert    BtnClear
┃┌――――┐  ┌―――――┐
┃│ 追加 │  │ クリア │
┃└――――┘  └―――――┘
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

----------------------------------------------------------------------
                       ■■ エラーチェック ■■

下のように、前号の追加ボタンクリック処理では、入力データのエラーチェッ
クの実装をしていません。

    Try

        Dim shain As DataRow
        Dim dbIO As New ClsShainTableIO()

        shain = dbIO.createDataRow("社員テーブル")

        shain("社員コード") = Me.TxtShainCode.Text
        shain("社員氏名") = Me.TxtShainShimei.Text
        shain("社員カナ") = Me.TxtShainKana.Text
        shain("部署コード") = Me.CboBushoMei.SelectedValue

        dbIO.insertRecord(New clsInsertSyain(shain))

        'フォーム初期設定
        Me.ClearForm()

    Catch '(以下省略)

    End Try

入力データのエラーチェックは、すべて社員追加クラスClsInsertSyainに実装
します。入力エラーがあれば、各入力項目別に独自の例外をスローします。社
員コードに入力エラーがあれば、MyShainCodeExceptionを、社員氏名に入力エ
ラーがあれば、MyShainSimeiExceptionをスローするようにします。

社員テーブルDataRowインスタンスに入力データをセットして、ClsInsertSyain
のインスタンスの引数に指定すれば、エラーがなければ、Setプロパティでメン
バ変数に値がセットされます。


----------------------------------------------------------------------
                    ■■ ClsInsertSyain クラス ■■

ClsInsertSyainは、ClsShainBaseクラスを継承したクラスとします。
ClsShainBaseクラスでは、追加・更新・削除・参照の共通処理を実装します。

エラーチェックは、社員コード、社員氏名、社員カナ、部署コードのセットプ
ロパティに実装します。

社員コードのエラーチェックは、追加とその他の処理と異なるので、基本クラ
スでは、プロパティ名と返値を宣言して、実装は継承クラスで行います。

    Public MustOverride Property ShainCode() As String

Setプロパティでメンバ変数に入力値をセットし、Getプロパティでメンバ変数
の値を取得します。従ってメンバ変数は、 Private変数として宣言して、直接
メンバ変数にアクセスできないようにします。

社員テーブルDataRowの各列は、値をセットしないとDBNullになっています。
念のため、Setプロパティを呼び出す前に、DBNullをチェックして、値がセッ
トされている場合だけ、Setプロパティにアクセスします。


--【プログラムソースリスト(ファイル名:ClsSyain.vb)】---------------
Option Strict On

Imports System.Text.RegularExpressions

Public MustInherit Class ClsShainBase

  '-------------------------< メンバ:変数 >--------------------------
  Private shainSimeiValue As String
  Private shainKanaValue As String
  Private bushoCodeValue As String

  '-------------------------------------------------------------------
  '機能:コンストラクタ
  '引数:なし
  '------1---------2---------3---------4---------5----------6---------
  Sub New()

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

  End Sub

  '-------------------- プロパティ:社員コード -----------------------
  Public MustOverride Property ShainCode() As String

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

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

    'Setプロパティ
    Set(ByVal Value As String)
        '【エラーチェック】
        If Value = "" Then
            '未入力はエラー
            Throw New myShainSimeiException _
            ("社員氏名を入力してください")
        Else
            shainSimeiValue = Value
        End If
    End Set

  End Property

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

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

    'Setプロパティ
    Set(ByVal Value As String)
        '【エラーチェック】
        If Value = "" Then
            '未入力はエラー
            Throw New myShainKanaException _
            ("社員カナを入力してください")
        Else
            '全角カタカナ以外はエラー
            If Regex.IsMatch(Value, "^[ァ-ー]+$") Then
                shainKanaValue = Value
            Else
                Throw New myShainKanaException _
                ("社員カナを全角カタカナで入力してください")
            End If
        End If

    End Set

  End Property

  '-------------------- プロパティ:部署コード -----------------------
  Public Property BushoCode() As String

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

    'Setプロパティ
    Set(ByVal Value As String)
        '【エラーチェック】
        If Value = "" Then
            '未入力はエラー
            Throw New myShainSimeiException _
            ("部署コードを選択してください")
        Else
            bushoCodeValue = Value
        End If

    End Set

  End Property

End Class

'========================== 【社員追加クラス】========================
Public Class ClsInsertShain
    Inherits ClsShainBase

  '-------------------------< メンバ:変数 >--------------------------
  Private shainCodeValue As String

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

    MyBase.New()

    If IsDBNull(Shain("社員コード")) Then
        Throw New Exception _
        ("ClsInsertShain.New引数例外:社員コードがDBNull")
    Else
        ShainCode = CStr(Shain("社員コード"))
    End If

    If IsDBNull(Shain("社員氏名")) Then
        Throw New Exception _
        ("ClsInsertShain.New引数例外:社員氏名がDBNull")
    Else
        ShainSimei = CStr(Shain("社員氏名"))
    End If

    If IsDBNull(Shain("社員カナ")) Then
        Throw New Exception _
        ("ClsInsertShain.New引数例外:社員カナがDBNull")
    Else
        ShainKana = CStr(Shain("社員カナ"))
    End If

    If IsDBNull(Shain("部署コード")) Then
        Throw New Exception _
        ("ClsInsertShain.New引数例外:部署コードがDBNull")
    Else
        BushoCode = CStr(Shain("部署コード"))
    End If

  End Sub

  '-------------------- プロパティ:社員コード --------------------
  Public Overrides Property ShainCode() As String

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

    'Setプロパティ
    Set(ByVal Value As String)
        '未入力はエラー
        If Value = "" Then
            Throw New myShainCodeException("社員コード未入力")
        Else
            '数字以外はエラー
            If Not Regex.IsMatch(Value, "^[0-9]+$") Then
                Throw New _
                myShainCodeException("社員コードに数字以外あり")
            Else
                '社員テーブルアクセスオブジェクト
                Dim dbIO As New ClsShainTableIO()

                '社員テーブルにこの社員コードがあればエラー
                If dbIO.ExistKeyData(Value) = True Then
                    Throw New myShainCodeException("社員コード登録済")
                Else
                    shainCodeValue = Value
                End If

            End If

        End If

    End Set

  End Property

End Class
----------------------------------------------------------------------
次号では、ClsShainTableIOクラスのInsertRecordメソッドを作成します。

======================================================================
VB.NET データベースプログラミング奮闘記
発行者:ウェブ実験室(ado.netアットマークライヴドットジェーピーlive.jp)
        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.