すぐ使えるADO.NET

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

本の紹介

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

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




【第8号】

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

----------------------------------------------------------------------
ADO.NETの基本的なプログラミングを中心に掲載します。
末永くご購読の程よろしくお願い申し上げます。

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

1. VB.NETワンポイント:StrConv関数
2. ListBoxに表示した部門名から選択した部門名の部門コードを取得
                       ◆ WebForm版 ◆
3. 次号予告

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

第1引数に指定した文字列を、第2引数に従って変換された文字列を返すこと
ができるStrConv関数を紹介します。Trace.WriteLineメソッドは実行結果確認
用です。

  Dim str As String = "abcXYZあいうカキク"

  '●小文字を大文字に変換
  str = StrConv(str, VbStrConv.UpperCase)
  Trace.WriteLine("小文字を大文字に変換:" + str)

  '●大文字を小文字に変換
  str = StrConv(str, VbStrConv.LowerCase)
  Trace.WriteLine("大文字を小文字に変換:" + str)

  '●半角文字を全角文字に変換
  str = StrConv(str, VbStrConv.Wide)
  Trace.WriteLine("半角文字を全角文字に変換:" + str)

  '●全角文字を半角文字に変換
  str = StrConv(str, VbStrConv.Narrow)
  Trace.WriteLine("全角文字を半角文字に変換:" + str)

  '●ひらがなをカタカナに変換
  str = StrConv(str, VbStrConv.Katakana)
  Trace.WriteLine("ひらがなをカタカナに変換:" + str)

  '●カタカナをひらがなに変換(注:全角カタカナのみ変換)
  str = StrConv(str, VbStrConv.Hiragana)
  Trace.WriteLine("カタカナをひらがなに変換:" + str)

第2引数は、組み合わせて使用することもできます。ただし、互いに矛盾のな
いように指定します。

小文字を大文字に変換後、半角文字を全角文字に変換する場合には、
VbStrConv.UpperCase Or VbStrConv.Wideのように、Or演算子を使います。
Option Strictが、Offの場合は、VbStrConv.UpperCase + VbStrConv.Wideの
記述も使えますが、できるだけOr演算子に統一しましょう。

  '●小文字を大文字に変換後、半角文字を全角文字に変換する場合
  str = StrConv(str, VbStrConv.UpperCase Or VbStrConv.Wide)
  Trace.WriteLine("小文字を大文字に変換後、全角文字に変換:" + str)

----------------------------------------------------------------------
 ■■ ListBoxに表示した部門名から選択した部門名の部門コードを取得 ■■
                       ◆ WebForm版 ◆

今回はWebForm版を説明します。(Windows版は第7号を見てください)

リストボックスListBox1に、部門テーブルの全部門名を表示する。表示した部
門名をひとつのみ選択できるようにする。部門名をクリックしたら、その部門
コードをラベルlblBumonCodeに表示する。

部門テーブルは、sample.mdbに次のように作成してあります。

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

最初に、新規プロジェクトをひとつ作成してください。ツールボックスから、
次のコントロールを貼り付け、プロパティを設定します。

┏━━━━━━━━━━━━━━━━━━━┓
┃   ListBox1       Label1
┃┌―――――┐ ┌―――――┐
┃│     │ │部門コード│
┃│     │ └―――――┘
┃│     │
┃│     │  lblBumonCode
┃│     │  ┌――――┐
┃└―――――┘  └――――┘
┃
┃  lblErrMsg
┃┌――――――――――――――――┐
┃└――――――――――――――――┘
┗━━━━━━━━━━━━━━━━━━━┛

   コントロール    プロパティ  設定値
 --------------------------------------------
    ListBox1      AutoPostBack True
    Label1          Text       部門コード
    lblBumonCode    Text       ""
    lblErrMsg     BorderStyle  Ridge

ListBox1のAutoPostBackプロパティにはTrueを設定します。
このプロパティをFalseにしたままだと、部門名をクリックしても、
SelectedIndexChangedイベントが発生しません。

リストボックスに、部門テーブルの全部門名を表示するために、DataAdapter
オブジェクトのFillメソッドを使い、DataSetに部門テーブルを取得します。

  Dim oDataAdapter As New OleDbDataAdapter()
  Dim oDataSet As New DataSet()

  oDataAdapter.Fill(oDataSet, "部門テーブル")

WebForm版では、部門名を表示するために、DataTextFieldプロパティに
"部門名"を設定します。

  Me.ListBox1.DataTextField = "部門名"

選択した部門名の部門コードを取得するために、DataValueFieldプロパティに
"部門コード"を設定します。

  Me.ListBox1.DataValueField = "部門コード"

DataSourceプロパティに、データセットを設定し、DataBindメソッドを実行し
て、リストボックスに連結します。

  Me.ListBox1.DataSource = oDataSet
  Me.ListBox1.DataBind()

部門名をクリックして選択すると、SelectedIndexChangedイベントが発生しま
すので、そのイベントハンドラの中で、リストボックスのSelectedItem.Value
プロパティを参照すると、クリックした部門名の部門コードを取得することが
できます。

ラベルに部門コードを表示して、正しく部門コードが取得されたことを確認し
ています。では、プログラムソースリストを掲載します。

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

Option Strict On
Imports System.Data.OleDb

Public Class WebListBox
  Inherits System.Web.UI.Page
  Protected WithEvents ListBox1 As System.Web.UI.WebControls.ListBox
  Protected WithEvents Label1 As System.Web.UI.WebControls.Label
  Protected WithEvents lblBumonCode As System.Web.UI.WebControls.Label
  Protected WithEvents lblErrMsg As System.Web.UI.WebControls.Label

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

  Private Sub Page_Load(ByVal sender As System.Object, _
                     ByVal e As System.EventArgs) Handles MyBase.Load

    '---------- ポストバックされていないときの処理 ----------
    If Not IsPostBack Then

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

      Try
        '仮想アプリケーションルートパスを取得
        Dim vPath As String = Request.ApplicationPath
        '仮想アプリケーションルートパスの物理パスを取得
        Dim path As String = Server.MapPath(vPath)

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

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

        'DB接続を開く
        oCn.Open()

        'SQL文の設定
        Const strSelect As String = "SELECT 部門コード, 部門名 " + _
        "FROM 部門テーブル ORDER BY 部門コード"
        oCommand.CommandText = strSelect

        'データを取得する
        oDataAdapter.SelectCommand = oCommand
        oDataAdapter.Fill(oDataSet, "部門テーブル")

        'リストボックスに部門名を表示する設定
        Me.ListBox1.DataTextField = "部門名"

        '部門名に対応した部門コードを取得する設定
        Me.ListBox1.DataValueField = "部門コード"

        'リストボックスにDataSetを連結
        Me.ListBox1.DataSource = oDataSet
        Me.ListBox1.DataBind()

      Catch oExcept As Exception
        '例外が発生した時の処理
        Me.lblErrMsg.Text = oExcept.ToString

      Finally
        'DB接続を閉じる
        If Not oCn Is Nothing Then
          oCn.Close()
        End If
      End Try

    End If

  End Sub

  Private Sub ListBox1_SelectedIndexChanged _
     (ByVal sender As System.Object, ByVal e As System.EventArgs) _
                                Handles ListBox1.SelectedIndexChanged

    Me.lblBumonCode.Text = Me.ListBox1.SelectedItem.Value

  End Sub

----------------------------------------------------------------------
                      ■■ 次号予告 ■■

第9号(6月25日頃発行予定)

1. VB.NETワンポイント
2. ListBox:DataSourceにArrayListクラスオブジェクトを設定して名称表示

======================================================================
VB.NET データベースプログラミング奮闘記    第8号(2004.6.11)
          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.