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