すぐ使えるADO.NET

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

本の紹介

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

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




【第20号】

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

----------------------------------------------------------------------
いつもご購読ありがとうございます。昨年同様、本年も引き続きご購読の程、
よろしくお願い申し上げます。

すぐ使えるADO.NET --> サンプルプログラム満載
                      http://park5.wakwak.com/‾weblab/
======================================================================
                        -----【目次】-----

1. VB.NETワンポイント:InputBox関数
2. ADO.NET:DataViewの使い方1

----------------------------------------------------------------------
              ■■ VB.NETワンポイント:InputBox関数 ■■

OKボタン、Cancelボタンに、テキストボックスひとつのフォームなら、
InputBox関数で、簡単に表示することができます。

引数は、次の5個を指定できます。
  第1引数:ダイアログボックス内にメッセージとして表示する文字列
  第2引数:タイトルバーに表示する文字列(省略可能)
  第3引数:テキストボックスに表示する文字列(省略可能)
  第4引数:画面の左端からの表示位置(省略可能)
  第5引数:画面の上端からの表示位置(省略可能)

OKボタンを押すと入力した文字列を、Cancelボタンを押すと、長さ0の文字列
を返します。

次の例は、テキストボックスの入力必須をエラーチェックを行っています。未
入力時の再入力のために、InputBox関数を利用しています。第4引数と第5引数
を省略していますので、画面中央に表示されます。

  If Me.TextBox1.Text = "" Then
      Me.TextBox1.Text = InputBox("IDは入力必須です", "入力エラー", "")
      Me.TextBox1.Focus()
  End If

----------------------------------------------------------------------
                 ■■ ADO.NET:DataViewの使い方1 ■■

コントロールにデータをバインドする場合に、DataViewを使って、社員テーブ
ルの社員氏名をリストボックスに表示する例を紹介します。

今回使用するsample.mdbの社員テーブルの定義は、次のとおりです。

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

まず、新規プロジェクトをひとつ作成します。フォームにコントロールを3個
貼り付けます。Button1がボタンで、ListBox1とListBox2が、リストボックス
です。

Button1を押下すると、ListBox1とListBox2に、DataViewの設定にしたがって、
社員氏名を表示します。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Button1    ListBox1   ListBox2
┃┌――――┐ ┌――――┐ ┌――――┐
┃│ 表示 │ │    │ │    │
┃└――――┘ │    │ │    │
┃       │    │ │    │
┃       │    │ │    │
┃       │    │ │    │
┃       └――――┘ └――――┘
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

まず、リストボックスに連結するDataViewオブジェクトを生成します。
ポイントは、並べ替え順序やフィルタ条件を、コンストラクタの引数として指
定することです。引数を指定せずに、DataViewを作成し、後からSortや
RowFilter等のプロパティを設定すると、インデックスが最低でも2回作成され、
パフォーンスが低下してしまいます。

引数に、データセットテーブル、フィルター、ソート列、カラム状態選択を指
定して、インスタンスを生成すると、たとえば、次のようになります。

  Dim dtvBumon As New DataView(oDataSet.Tables("部門テーブル"), _
                               "部門コード >= '501'", _
                               "部門コード", _
                               DataViewRowState.CurrentRows)

この場合は、データセットに取り込んだ部門テーブルの変更されていない行か
ら、部門コードが'0501'以上の行を、部門コードの昇順に整列して、データ
ビューに取り込むことになります。昇順の場合は、"部門コード ASC"の'ASC'
を省略することができます。

今回のプログラムでは、同一データセット社員テーブルから、異なる引数で二つの
データビューdtvBumon1と、dtvBumon2を生成して、ListBox1とListBox2に表示する
場合を紹介します。

データビューdtvBumon1では、社員コードが'00010'以下の行を、社員カナの降
順に整列して、社員氏名を表示します。したがって、インスタンスの生成は、
次のようにします。

  Dim dtvSyain1 As New DataView(oDataSet.Tables("社員テーブル"), _
                                "社員コード <= '00010'", _
                                "社員カナ DESC", _
                                DataViewRowState.CurrentRows)

データビューdtvBumon2では、社員テーブルの全行を、社員カナの昇順に整列
して、社員氏名を表示しますので、インスタンスの生成は、次のようにします。

  Dim dtvSyain2 As New DataView(oDataSet.Tables("社員テーブル"), _
                                Nothing, _
                                "社員カナ", _
                                DataViewRowState.CurrentRows)

それでは、ソースリストを掲載します。

--【プログラムソースリスト】------------------------------------------

Imports System.Data.OleDb

Public Class Form1
  Inherits System.Windows.Forms.Form

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

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

    Dim oConn As New OleDbConnection()
    Dim oCommand As New OleDbCommand()
    Dim oDataAdapter As New OleDbDataAdapter()
    Dim oDataSet As New DataSet()

    Try

      'DB接続文字列の設定
      'プロジェクトファイルホルダの下のbinホルダにMDBファイルを置く
      oConn.ConnectionString = _
      "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + _
      Application.StartupPath + "¥sample.mdb"

      'コネクションの設定
      oCommand.Connection = oConn

      'SQL文の設定
      Const strSelect As String = _
      "SELECT 社員コード, 社員氏名, 社員カナ FROM 社員テーブル"
      oCommand.CommandText = strSelect

      '社員テーブルから全レコードデータを取得する
      oDataAdapter.SelectCommand = oCommand
      oDataSet.Clear()
      oDataAdapter.Fill(oDataSet, "社員テーブル")

      'データビュー1:dtvSyain1の生成
      'DataViewの作成時にコンストラクタの引数指定
      '引数:データセットテーブル、フィルター、ソート列、カラム状態選択
      Dim dtvSyain1 As New DataView(oDataSet.Tables("社員テーブル"), _
                                    "社員コード <= '00010'", _
                                    "社員カナ DESC", _
                                    DataViewRowState.CurrentRows)

      'リストボックスに社員データビュー1を連結する
      Me.ListBox1.DataSource = dtvSyain1

      'リストボックスに社員氏名を表示できるように設定する
      Me.ListBox1.DisplayMember = "社員氏名"
      '社員氏名に対応した社員コードを
      'SelectdValueで取得できるように設定する
      Me.ListBox1.ValueMember = "社員コード"

      'データビュー2:dtvSyain2の生成
      Dim dtvSyain2 As New DataView(oDataSet.Tables("社員テーブル"), _
                                    Nothing, _
                                    "社員カナ", _
                                    DataViewRowState.CurrentRows)

      'リストボックスに社員データビュー2を連結する
      Me.ListBox2.DataSource = dtvSyain2

      'リストボックスに社員氏名を表示できるように設定する
      Me.ListBox2.DisplayMember = "社員氏名"
      '社員氏名に対応した社員コードを
      'SelectdValueで取得できるように設定する
      Me.ListBox2.ValueMember = "社員コード"

    Catch oExcept As Exception
      '例外が発生した時の処理
      MsgBox(oExcept.ToString, MsgBoxStyle.OKOnly)

    End Try

  End Sub

End Class

----------------------------------------------------------------------
            ■■ 次号予告 第21号(2月1日発行予定) ■■

1. VB.NETワンポイント
2. DataViewの使い方2(Findメソッド等)

======================================================================
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.