バックナンバー 【第61号】
ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。
【第61号】
第61号(2008.2.28発行) ====================================================================== ★★ -- VB.NETデータベースプログラミング奮闘記 -- ★★ (VB 2005 Express & SQL Server 2005 Express) ---------------------------------------------------------------------- いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを中 心に掲載します。今後ともよろしくお願い申し上げます。 すぐ使えるADO.NET --> http://park5.wakwak.com/‾weblab/ ====================================================================== ■■ 社員テーブルに追加する 3 ■■ 社員コード、社員氏名、カナ名、部署コードを入力して、追加ボタンをクリッ クすると、入力したデータのエラーチェックをして、エラーが無ければ、社員 テーブルに1レコード追加します。接続文字列は、app.configに登録しておき ます。 【sampleデータベースの社員テーブル】 ---------------------------------------------------------------------- key 列 名 データ型 nullを許容 備 考 ---------------------------------------------------------------------- ○ 社員コード nchar(5) 許容しない 英数字のみ − 社員氏名 nvarchar(20) 許容しない − 社員カナ nvarchar(40) 許容しない − 部署コード nchar(4) 許容しない − 更新日時 datetime 許容しない ---------------------------------------------------------------------- 【sampleデータベースの部署テーブル】 ---------------------------------------------------------------------- key 列 名 データ型 nullを許容 備 考 ---------------------------------------------------------------------- ○ 部署コード nchar(4) 許容しない 英数字のみ − 部署名 nvarchar(20) 許容しない − 更新日時 datetime 許容しない ---------------------------------------------------------------------- コンボボックスのDropDownStyleプロパティは、DropDownListを選択して、テ キストボックス部分を入力できないように設定します。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ 社員テーブル追加 _□×┃ ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ ┃ Label1 TxtShainCode ┃┌―――――┐ ┌―――――┐ ┃│社員コード│ │ │ ┃└―――――┘ └―――――┘ ┃ Label2 TxtShainShimei ┃┌―――――┐ ┌――――――――┐ ┃│社員氏名 │ │ │ ┃└―――――┘ └――――――――┘ ┃ Label3 TxtShainKana ┃┌―――――┐ ┌――――――――――――――┐ ┃│社員カナ │ │ │ ┃└―――――┘ └――――――――――――――┘ ┃ Label4 CboBusho ┃┌―――――┐ ┌――――――――┐ ┃│部署コード│ │ │▼│ ┃└―――――┘ └――――――――┘ ┃ BtnInsert BtnClear ┃┌――――┐ ┌―――――┐ ┃│ 追加 │ │ クリア │ ┃└――――┘ └―――――┘ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ---------------------------------------------------------------------- ■■ エラーチェック ■■ 下のように、前号の追加ボタンクリック処理では、入力データのエラーチェッ クの実装をしていません。 Try Dim shain As DataRow Dim dbIO As New ClsShainTableIO() shain = dbIO.createDataRow("社員テーブル") shain("社員コード") = Me.TxtShainCode.Text shain("社員氏名") = Me.TxtShainShimei.Text shain("社員カナ") = Me.TxtShainKana.Text shain("部署コード") = Me.CboBushoMei.SelectedValue dbIO.insertRecord(New clsInsertSyain(shain)) 'フォーム初期設定 Me.ClearForm() Catch '(以下省略) End Try 入力データのエラーチェックは、すべて社員追加クラスClsInsertSyainに実装 します。入力エラーがあれば、各入力項目別に独自の例外をスローします。社 員コードに入力エラーがあれば、MyShainCodeExceptionを、社員氏名に入力エ ラーがあれば、MyShainSimeiExceptionをスローするようにします。 社員テーブルDataRowインスタンスに入力データをセットして、ClsInsertSyain のインスタンスの引数に指定すれば、エラーがなければ、Setプロパティでメン バ変数に値がセットされます。 ---------------------------------------------------------------------- ■■ ClsInsertSyain クラス ■■ ClsInsertSyainは、ClsShainBaseクラスを継承したクラスとします。 ClsShainBaseクラスでは、追加・更新・削除・参照の共通処理を実装します。 エラーチェックは、社員コード、社員氏名、社員カナ、部署コードのセットプ ロパティに実装します。 社員コードのエラーチェックは、追加とその他の処理と異なるので、基本クラ スでは、プロパティ名と返値を宣言して、実装は継承クラスで行います。 Public MustOverride Property ShainCode() As String Setプロパティでメンバ変数に入力値をセットし、Getプロパティでメンバ変数 の値を取得します。従ってメンバ変数は、 Private変数として宣言して、直接 メンバ変数にアクセスできないようにします。 社員テーブルDataRowの各列は、値をセットしないとDBNullになっています。 念のため、Setプロパティを呼び出す前に、DBNullをチェックして、値がセッ トされている場合だけ、Setプロパティにアクセスします。 --【プログラムソースリスト(ファイル名:ClsSyain.vb)】--------------- Option Strict On Imports System.Text.RegularExpressions Public MustInherit Class ClsShainBase '-------------------------< メンバ:変数 >-------------------------- Private shainSimeiValue As String Private shainKanaValue As String Private bushoCodeValue As String '------------------------------------------------------------------- '機能:コンストラクタ '引数:なし '------1---------2---------3---------4---------5----------6--------- Sub New() MyBase.New() '必ず最初に基本クラスのコンストラクタを呼び出す End Sub '-------------------- プロパティ:社員コード ----------------------- Public MustOverride Property ShainCode() As String '-------------------- プロパティ:社員氏名 ------------------------- Public Property ShainSimei() As String 'Getプロパティ Get Return shainSimeiValue End Get 'Setプロパティ Set(ByVal Value As String) '【エラーチェック】 If Value = "" Then '未入力はエラー Throw New myShainSimeiException _ ("社員氏名を入力してください") Else shainSimeiValue = Value End If End Set End Property '-------------------- プロパティ:社員カナ ------------------------- Public Property ShainKana() As String 'Getプロパティ Get Return shainKanaValue End Get 'Setプロパティ Set(ByVal Value As String) '【エラーチェック】 If Value = "" Then '未入力はエラー Throw New myShainKanaException _ ("社員カナを入力してください") Else '全角カタカナ以外はエラー If Regex.IsMatch(Value, "^[ァ-ー]+$") Then shainKanaValue = Value Else Throw New myShainKanaException _ ("社員カナを全角カタカナで入力してください") End If End If End Set End Property '-------------------- プロパティ:部署コード ----------------------- Public Property BushoCode() As String 'Getプロパティ Get Return bushoCodeValue End Get 'Setプロパティ Set(ByVal Value As String) '【エラーチェック】 If Value = "" Then '未入力はエラー Throw New myShainSimeiException _ ("部署コードを選択してください") Else bushoCodeValue = Value End If End Set End Property End Class '========================== 【社員追加クラス】======================== Public Class ClsInsertShain Inherits ClsShainBase '-------------------------< メンバ:変数 >-------------------------- Private shainCodeValue As String '------------------------------------------------------------------- '機能:コンストラクタ '引数:DataRow 社員テーブル1レコード分の入力データ '------------------------------------------------------------------- Sub New(ByVal Shain As DataRow) MyBase.New() If IsDBNull(Shain("社員コード")) Then Throw New Exception _ ("ClsInsertShain.New引数例外:社員コードがDBNull") Else ShainCode = CStr(Shain("社員コード")) End If If IsDBNull(Shain("社員氏名")) Then Throw New Exception _ ("ClsInsertShain.New引数例外:社員氏名がDBNull") Else ShainSimei = CStr(Shain("社員氏名")) End If If IsDBNull(Shain("社員カナ")) Then Throw New Exception _ ("ClsInsertShain.New引数例外:社員カナがDBNull") Else ShainKana = CStr(Shain("社員カナ")) End If If IsDBNull(Shain("部署コード")) Then Throw New Exception _ ("ClsInsertShain.New引数例外:部署コードがDBNull") Else BushoCode = CStr(Shain("部署コード")) End If End Sub '-------------------- プロパティ:社員コード -------------------- Public Overrides Property ShainCode() As String 'Getプロパティ Get Return shainCodeValue End Get 'Setプロパティ Set(ByVal Value As String) '未入力はエラー If Value = "" Then Throw New myShainCodeException("社員コード未入力") Else '数字以外はエラー If Not Regex.IsMatch(Value, "^[0-9]+$") Then Throw New _ myShainCodeException("社員コードに数字以外あり") Else '社員テーブルアクセスオブジェクト Dim dbIO As New ClsShainTableIO() '社員テーブルにこの社員コードがあればエラー If dbIO.ExistKeyData(Value) = True Then Throw New myShainCodeException("社員コード登録済") Else shainCodeValue = Value End If End If End If End Set End Property End Class ---------------------------------------------------------------------- 次号では、ClsShainTableIOクラスのInsertRecordメソッドを作成します。 ====================================================================== VB.NET データベースプログラミング奮闘記 発行者:ウェブ実験室(ado.netアットマークライヴドットジェーピーlive.jp) 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.