バックナンバー:VB.NETデータベースプログラミング
ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。
【第58号】
第58号(2007.10.24発行)
======================================================================
★★ -- VB.NETデータベースプログラミング奮闘記 -- ★★
(VB 2005 Express & SQL Server 2005 Express)
----------------------------------------------------------------------
いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを中
心に掲載します。今後ともよろしくお願い申し上げます。
すぐ使えるADO.NET --> http://park5.wakwak.com/‾weblab/
======================================================================
■■ 社員テーブルを検索する 3 ■■
検索ボタンをクリックすると、入力した社員コードのエラーチェックをして、
エラーが無ければ、社員テーブルから該当レコードを取得し、社員氏名と社員
カナを表示します。接続文字列は、app.configに登録します(前号参照)。
【sampleデータベースの社員テーブル】
----------------------------------------------------------------------
key 列 名 データ型 nullを許容 備 考
----------------------------------------------------------------------
○ 社員コード nchar(5) 許容しない 社員コードは英数字のみ
− 社員氏名 nvarchar(20) 許容しない
− 社員カナ nvarchar(40) 許容しない
− 部署コード nchar(4) 許容しない
− 更新日時 datetime 許容しない
----------------------------------------------------------------------
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 社員テーブル検索 _□×┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ Label1 TxtShainCode BtnKensaku
┃┌―――――┐ ┌―――――┐ ┌――――┐
┃│社員コード│ │ │ │ 検索 │
┃└―――――┘ └―――――┘ └――――┘
┃ Label2 LblShainShimei
┃┌―――――┐ ┌――――――――┐
┃│社員氏名 │ │ │
┃└―――――┘ └――――――――┘
┃ Label3 LblShainKana
┃┌―――――┐ ┌――――――――┐
┃│社員カナ │ │ │
┃└―――――┘ └――――――――┘
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
前号で、sampleデータベースをアクセスする基本クラスClsSampleDBIOの
GetKeyDataメソッドを作成しました。今号では、派生クラスClsShainTableIOの
GetKeyDataメソッドを作成します。
派生クラスClsShainTableIOのGetKeyDataメソッドでは、主に引数のエラー
チェックをして、基本クラスのGetKeyDataメソッドを呼び出します。エラーが
あれば、独自例外myDBIOExceptionをスローします。
基本クラスClsSampleDBIOにもGetKeyDataメソッドがあるので、派生クラスの
GetKeyDataメソッドでは、Overloadsキーワードを付ける必要があります。
Public Overloads _
Function GetKeyData(ByVal KeyCode As String) As DataTable
そして、派生クラスClsShainTableIOのGetKeyDataメソッドの中から、
基本クラスClsSampleDBIOのGetKeyDataメソッドを呼び出します。
RetDataTable = _
MyBase.GetKeyData("社員テーブル", "社員コード", KeyCode)
引数のエラーチェックは、派生クラスのGetKeyData()メソッドの中で行い、基
本クラスのGetKeyData()メソッドでは、社員テーブルからレコードを取得する
処理のみコーディングします。
ClsShainTableIOは、ClsShainTableIO.vbファイルを追加して作成します。
--【プログラムソースリスト】------------------------------------------
Imports System.Configuration '参照の追加でSystem.Configurationを追加
Imports System.Data.SqlClient
Imports System.Text.RegularExpressions
Public Class ClsShainTableIO
Inherits ClsSampleDBIO
'--------------------< メンバ:変数 >--------------------
Private mSyainCode As String
'*******************************************************************
' 機能:コンストラクタ
' 引数:なし
'******1*********2*********3*********4*********5**********6*********
Sub New()
MyBase.New() '必ず最初に基本クラスのコンストラクタを呼び出す
End Sub
'*******************************************************************
' 機能:引数にした社員コードのレコードを社員テーブルから取得する
' 引数:ByVal 社員コード(String型)
' 戻値:引数に指定した社員コードのレコード(DataTble型)
'******1*********2*********3*********4*********5**********6*********
Public Overloads _
Function GetKeyData(ByVal KeyCode As String) As DataTable
Dim RetDataTable As New DataTable() 'リターン値
Try
'引数Nothing(未設定)・空白チェック
If KeyCode Is Nothing Or KeyCode = "" Then
Throw New myDBIOException("エラー:社員コードが未設定")
End If
'引数の前後の空白は除去する
KeyCode = KeyCode.Trim()
'キー値文字チェック(キー値は英数字のみで構成されている)
If Not Regex.IsMatch(KeyCode, "^[0-9a-zA-Z]+$") Then
'英数字以外はエラー
Throw New myDBIOException _
("エラー:社員コードに不正な文字あり")
End If
'キー値長さチェック(社員コードは5桁)
If Not KeyCode.Length = 5 Then
'5桁以外はエラー
Throw New myDBIOException _
("エラー:社員コードの桁数が正しくない")
End If
'社員テーブルから引数の社員コードのレコードを取得する
RetDataTable = _
MyBase.GetKeyData("社員テーブル", "社員コード", KeyCode)
Catch ex As myDBIOException
Throw New myDBIOException(ex.Message)
Catch ex As Exception
Throw New Exception _
("clsSyainTBLIOのgetSyainTableRecで例外発生:" & ex.ToString)
End Try
'◆戻値を設定してリターン
Return RetDataTable
End Function
End Class
----------------------------------------------------------------------
★前号の基本クラスのソースリスト再掲載
ClsSampleDBIOは、ClsSampleDBIO.vbファイルを追加して作成します。
--【プログラムソースリスト】------------------------------------------
Option Strict On 'プロジェクトのプロパティでも設定可能
Imports System.Configuration '参照の追加でSystem.Configurationを追加
Imports System.Data.SqlClient
Imports System.Text.RegularExpressions
Public Class ClsSampleDBIO
'-------------------------< メンバ:変数 >--------------------------
'コネクション
Private con As SqlConnection
'コマンド
Private cmd As SqlCommand
'*******************************************************************
' 機能:コンストラクタ
' 引数:なし
'******1*********2*********3*********4*********5**********6*********
Public Sub New()
MyBase.New() '必ず最初に基本クラスのコンストラクタを呼び出す
End Sub
'*******************************************************************
' 機能:引数に指定したテーブルのキー値のレコードを取得する
' 引数:テーブル名
' 引数:キーフィールド名
' 引数:主キー値
' 戻値:取得したレコード
' 補足:テーブル名の主キーフィールドはNChar型とする
'******1*********2*********3*********4*********5**********6*********
Public Function GetKeyData(ByVal TableName As String, _
ByVal KeyField As String, _
ByVal KeyValue As String) As DataTable
Dim retDt As New DataTable() 'リターン値
Try
Using con As New SqlConnection
Dim cmd As New SqlCommand
'接続関連プロパティ設定
Me.SetConnection(con, cmd)
'SQL文設定
cmd.CommandText = "SELECT * FROM " & TableName & _
" WHERE" & KeyField & " = @KeyValue"
'SQL文の引数設定
cmd.Parameters.Clear()
cmd.Parameters.Add("@KeyValue", SqlDbType.NChar)
'コマンド引数に値を設定
cmd.Parameters("@KeyValue").Value = KeyValue
'テーブルからレコード取得
Dim da As New SqlDataAdapter
da.SelectCommand = cmd
da.Fill(retDt)
End Using
Catch ex As Exception
Throw New Exception _
("ClsSampleDBIO.getKeyDataで例外発生:" & ex.ToString)
End Try
'----------< ◆戻値を設定してリターン >----------
Return retDt
End Function
'*******************************************************************
' 機能:接続関連プロパティ設定
' 引数:ByRef SqlConnectionオブジェクト
' 引数:ByRef SqlCommandオブジェクト
'******1*********2*********3*********4*********5**********6*********
Private Sub SetConnection(ByRef con As SqlConnection, _
ByRef cmd As SqlCommand)
Try
'----------< 接続関連プロパティ設定 >----------
'変数の宣言
Dim settings As ConnectionStringSettings
'接続文字列をapp.configファイルから取得
settings = _
ConfigurationManager.ConnectionStrings( _
"AdoNet.My.MySettings.sampleDBConStr")
If settings Is Nothing Then
'接続文字列取得エラー
Throw New Exception _
("接続文字列がapp.configに未登録.")
Else
'接続文字列の設定
con.ConnectionString = settings.ConnectionString
'SqlCommand.Connectionプロパティの設定
cmd.Connection = con
End If
Catch ex As Exception
Throw New Exception _
("clsSampleDBIO.setConnectionで例外発生." & ex.ToString)
End Try
End Sub
End Class
独自例外は、clsException.vbファイルを追加して作成します。
'--------------- DBIOクラスの独自例外クラス---------------
Public Class myDBIOException
Inherits ApplicationException
Public Sub New(ByVal errorMessage As String)
MyBase.New(errorMessage)
End Sub
End Class
----------------------------------------------------------------------
次号からは、1レコードを追加するメソッドを作成していきます。
======================================================================
VB.NET データベースプログラミング奮闘記
発行者:ウェブ実験室([email protected])
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.