バックナンバー:VB.NETデータベースプログラミング
ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。
【第40号】
第40号(2006.4.24発行) ====================================================================== ★★ VB.NETデータベースプログラミング奮闘記 ★★ ---------------------------------------------------------------------- いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを中 心に掲載しますので、今後ともよろしくお願い申し上げます。 すぐ使えるADO.NET --> サンプルプログラム満載 http://park5.wakwak.com/‾weblab/ ====================================================================== ■■ VB.NETワンポイント:独自例外クラス ■■ 入力項目別に、独自例外クラスを作成すると、入力エラー時のにフォーカス設 定やエラーメッセージ処理が簡単になります。独自例外クラスは入力項目数だ け必要ですが、コーディングは楽になりますのでお勧めです。独自例外クラス は、myDBIOException のようにコーディングします。 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 oRow("社員カナ") = Me.txtSyainKana.Text 'clsInsertSyainのインスタンスを生成してエラーチェック Dim oSyain As New clsInsertSyain(oRow) '社員テーブルに1レコードを追加 insertCount = oDBIO.insertRecord(oSyain) Catch oExcept As 社員コードの例外 '社員コード入力エラーが発生した時の処理 Catch oExcept As 社員氏名の例外 '社員氏名入力エラーが発生した時の処理 Catch oExcept As 社員カナの例外 '社員カナ入力エラーが発生した時の処理 Catch oExcept As myDBIOException 'clsDBIOで例外が発生した時の処理 Catch oExcept As Exception '上記以外の例外が発生した時の処理 End Try '--------------- << 独自エラーメッセージ用例外クラス >> -------------- Public Class myDBIOException Inherits ApplicationException Public Sub New(ByVal errorMessage As String) MyBase.New(errorMessage) End Sub End Class ---------------------------------------------------------------------- ■■ データベースアクセスクラスの汎用メソッドについて 9 ■■ clsInsertSyainクラスをプロジェクトに追加します。 clsInsertSyainクラスは、レコード追加時のエラーチェックをする専用クラス です。変更や削除の場合には、別にクラスを作成します。今回は継承を考えず、 それぞれ独立したクラスとして作成しますが、時間がある方は、継承を検討し てみてください。 DataRowオブジェクトをコンストラクタの引数に指定して、clsInsertSyainク ラスのインスタンスを生成します。 コンストラクタでは、各入力データをSetプロパティを使って、Private変数に 保存します。Setプロパティに、エラーチェックをコーディングします。 エラーがあれば、入力項目に対応する独自の例外を Throwします。 今回のclsInsertSyainクラスは、23号で掲載したclsSyainTorokuクラスを修正 して掲載しています。おもな修正点は、次の2点です。 1. コンストラクタに引数を指定 2. SetプロパティをPublic宣言からPrivate宣言に変更 -----【エラーチェック内容】----- 社員コード 1.入力必須。未入力ならエラー 2.数字なら正常。数字以外が含まれていればエラー 3.社員テーブルにレコードがなければ正常。あればエラー 社員氏名: 1.入力必須。未入力ならエラー 社員カナ: 1.入力任意。未入力でも正常 2.入力時は、全角カタカナなら正常。全角カタカナ以外があればエラー Setプロパティを呼び出す前に、各項目のDBNull値のチェックをします。 DBNull値のチェック: DataRowオブジェクトには、他のどんな値とも異なるDBNull値が格納されます。 そのため、値を代入しないとDBNull値のままになり、例外が発生します。念の ため、コンストラクタの中で、IsDBNull関数を呼び出して、エラーチェックを します。 --【プログラムソースリスト】------------------------------------------ Option Strict On Imports System.Text.RegularExpressions Public Class clsInsertSyain Private mSyainCode As String Private mSyainSimei As String Private mSyainKana As String '---------------------------------------------------------------------- ' 機能:コンストラクタ ' 引数:in 社員テーブル1レコード分のデータ '---------------------------------------------------------------------- Sub New(ByVal parSyain As DataRow) MyBase.New() '【社員コードセット】 If IsDBNull(parSyain("社員コード")) Then Throw New Exception("clsInsertSyain.New引数例外:社員コード未設定") Else pSyainCode = CStr(parSyain("社員コード")) End If '【社員氏名セット】 If IsDBNull(parSyain("社員氏名")) Then Throw New Exception("clsInsertSyain.New引数例外:社員氏名未設定") Else pSyainSimei = CStr(parSyain("社員氏名")) End If '【社員カナセット】 If IsDBNull(parSyain("社員カナ")) Then Throw New Exception("clsInsertSyain.New引数例外:社員カナ未設定") Else pSyainKana = CStr(parSyain("社員カナ")) End If End Sub '-------------------- プロパティ:社員コード -------------------- Private Property pSyainCode() As String 'Getプロパティ Get Return Me.mSyainCode End Get 'Setプロパティ Set(ByVal Value As String) '未入力はエラー If Value = "" Then Throw New mySyainCodeException("社員コードを入力してください") Else '数字以外はエラー If Not Regex.IsMatch(Value, "^[0-9]+$") Then Throw New _ mySyainCodeException("社員コードは数字で入力してください") Else Dim oDBIO As New clsDBIO() '社員マスタにこの社員コードがあればエラー If oDBIO.existKeyRecord("社員テーブル", Value) = True Then Throw New mySyainCodeException("この社員コードは登録済です") Else Me.mSyainCode = Value End If End If End If End Set End Property '-------------------- プロパティ:社員氏名 -------------------- Private Property pSyainSimei() As String 'Getプロパティ Get Return Me.mSyainSimei End Get 'Setプロパティ Set(ByVal Value As String) '未入力はエラー If Value = "" Then Throw New mySyainSimeiException("社員氏名を入力してください") Else mSyainSimei = Value End If End Set End Property '-------------------- プロパティ:社員カナ -------------------- Private Property pSyainKana() As String 'Getプロパティ Get Return mSyainKana End Get 'Setプロパティ Set(ByVal Value As String) '未入力はエラーとしない If Value = "" Then mSyainKana = Value Else '全角カタカナチェック If Regex.IsMatch(Value, "^[ァ-ー]+$") Then mSyainKana = Value Else Throw New mySyainKanaException _ ("社員カナを全角カタカナで入力してください") End If End If End Set End Property End Class ---------------------------------------------------------------------- ■■ 次号予告 第41号(5月18日発行予定) ■■ 1. VB.NETワンポイント 2. データベースアクセスクラスの汎用メソッドについて 10 ====================================================================== 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.