バックナンバー: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.