すぐ使えるADO.NET

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

本の紹介

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

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




【第22号】

 第22号(2005.2.22発行)
======================================================================
           ★★ VB.NETデータベースプログラミング奮闘記 ★★

----------------------------------------------------------------------
いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを中
心に掲載しますので、今後ともよろしくお願い申し上げます。

すぐ使えるADO.NET --> サンプルプログラム満載
                      http://park5.wakwak.com/‾weblab/
======================================================================
           ■■ VB.NETワンポイント:2次元配列の初期化 ■■

前回は、1次元配列の初期化方法を紹介しましたが、今回は、2次元配列の初
期化方法を紹介します。

  '◆配列の要素がない場合
  'このままでは、値を代入することはできません。
  'たとえば、ary1(0,0) = "aaa" とすると、実行時エラーになります。
  Dim ary1(,) As String = New String(,) {}

  '◆要素の長さのみ初期値に指定
  'ary2(0,0) = ""  ary2(0,1) = ""  ary2(0,2) = ""
  'ary2(1,0) = ""  ary2(1,1) = ""  ary2(1,2) = "" となります。
  Dim ary2(,) As String = New String(1, 2) {}

  '◆要素の値のみ初期値に指定(要素の長さも決まる)
  'ary3(0,0) = 1  ary3(0,1) = 2  ary3(1,0) = 5  ary3(1,1) = 7
  'ary3(2,0) = 8  ary3(2,1) = 12 となります。
  Dim ary3(,) As Integer = New Integer(,) {{1, 2}, {5, 7}, {8, 12}}

  '◆要素の長さと値を初期値に指定
  Dim ary4(,) As Integer = New Integer(2, 1) {{1, 2}, {5, 7}, {8, 12}}

  '◆配列の長さを指定して変数のみ宣言し、後から値を代入する
  'ary5(0,0) = ""  ary5(0,1) = ""  ary5(0,2) = ""
  'ary5(1,0) = ""  ary5(1,1) = ""  ary5(1,2) = "" となります。
   Dim ary5(1, 2) As String

◆配列の境界外の代入は、実行時エラーになります。

----------------------------------------------------------------------
               ■■ ADO.NETのトランザクション制御1 ■■

トランザクション制御を使用して、社員テーブルと権限テーブルに登録する
プログラムを作成します。

使用するテーブルは、sample.mdbの社員テーブルと権限テーブルです。
テーブルの定義は、次のとおりです。
【社員テーブル】
------------------------------------------------------------
key フィールド名   データ型   サイズ  値要求  空文字列の許可
------------------------------------------------------------
○ 社員コード  テキスト型   5 はい  いいえ
− 社員氏名   テキスト型  20 はい  いいえ
− 社員カナ   テキスト型  40 いいえ はい
− 部門コード  テキスト型   3 はい  いいえ
− 更新日時   日付/時刻型  − はい  −
------------------------------------------------------------
【権限テーブル】
------------------------------------------------------------
key フィールド名   データ型   サイズ  値要求  空文字列の許可
------------------------------------------------------------
○ 社員コード  テキスト型   5 はい  いいえ
− パスワード  テキスト型  15 はい  いいえ
− 更新日時   日付/時刻型  − はい  −
------------------------------------------------------------

◆社員情報を登録するためのプロジェクトを作成します。フォームに下記のコ
ントロールを貼り付けます。Textプロパティを図のように設定します。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 社員登録                         _□×┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃  Label1     txtSyainCode
┃┌―――――┐  ┌―――――┐
┃│社員コード│  │     │
┃└―――――┘  └―――――┘
┃  Label2     txtSyainSimei
┃┌―――――┐  ┌―――――――――┐
┃│社員氏名 │  │         │
┃└―――――┘  └―――――――――┘
┃  Label3     txtSyainKana
┃┌―――――┐  ┌―――――――――┐
┃│社員カナ │  │         │
┃└―――――┘  └―――――――――┘
┃  Label4     cmbBumonMei     lblBumonCode
┃┌―――――┐  ┌――――――――┐ ┌―――┐
┃│部門コード│  │      │▼│ │   │
┃└―――――┘  └――――――――┘ └―――┘
┃  Label5     txtPassWord    btnInsert   btnClear
┃┌―――――┐  ┌――――――┐  ┌――――┐ ┌――――┐
┃│パスワード│  │      │  │ 登録 │ │クリア │
┃└―――――┘  └――――――┘  └――――┘ └――――┘
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
btnInsertを押すと、入力されたデータのエラーチェックをし、エラーがなけ
れば、社員コード、氏名、カナ、部門コードを社員テーブルに、パスワードを
権限テーブルに登録します。この時、トランザクション制御を行います。
btnClearを押すと、入力データをクリアして、初期画面に戻します。

----------------------------------------------------------------------
◆エラーチェックは、社員登録クラスclsSyainTorokuのSetプロパティに実装
します。入力エラーがあれば、clsExceptionクラスの例外をスローします。
clsException例外クラスは、独自のエラーメッセージを表示するためのクラス
として実装します。

【社員登録クラスclsSyainToroku】
  変数:      Private m社員コード As String
              Private m社員氏名 As String
              Private m社員カナ As String
              Private m部門コード As String
              Private mパスワード As String

  プロパティ:Public Property p社員コード() As String
              Public Property p社員氏名() As String
              Public Property p社員カナ() As String
              Public Property p部門コード() As String
              Public Property pパスワード() As String

【独自例外クラスclsException】
  変数:      Private mErrorMessage As String

  コンストラクタ:Public Sub New(ByVal errorMessage As String)


◆DBアクセス処理は、clsDBIOクラスに実装します。

【DBアクセスクラス:clsDBIO】
  変数:      Private mConn As OleDbConnection
              Private mCommand As OleDbCommand

  コンストラクタ:Public Sub New()

  メソッド:Public Function getAllBumon() As DataTable
            機能:部門テーブル全レコード取得メソッド
            引数:なし
            戻値:DataTable型 取得したテーブルレコード行コレクション

            Public Function existKeySyain _
                   (ByVal parKey As String) As Boolean
            機能:社員テーブルのキー値のレコードの有無を調べるメソッド
            引数:キー値
            戻値:ある-->True、ない-->False

            Public Function addSyainKengen _
                   (ByVal parSyain As clsSyainToroku) As Integer
            機能:社員テーブルと権限テーブルに1レコードを追加する
            引数:社員登録クラスのオブジェクト
            戻値:正常にレコードが追加された時 --> 1
                  追加できなかった時 --> 0

clsDBIOクラスは、社員登録で使うメソッドのみ実装していますが、実際には、
必要なメンバをすべて実装しますので、共通処理を基底クラスにして、そこか
らクラスを派生するようにクラス設計すると良いでしょう。
----------------------------------------------------------------------
今回は、フォームクラスのソースリストを掲載します。他のクラスは、次回以
降になります。ご了承ください。

ホームロードでのコンボボックスcmbBumonMeiの処理について少し補足します。
部門名を選択すると、SelectedIndexChangedイベントが発生しますので、この
イベントハンドラを作成して、選択された部門コードをラベルに表示します。
そのために、DisplayMemberプロパティにフィールド名、ValueMemberプロパ
ティに対応するフィールド名、DataSourceプロパティに、テーブル行データを
設定します。

--【プログラムソースリスト】------------------------------------------
Imports System.Data.OleDb

Public Class Form1
  Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "
  '自動生成部分省略
#End Region

  '----------<< フォームロード処理 >>----------
  Private Sub Form1_Load _
  (ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles MyBase.Load

    Try
      Dim oDBIO As New clsDBIO()
      Dim oDataTable As DataTable

      '部門テーブルの全レコードを取得する
      oDataTable = oDBIO.getAllBumon()
      'コンボボックスに部門名を表示できるように設定する
      Me.cmbBumonMei.DisplayMember = "部門名"
      '部門名に対応した部門コードをSelectdValueで取得できるように設定
      Me.cmbBumonMei.ValueMember = "部門コード"
      'コンボボックスに部門テーブルデータを連結する
      Me.cmbBumonMei.DataSource = oDataTable

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

    End Try

  End Sub

  '----------<< コンボボックスの選択値が変更された場合 >>----------
  Private Sub cmbBumonMei_SelectedIndexChanged _
  (ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles cmbBumonMei.SelectedIndexChanged

    '選択した部門コードをラベルに表示
    If Me.cmbBumonMei.SelectedIndex <> -1 Then
      Me.lblBumonCode.Text = CStr(Me.cmbBumonMei.SelectedValue)
    End If

  End Sub

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

    Me.txtSyainCode.Text = ""
    Me.txtSyainSimei.Text = ""
    Me.txtSyainKana.Text = ""
    Me.txtPassWord.Text = ""
    Me.cmbBumonMei.SelectedIndex = 0
    Me.txtSyainCode.Focus()

  End Sub

  '--------<< 登録ボタン処理(社員テーブルにレコード追加) >>--------
  Private Sub btnInsert_Click _
  (ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles btnInsert.Click

    Try
      Dim oDBIO As New clsDBIO()
      Dim oSyain As New clsSyainToroku()

      '入力項目のエラーチェック
      oSyain.p社員コード = Me.txtSyainCode.Text
      oSyain.p社員氏名 = Me.txtSyainSimei.Text
      oSyain.p社員カナ = Me.txtSyainKana.Text
      oSyain.p部門コード = Me.lblBumonCode.Text
      oSyain.pパスワード = Me.txtPassWord.Text

      '社員テーブルにレコード追加
      Dim recCount As Integer

      recCount = oDBIO.addSyainKengen(oSyain)
      If recCount = 1 Then
        MessageBox.Show("登録しました", "登録完了")
      Else
        MessageBox.Show("登録に失敗しました", "登録失敗")
      End If

    Catch oExcept As clsException
      '例外が発生した時の処理
      MessageBox.Show(oExcept.Message, "エラー発生")

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

    End Try

  End Sub

End Class

----------------------------------------------------------------------
今回のプログラムは、
  http://park5.wakwak.com/‾weblab/tocUpdate.html
を加筆修正して、掲載しました。
----------------------------------------------------------------------
            ■■ 次号予告 第23号(3月14日発行予定) ■■
1. VB.NETワンポイント
2. ADO.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.