マスター表検索クラス コンストラクタ[VB 2013]

Visual Basic 2010/2008 やさしいADO.NET DBプログラム

   やさしいVB 2010 / 2008 ADO.NET

前回作ったマスター表検索メソッドでは、呼び出すときに引数として、表(テーブル)名、キー列(フィールド)名、キー値を指定していましたが、これらの引数をコンストラクタに設定するように実装するように修正します。

DBアクセスクラスのコンストラクタ修正

商品検索画面

コンストラクタの引数として、表(テーブル)名、キー列(フィールド)名、キー値を指定するように修正します。そして前回のレコード取得する部分をクラスメソッド も修正します。

このように修正すれば、他のメソッドを実装するときにも、引数を指定する必要がなくなります。

検索ボタンクリック処理では、インスタンス生成時に、表(テーブル)名、キー列(フィールド)名、キー値を引数に指定して、レコード取得メソッドを呼び出す時には引数を指定しません。

Option Strict On
Imports System.Data.SqlClient
Imports System.Configuration    ' 参照の追加で System.Configuration を追加

Public Class RetrievalFuntion

    '-------------------------------------------------------------
    ' ■ 検索ボタンクリック処理 ■
    '-------------------------------------------------------------
    Private Sub BtnRetrieval_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles BtnRetrieval.Click

        ' 商品マスター表からレコード取得
        Try
            Dim shohinTableIO As New ClsHanbaiKanriDBIO _
                ("商品マスター表","商品コード",TxtShohinCode.Text)
            Dim dt As New DataTable
            dt = shohinTableIO.GetKeyData()
            If dt.Rows.Count = 1 Then
                ' レコードがあった時
                LblShohinMei.Text = CStr(dt.Rows(0)("商品名称"))
                LblHanbaiTanka.Text = CStr(dt.Rows(0)("販売単価"))
            Else
                ' レコードが無かった時
                LblShohinMei.Text = Nothing
                LblHanbaiTanka.Text = Nothing
                MessageBox.Show("データがありません","エラー")
             End If

        Catch ex As Exception
            MessageBox.Show(ex.ToString, "【例外発生】")

        End Try

    End Sub

End Class

マスターテーブルアクセスメソッドのコンストラクタを修正します。

  • 内部変数メンバーとして、表名・キー列名・キー値を宣言する
  • コンストラクタが、表名、キー列名、キー値を引数として受け取る
  • メソッドでは引数を指定しない
  • エラーがあれば例外をスロー
Option Strict On
Imports System.Data.SqlClient
Imports System.Configuration  '[参照の追加]から追加

'//////////// 販売管理データベースアクセスクラス ////////////
Public Class ClsHanbaiKanriDBIO

    '--------------------< 変数メンバー >-------------------
    Private tableNameValue As String    ' 表名
    Private keyFieldValue As String     ' キー項目
    Private keyValue As String          ' キー値

    '====================================================================
    ' 機能:コンストラクタ
    ' 引数:テーブル名
    ' 引数:キーフィールド名
    ' 引数:キー値
    ' 補足:テーブル名のキーフィールドはNChar型とする
    '====================================================================
    Public Sub New(ByVal tableName As String, _
                   ByVal keyField As String, _
                   ByVal value As String)
MyBase.New() tableNameValue = tableName ' 表名 keyFieldValue = keyField ' キーフィールド名 keyValue = value ' キー値 End Sub '******************************************************************** ' 機能:引数に指定したテーブルのキー値のレコードを取得する ' 引数:なし ' 戻値:取得したレコード '******1*********2*********3*********4*********5**********6*********7 Public Function GetKeyData() As DataTable Dim retDt As New DataTable 'リターン値 ' 接続文字列をapp.configファイルから取得 Dim settings As ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings("販売管理ConString") If settings Is Nothing Then ' 接続文字列取得エラー Throw New Exception("app.configに未登録") End If '---<< テーブルからレコード取得 >>--- Using con As New SqlConnection Using cmd As New SqlCommand ' 接続文字列の設定 con.ConnectionString = settings.ConnectionString ' SqlCommand.Connectionプロパティの設定 cmd.Connection = con ' SQL文の設定 cmd.CommandText = "SELECT * FROM " & tableNameValue & _ " WHERE " & keyFieldValue & " = @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 End Using ' ◆戻値を設定してリターン Return retDt End Function End Class

Copyright© やさしいVB2012/2010 ADO.NET. All rights reserved.