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