バックナンバー:VB.NETデータベースプログラミング
ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。
【第41号】
第41号(2006.5.18発行) ====================================================================== ★★ VB.NETデータベースプログラミング奮闘記 ★★ ---------------------------------------------------------------------- いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを中 心に掲載しますので、今後ともよろしくお願い申し上げます。 すぐ使えるADO.NET --> サンプルプログラム満載 http://park5.wakwak.com/‾weblab/ ====================================================================== ■■ VB.NETワンポイント:宣言の訂正 ■■ clsDBIOクラスのinsertRecordメソッド内で、 mCommand.Parameters("@sCode").Value = parSyain.pSyainCode mCommand.Parameters("@sSimei").Value = parSyain.pSyainSimei mCommand.Parameters("@sKana").Value = parSyain.pSyainKana のように使用するために、clsInsertSyainクラスに定義した、pSyainCodeプロ パティ、pSyainSimeiプロパティ、pSyainKanaプロパティを、Private宣言から Public宣言に変更します。 ----- 訂正内容 ------------------------------------------------------- 【変更前】Private Property pSyainCode() As String 【変更後】Public Property pSyainCode() As String 【変更前】Private Property pSyainSimei() As String 【変更後】Public Property pSyainSimei() As String 【変更前】Private Property pSyainKana() As String 【変更後】Public Property pSyainKana() As String 恐れ入りますが、宣言の修正よろしくお願いします。 ---------------------------------------------------------------------- ■■ データベースアクセスクラスの汎用メソッドについて 10 ■■ 社員テーブルに1レコードを追加するinsertRecordメソッドを、clsDBIOクラ スに追加します。 社員テーブル以外のレコード追加メソッドも、insertRecordと同一の名称にし、 それぞれのテーブル用の引数を用意して区別します。 今回は、トランザクション制御を使って、社員テーブルにレコードを追加しま す。ADO.NETで明示的にトランザクションを開始するためには、Connectionオ ブジェクトのBeginTransactionメソッドを使います。 Dim oTrans As OleDbTransaction oTrans = mConn.BeginTransaction mCommand.Transaction = oTrans 追加されたレコード数は、レコードを追加するために実行するコマンドオブ ジェクトのExecuteNonQueryメソッドの戻り値です。この戻り値が1以外は、 レコード追加の失敗となります。 retInsertCount = mCommand.ExecuteNonQuery() 追加するレコードが1レコードならば、Commitメソッドでトランザクションを 完了します。 oTrans.Commit() 追加するレコードが1レコードでなかった場合には、Transactionオブジェクト のRollbackメソッドを使って、それまでの変更処理をすべてキャンセルして、 データベース内のテーブルデータをすべて変更前の状態に戻します。 oTrans.Rollback() なお、社員テーブルには、社員コード・社員氏名・社員カナ・更新日時を追加 することを前提に各クラスを作成していますので、実情に合わせて拡張するよ うにしてください。 --【プログラムソースリスト】------------------------------------------ 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/mag038.html End Function '******************************************************************* ' 機能:テーブル対応の1行を生成するメソッド ' 引数:String型:テーブル名 ' 戻値:DataRow型:生成した行 '******************************************************************* Public Function createDataRow(ByVal parTableName As String) As DataRow '第39号を参照願います。 'http://park5.wakwak.com/‾weblab/mag039.html End Function '******************************************************************* ' 機能:テーブル名をチェックするメソッド ' 引数:String型:テーブル名 ' 戻値:Boolean型:引数のテーブル名が正しい時True、誤っている時False '******************************************************************* Private Function existTable(ByVal parTableName As String) As Boolean '第39号を参照願います。 'http://park5.wakwak.com/‾weblab/mag039.html End Function '******************************************************************* ' 機能:テーブルに1レコードを追加するメソッド ' 引数:clsInsertSyain型:追加する1レコード分のデータ ' 戻値:integer型:追加したレコード数 '******************************************************************* Public Function insertRecord(ByVal parSyain As clsInsertSyain) As Integer Dim retInsertCount As Integer 'リターン値 Dim keyList As New Collection() Dim i As Integer Try '★引数チェック If parSyain Is Nothing Then Throw New myDBIOException("引数が未設定") End If '----------<< 1.社員テーブルに1レコードを追加 >>---------- '***** SQL文の設定 ***** mCommand.CommandText = _ "INSERT INTO " & _ "社員テーブル(社員コード, 社員氏名, 社員カナ, 更新日時) " & _ "VALUES(@sCode, @sSimei, @sKana, @kosinDate)" '***** SQL文の引数設定 ***** mCommand.Parameters.Clear() mCommand.Parameters.Add _ (New OleDbParameter("@sCode", OleDbType.Char, 5)) mCommand.Parameters.Add _ (New OleDbParameter("@sSimei", OleDbType.Char, 20)) mCommand.Parameters.Add _ (New OleDbParameter("@sKana", OleDbType.Char, 40)) mCommand.Parameters.Add _ (New OleDbParameter("@kosinDate", OleDbType.Date)) '***** 引数に値を設定 ***** mCommand.Parameters("@sCode").Value = parSyain.pSyainCode mCommand.Parameters("@sSimei").Value = parSyain.pSyainSimei mCommand.Parameters("@sKana").Value = parSyain.pSyainKana mCommand.Parameters("@kosinDate").Value = Now() 'DB接続を開く mConn.Open() '***** トランザクション開始 ***** Dim oTrans As OleDbTransaction oTrans = mConn.BeginTransaction mCommand.Transaction = oTrans '***** データベースの更新を実行 ***** retInsertCount = mCommand.ExecuteNonQuery() If retInsertCount = 1 Then '***** トランザクション完了 ***** oTrans.Commit() Else '◆レコード追加に失敗したらロールバックして例外スロー oTrans.Rollback() Throw New myDBIOException _ ("社員テーブル:レコード追加処理が失敗しました。") End If Catch oExcept As myDBIOException Throw New myDBIOException(oExcept.Message) Catch oExcept As Exception Throw New Exception _ ("clsDBIOのinsertRecordで例外発生" + 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 retInsertCount End Function End Class '--------------- << 独自エラーメッセージ用例外クラス >> -------------- Public Class myDBIOException Inherits ApplicationException Public Sub New(ByVal errorMessage As String) MyBase.New(errorMessage) End Sub End Class ---------------------------------------------------------------------- ■■ 次号予告 第42号(6月12日発行予定) ■■ 1. VB.NETワンポイント 2. データベースアクセスクラスの汎用メソッドについて 11 ====================================================================== 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.