バックナンバー:VB.NETデータベースプログラミング
ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。
【第37号】
第37号(2006.2.8発行)
======================================================================
★★ VB.NETデータベースプログラミング奮闘記 ★★
----------------------------------------------------------------------
いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを中
心に掲載しますので、今後ともよろしくお願い申し上げます。
すぐ使えるADO.NET --> サンプルプログラム満載
http://park5.wakwak.com/‾weblab/
======================================================================
■■ VB.NETワンポイント:コネクションオブジェクトのプロパティ ■■
前回は、Stateプロパティを紹介しましたが、今回は他のコネクションオブ
ジェクトのプロパティを紹介します。
◆ServerVersionプロパティ
使用するデータベースのバージョンが、99.99.9999の書式の文字列で返されま
す。1番目の2桁がメジャーバージョン、2番目の2桁がマイナーバージョン、
3番目の4桁がリリースバージョンとなります。 ServerVersionがサポートさ
れていない場合には、空文字列が返されます。
◆ConnectionTimeoutプロパティ
接続が開かれるまでの待機時間(秒数)を取得することができます。既定値は
15秒になっています。
◆Providerプロパティ
接続文字列で指定したProvider句のプロバイダ名を取得できます。次の例では、
"Microsoft.Jet.OLEDB.4.0"になります。
'コネクション
Dim mConn As OleDbConnection
Try
'DB接続文字列の設定
mConn = New OleDbConnection()
mConn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" _
& Application.StartupPath & "¥sample.mdb"
mConn.Open()
'DBMSバージョンを表示
MessageBox.Show(mConn.ServerVersion, "DBMSバージョン")
'待機時間を表示
MessageBox.Show(mConn.ConnectionTimeout.ToString, "待機時間")
'Provider句を表示
MessageBox.Show(mConn.Provider, "Provider句")
Catch oExcept As Exception
Throw New Exception("例外発生" + oExcept.ToString)
Finally
'DB接続を閉じる
If Not mConn Is Nothing Then
If mConn.State = ConnectionState.Open Then
mConn.Close()
End If
End If
End Try
----------------------------------------------------------------------
■■ データベースアクセスクラスの汎用メソッドについて 6 ■■
今回は、引数に指定したテーブルの全レコードを取得する汎用的なメソッド
getAllRecordsを作成します。ただし、レコード数の多いテーブルの呼び出し
には、注意してください。タイムアウトの設定などは既定値をそのまま使って
います。
◆引数のNothing(未設定)チェック
引数のテーブル名が未設定の場合、myDBIOException例外をスローします。
◆テーブル名チェック
引数のテーブル名がmTableNameListになければ、エラーとして、
myDBIOException例外をスローします。
◆SQL文の構築
引数のテーブル名を、SQL文に連結します。
mCommand.CommandText = "SELECT * FROM " + parTableName
◆レコードの取得
データアダプタのFillメソッドを呼び出します。DataTable型の戻りオブジェ
クトの中に取得したレコードが格納されます。このオブジェクトをリターン
値にセットします。
次号では、テーブルのキー値の指定範囲のレコードを取得する汎用的なメソッ
ドgetRecordsOfRangeOfKeyをclsDBIOクラスに追加します。このメソッドで
SELECT系を完了にします。後は必要に応じて追加していくことにします。
--【プログラムソースリスト】------------------------------------------
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/mailMagazine.html
End Function
'*******************************************************************
' 機能:テーブルの全レコードを取得するメソッド
' 引数:String型:テーブル名
' 戻値:DataTable型:取得したレコード
' 備考:キー値は英数字のみで構成されている
'*******************************************************************
Public Function getAllRecords(ByVal parTableName As String) As DataTable
Dim retDataTable As New DataTable() 'リターン値
Dim keyList As New Collection()
Dim i As Integer
Try
'引数チェック
If parTableName = Nothing Then
Throw New myDBIOException("引数テーブル名が未設定")
End If
'テーブル名チェック
Dim tblName As String
Dim existFlg As Boolean
For Each tblName In mTableNameList
If tblName = parTableName Then
existFlg = True
Exit For
End If
Next tblName
If Not existFlg = True Then
Throw New myDBIOException("テーブル名不正")
End If
'DB接続を開く
mConn.Open()
mCommand.Parameters.Clear()
'SQL文設定
mCommand.CommandText = "SELECT * FROM " + parTableName
'テーブルからレコード取得
Dim dataAdapter As New OleDbDataAdapter()
dataAdapter.SelectCommand = mCommand
dataAdapter.Fill(retDataTable)
Catch oExcept As myDBIOException
Throw New myDBIOException(oExcept.Message)
Catch oExcept As Exception
Throw New Exception _
("clsDBIOのgetAllRecordsで例外発生" + oExcept.ToString)
Finally
'DB接続を閉じる
If Not mConn Is Nothing Then
If mConn.State = ConnectionState.Open Then
mConn.Close()
End If
End If
End Try
'◆リターン
Return retDataTable
End Function
End Class
'--------------- << 独自エラーメッセージ用例外クラス >> --------------
Public Class myDBIOException
Inherits ApplicationException
Public Sub New(ByVal errorMessage As String)
MyBase.New(errorMessage)
End Sub
End Class
----------------------------------------------------------------------
■■ 次号予告 第38号(3月3日発行予定) ■■
1. VB.NETワンポイント
2. データベースアクセスクラスの汎用メソッドについて 7
======================================================================
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.