すぐ使えるADO.NET

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

本の紹介

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

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




【第47号】

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

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

今まで作成してきたclsInsertSyain、clsUpdateSyain、clsDeleteSyainの各ク
ラスには、重複するコードがたくさんあります。たとえば、

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

は、まったく同じコーディングが複数箇所で記述されています。この重複す
る無駄なコードを減らし、保守性を良くするために、基本クラスclsSyainBase
を新規に作成して、共通コードを基本クラスに移動します。

そして、clsInsertSyain、clsUpdateSyain、clsDeleteSyainの各クラスは、
clsSyainを継承したクラスに作り直します。

まず、clsInsertSyain、clsUpdateSyain、clsDeleteSyainにそれぞれ宣言して
いたPrivateメンバー変数を、すべて基本クラスclsSyainBaseに移して、継承
クラスからアクセスできるように、宣言をProtectedに変更します。

Public Class clsSyainBase

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

  '以下次号に続きます


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

今号からは、clsDBIOクラスを使用して、社員テーブルを保守するプログラム
を作成します。

最初にsample.mdbの社員テーブルを作成します。テーブルは社員コードを主キー
にした簡単なテーブルです。テーブルの定義は、次のとおりです。

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

社員テーブルを保守するためのプロジェクトをVisual Studio .Netに新規作成
します。フォームに下記のコントロールを貼り付けます。Textプロパティを図
のように設定します。フォームのnameは、frmInsertとします。

btnInsertを押すと、入力されたデータのエラーチェックをし、エラーがなけ
れば、社員テーブルに1レコード追加します。

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

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

プログラムのポイントは、DataRowオブジェクトを生成して、
clsDBIOのcreateDataRowメソッドを使って、社員テーブルの空の行を生成する
部分です。これによりフィールド名を使用して、コーディングすることができ
ます。

  Dim oRow As DataRow
  Dim oDBIO As New clsDBIO()

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

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

一見すると、エラーチェックがないようにも見えますが、

  Dim oSyain As New clsInsertSyain(oRow)

で、clsInsertSyainインスタンスoSyainの生成時に、コンストラクタの中で初
期値の設定時にエラーチェックをしています。エラーがあると例外がスローさ
れます。

最後に、引数にoSyainを指定して、clsDBIOのinsertRecordメソッドを呼び出し
て、社員テーブルに1レコードを追加します。


'----------------- << データベースアクセスクラス >> -----------------
Option Explicit On

Public Class frmInsert
  Inherits System.Windows.Forms.Form

  '自動生成部分は省略

  '********** 社員テーブルに1レコードを追加する **********

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

    Try

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

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

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

      Dim oSyain As New clsInsertSyain(oRow)

      oDBIO.insertRecord(oSyain)

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

    Catch oExcept As mySyainCodeException
      '独自例外が発生した時の処理
      MessageBox.Show(oExcept.Message, "社員コード入力エラー")
      Me.txtSyainCode.Focus()

    Catch oExcept As mySyainSimeiException
      '独自例外が発生した時の処理
      MessageBox.Show(oExcept.Message, "社員氏名入力エラー")
      Me.txtSyainSimei.Focus()

    Catch oExcept As mySyainKanaException
      '独自例外が発生した時の処理
      MessageBox.Show(oExcept.Message, "社員カナ入力エラー")
      Me.txtSyainKana.Focus()

    Catch oExcept As myDBIOException
      '独自例外が発生した時の処理
      MessageBox.Show(oExcept.Message, "DBIO例外発生")

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

    End Try

  End Sub

  '----------<< クリアボタン処理 >>----------
  Private Sub btnClear_Click( _
  ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles btnClear.Click

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

  End Sub

  '----------<< フォーム初期設定処理 >>----------
  Sub clear()

    Me.txtSyainCode.Text = ""
    Me.txtSyainSimei.Text = ""
    Me.txtSyainKana.Text = ""
    Me.txtSyainCode.Focus()

  End Sub

End Class

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