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