バックナンバー:VB.NETデータベースプログラミング
ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。
【第39号】
第39号(2006.3.30発行)
======================================================================
★★ VB.NETデータベースプログラミング奮闘記 ★★
----------------------------------------------------------------------
いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを中
心に掲載しますので、今後ともよろしくお願い申し上げます。
すぐ使えるADO.NET --> サンプルプログラム満載
http://park5.wakwak.com/‾weblab/
======================================================================
■■ VB.NETワンポイント:DataRowオブジェクト ■■
引数にDataTableオブジェクト変数を指定して、dataAdapterのFillメソッドを
呼び出すと、DataTableオブジェクトのDataRowオブジェクトに、取得されたレ
コードが格納されます。
Dim row As DataRow
Dim tbl As DataTable
Dim dataAdapter As New OleDbDataAdapter()
:
dataAdapter.Fill(tbl)
:
DataTableオブジェクトのDataColumnオブジェクトが持つ列情報を利用すると、
DataRowオブジェクトを使って、テーブルにレコードを追加することができま
す。DataRowオブジェクトは、DataTableオブジェクトのNewRowメソッドを呼び
出して生成します。
row = tbl.NewRow
こうして生成されたrowインスタンスは、テーブルのフィールドを持って
いますので、ここに画面からの入力値を保管することができます。たとえば、
上記のtblに社員テーブルのレコードが取得されていれば、テキストボックス
(txtSyainCode)の値を
row("社員コード") = Me.txtSyainCode.Text
のように、rowオブジェクトに保管できます。もし、社員テーブルにないフィー
ルド名を指定したり、正しい型のデータをセットしないと、例外がスローされ
ます。
このDataRowオブジェクトを利用して、テーブルにレコードを追加します。
----------------------------------------------------------------------
■■ データベースアクセスクラスの汎用メソッドについて 8 ■■
テーブルに1レコードを追加するために、DataRowオブジェクトを生成する
createDataRowメソッドと、テーブルに1レコードを追加するinsertRecordメ
ソッドをclsDBIOクラスに追加します。今号では、createDataRowメソッドを説
明します。
その前に、テーブルがデータベースに存在するかしないかのチェック部分を、
PrivateメソッドのexistTableとして、clsDBIOクラスに追加します。使い方は、
次のようになります。
If Me.existTable(parTableName) = False Then
Throw New myDBIOException("テーブルが存在しません")
End If
createDataRowメソッドでは、getKeyRecordメソッドを呼び出して、DataRowオ
ブジェクトを作成します。引数には、レコードを追加するテーブル名とキー値
を指定します。キー値は、汎用的に使える値を指定します。キー値のレコード
がテーブルになくても問題はありません。
Dim dt As DataTable
dt = Me.getKeyRecord("テーブルの名称", "A")
Dim dr As DataRow = dt.NewRow
テーブルにレコードを追加するまでの手順は次のようになります。なお、エ
ラーチェックはclsInsertSyainクラスに実装し、行データをPrivate変数に保
存します。insertRecordメソッドの引数にこのclsInsertSyainオブジェクトを
指定します。次号にclsInsertSyainクラスのソースリストを掲載します。
'***** 登録ボタンを押したときにレコードを追加する *****
Private Sub btnInsert_Click( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles btnInsert.Click
Try
Dim oRow As DataRow
Dim insertCount As Integer
Dim oDBIO As New clsDBIO()
'DataRowオブジェクトの取得
oRow = oDBIO.createDataRow("社員テーブル")
'DataRowオブジェクトにフィールド値を保管
oRow("社員コード") = Me.txtSyainCode.Text
oRow("社員氏名") = Me.txtSyainSimei.Text
:
'clsInsertSyainのインスタンスを生成してエラーチェック
'コンストラクタでエラーチェック(エラーがあれば、例外をスロー)
Dim oSyain As New clsInsertSyain(oRow)
'1レコードを追加
insertCount = oDBIO.insertRecord(oSyain)
Catch oExcept As 独自例外
'独自例外が発生した時の処理
Catch oExcept As Exception
'例外が発生した時の処理
End Try
End Sub
--【プログラムソースリスト】------------------------------------------
Option Explicit On
Imports System.Data.OleDb
Imports System.Text.RegularExpressions
'----------------- << データベースアクセスクラス >> -----------------
Public Class clsDBIO
'--------------------< メンバ:変数 >--------------------
'コネクション
Private mConn As OleDbConnection
'コマンド
Private mCommand As OleDbCommand
'テーブル名コレクション
Private mTableNameList As New Collection()
'*******************************************************************
' 機能:コンストラクタ
' 引数:なし
' 履歴:2005.12.16 追加したFinallyブロックにmConn.Close()を移動
'*******************************************************************
Public Sub New()
'第35号を参照願います。
'http://park5.wakwak.com/‾weblab/mag035.html
End Sub
'*******************************************************************
' 機能:キー値のレコードの有無を調べるメソッド
' 引数:テーブル名、キー値
' 戻値:ある-->True、ない-->False
' 備考:キー値は英数字 "_" "-" で構成されていること
'*******************************************************************
Public Function existKeyRecord( _
ByVal parTableName As String, ByVal parKeyValue As String) As Boolean
'第33号を参照願います。
'http://park5.wakwak.com/‾weblab/mag033.html
End Function
'*******************************************************************
' 機能:複数キー値のレコードの有無を調べるメソッド
' 引数:テーブル名、キーフィールド名配列、キー値配列
' 戻値:ある-->True、ない-->False
' 備考:キー値は英数字 "_" "-" で構成されていること
'*******************************************************************
Public Function existKeyRecord(ByVal parTableName As String, _
ByVal parKeyfield() As String, _
ByVal parKeyValue() As String) As Boolean
'第34号を参照願います。
'http://park5.wakwak.com/‾weblab/mag034.html
End Function
'*******************************************************************
' 機能:引数にテーブルと主キー値を指定してレコードを取得するメソッド
' 引数:String型 テーブル名
' 引数:String型 主キー値
' 戻値:DataTable型 取得したレコード
' 備考:キー値は英数字 "_" "-" で構成されていること
'*******************************************************************
Public Function getKeyRecord(ByVal parTableName As String, _
ByVal parKeyValue As String) As DataTable
'第35号を参照願います。
'http://park5.wakwak.com/‾weblab/mag035.html
End Function
'*******************************************************************
' 機能:複数キー値のレコードを取得するメソッド
' 引数:String型:テーブル名
' 引数:String型:主キーフィールド名配列
' 引数:String型:主キーフィールドに対応するキー値配列
' 戻値:DataTable型:取得したレコード情報
' 備考:キー値は英数字 "_" "-" で構成されていること
'*******************************************************************
Public Function getKeyRecord(ByVal parTableName As String, _
ByVal parKeyfields() As String, _
ByVal parKeyValues() As String) As DataTable
'第36号を参照願います。
'http://park5.wakwak.com/‾weblab/mag036.html
End Function
'*******************************************************************
' 機能:テーブルの全レコードを取得するメソッド
' 引数:String型:テーブル名
' 戻値:DataTable型:取得したレコード
'*******************************************************************
Public Function getAllRecords(ByVal parTableName As String) As DataTable
'第37号を参照願います。
'http://park5.wakwak.com/‾weblab/mag037.html
End Function
'*******************************************************************
' 機能:引数に指定した主キー値の範囲のレコードを取得するメソッド
' 引数:String型-->テーブル名
' 引数:String型-->主キーの最少値
' 引数:String型-->主キーの最大値
' 引数:String型-->主キーフィールド名(指定しない場合は、既定値の空文字列)
' 戻値:DataTable型:取得したレコード
' 備考:キー値は英数字 "_" "-" で構成されていること
'*******************************************************************
Public Function getRecordsOfRangeOfKey( _
ByVal parTableName As String, _
ByVal parMinValueOfKey As String, _
ByVal parMaxValueOfKey As String, _
Optional ByVal parKeyfield As String = "") _
As DataTable
'第38号を参照願います。
'http://park5.wakwak.com/‾weblab/mailMagazine.html
End Function
'*******************************************************************
' 機能:テーブル対応の1行を生成するメソッド
' 引数:String型:テーブル名
' 戻値:DataRow型:生成した行
'*******************************************************************
Public Function createDataRow(ByVal parTableName As String) As DataRow
Dim retDataRow As DataRow 'リターン値
Try
'★引数チェック
If parTableName = Nothing Then
Throw New myDBIOException("引数テーブル名が未設定")
End If
'テーブル存在チェック
If Me.existTable(parTableName) = False Then
Throw New myDBIOException("テーブルが存在しません")
End If
Dim dt As DataTable
dt = Me.getKeyRecord(parTableName, "9")
retDataRow = dt.NewRow
Catch oExcept As myDBIOException
Throw New myDBIOException(oExcept.Message)
Catch oExcept As Exception
Throw New Exception _
("clsDBIOのcreateDataRowで例外発生" + oExcept.ToString)
End Try
Return retDataRow
End Function
'*******************************************************************
' 機能:テーブル名をチェックするメソッド
' 引数:String型:テーブル名
' 戻値:Boolean型:引数のテーブル名が正しい時True、誤っている時False
'*******************************************************************
Private Function existTable(ByVal parTableName As String) As Boolean
Dim retBool As Boolean 'リターン値
Dim tblName As String
Dim existFlg As Boolean
For Each tblName In mTableNameList
If tblName = parTableName Then
retBool = True
Exit For
End If
Next tblName
If Not retBool = True Then
retBool = False
End If
Return retBool
End Function
End Class
'--------------- << 独自エラーメッセージ用例外クラス >> --------------
Public Class myDBIOException
Inherits ApplicationException
Public Sub New(ByVal errorMessage As String)
MyBase.New(errorMessage)
End Sub
End Class
----------------------------------------------------------------------
■■ 次号予告 第40号(4月24日発行予定) ■■
1. VB.NETワンポイント
2. データベースアクセスクラスの汎用メソッドについて 9
======================================================================
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」ホームページに掲載されてい
る会社名・製品名等は、各社の登録商標または商標です。
======================================================================
↑このページ(メルマガ:VB.NETデータベース) 先頭へ | すぐ使えるADO.NET ホームへ
Copyright© すぐ使えるADO.NET. All rights reserved.