バックナンバー: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」ホームページに掲載されて いる会社名・製品名等は、各社の登録商標または商標です。 ======================================================================
↑このページ(メルマガ:VB.NETデータベース) 先頭へ | すぐ使えるADO.NET ホームへ
Copyright© すぐ使えるADO.NET. All rights reserved.