すぐ使えるADO.NET

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

本の紹介

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

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




【第13号】

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

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

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

1. VB.NETワンポイント:ハッシュテーブル(連想配列)
2. 部門単位で自動連番を生成するクラスの作成 4

----------------------------------------------------------------------
       ■■ VB.NETワンポイント:ハッシュテーブル(連想配列) ■■

今回は、ハッシュテーブル(連想配列)を紹介します。ハッシュテーブルは、高
速検索ができる複数のキーと値を1組で保持しているコレクションです。ハッ
シュテーブルのキーを用いて、その値にアクセスすることができます。

ハッシュテーブルへ項目を追加する時は、Addメソッドを使います。

  Dim htblGengo As New Hashtable()
  htblGengo.Add("M", "明治")
  htblGengo.Add("T", "大正")
  htblGengo.Add("S", "昭和")

キーの要素が既に存在していると、例外がスローされます。
必要ならば、ContainsKeyメソッドを使って、キーが存在しないことを
チェックして追加してください。キーが存在すれば、Trueを、存在しなければ、
Falseを返します。

  If Not htblGengo.ContainsKey("H") Then
    htblGengo.Add("H", "平成")
  End If

値を取得する時には、キーを指定し、必要に応じて型変換をします。
今回の例では、文字列として取得しますので、CStr関数で、String型に変換し
ています。strGengo1は"平成"、strGengo2は"昭和"になります。

  Dim strGengo1 As String = CStr(htblGengo("H"))
  Dim strGengo2 As String = CStr(htblGengo("S"))

指定したキーが存在しない場合には、Nothingが返されます。
キー値"A"は存在しませんので、strGengo3は、Nothingになります。

  Dim strGengo3 As String = CStr(htblGengo("A"))

ContainsValueメソッドで、値の存在チェックをすることもできます。
値が存在すれば、Trueを、存在しなければ、Falseを返します。
次の例の場合、bolRetは、Trueになります。

  Dim bolRet As Boolean = htblGengo.ContainsValue("大正")

----------------------------------------------------------------------
         ■■ 部門単位で自動連番を生成するクラスの作成 4 ■■

前号からの続きで、自動連番を生成するクラスclsSequenceNumを構築します。
なお、自動連番生成テーブルは次のように定義しています。

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

今回は、最後に残ったcreateSequenceNumメソッドを説明します。このメソッ
ドは、内部からアクセスするだけですから、Privateメソッドとします。

createSequenceNumメソッドは、連番生成テーブルに1レコードを登録するメ
ソッドです。部門コードのレコードが連番生成テーブルに存在しない時に、
このメソッドでレコードを追加します。

createSequenceNumメソッド中で使用するSQL文は、次のようにします。

 "INSERT INTO 連番生成テーブル (部門コード, 連番, 更新日時) " + _
 "VALUES(@bumonCode, @renban, @kosinNitizi)"

@bumonCodeには、部門コードmBumonCodeを設定します。

@renbanには、初期値として0を設定して、連番は1から開始しますが、次号で、
開始番号を自由に指定にできるように、コンストラクタを追加して改良します。
この改良が終われば、自動連番生成クラスは完成します。

@kosinNitiziniには、Now()で現在の年月日日時を設定します。

連番生成テーブルにレコード追加する場合も更新する場合と同様に、
ExecuteNonQueryメソッドを実行します。戻り値は、追加したレコード数です。
戻り値が1ならば、追加成功となります。

  Dim count As Integer = oCommand.ExecuteNonQuery()
  If count = 1 Then
    '追加成功処理
  Else
    '追加失敗処理
  End If

では、createSequenceNumメソッドのソースリストを掲載します。

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

Public Class clsSequenceNum

  '部門コード
  Private mBumonCode As String

  '------------------------------------------------------------
  ' 機能:コンストラクタ
  ' 引数:in 部門コード
  '------------------------------------------------------------
  Sub New(ByVal parBumonCode As String)

    MyBase.New()
    Me.mBumonCode = parBumonCode

    '部門コードのレコードがなければ、1レコード追加
    If Me.existBumon = False Then
      Me.createSequenceNum()
    End If

  End Sub

  '------------------------------------------------------------
  ' 機能:連番生成テーブルから連番を取得する関数
  ' 引数:なし
  ' 戻値:8桁文字列ならば、取得成功
  '       ""(長さ0の文字列)ならば、取得失敗
  '------------------------------------------------------------
  Public Function getSequenceNum() As String
    '第11号に掲載しました。
    http://park5.wakwak.com/‾weblab/mag011.htm
  End Function

  '------------------------------------------------------------
  ' 機能:プロパティの部門コードのレコードが連番生成テーブルに
  '       存在するか否かを調べるメソッド
  ' 引数:なし
  ' 戻値:True  --> 存在する.  False --> 存在しない
  '------------------------------------------------------------
  Private Function existBumon() As Boolean
    '第12号に掲載しました。
    http://park5.wakwak.com/‾weblab/mag012.htm
  End Function

  '------------------------------------------------------------
  ' 機能:連番生成テーブルに1レコードを登録するメソッド
  ' 引数:なし
  ' 戻値:True  --> 登録成功.  False --> 登録失敗
  '------------------------------------------------------------
  Private Function createSequenceNum() As Boolean

    Const strInsertSyain As String = _
    "INSERT INTO 連番生成テーブル (部門コード, 連番, 更新日時) " + _
    "VALUES(@bumonCode, @renban, @kosinNitizi)"

    Dim oConn As New OleDbConnection()
    Dim oCommand As New OleDbCommand()

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

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

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

      'SQL文の設定
      oCommand.CommandText = strInsertSyain

      'パラメータの設定
      oCommand.Parameters.Add( _
      New OleDbParameter("@bumonCode", OleDbType.Char, 3))
      oCommand.Parameters("@bumonCode").Value = Me.mBumonCode

      oCommand.Parameters.Add( _
      New OleDbParameter("@renban", OleDbType.Integer))
      oCommand.Parameters("@renban").Value = 0

      oCommand.Parameters.Add( _
      New OleDbParameter("@kosinNitizi", OleDbType.Date))
      oCommand.Parameters("@kosinNitizi").Value = Now()

      '自動連番生成テーブルレコード追加処理実行
      Dim count As Integer = oCommand.ExecuteNonQuery()
      If count = 1 Then
        '追加成功:戻り値にTrueを設定してリターン
        Return True
      Else
        '追加失敗:戻り値にFalseを設定してリターン
        Return False
      End If

    Catch oExcept As Exception
      '例外が発生した時の処理
      Throw New clsDBIOException(oExcept.ToString)

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

    End Try

  End Function

End Class

----------------------------------------------------------------------
            ■■ 次号予告 第14号(9月13日頃発行予定) ■■

1. VB.NETワンポイント
2. 部門単位で自動連番を生成するクラスの作成 5(完)

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