基本クラスメンバー
データベースアクセス基本クラスには、変数、コンストラクタ、メソッドなど次のメンバーを実装します。
引数を持たないコンストラクタは(デフォルトコンストラクタ)は実装しません。引数には、テーブル名(表名)とキ-フィールド名(キー項目)を指定します。
- コンストラクタ(引数有)
 - DBを開く共有メソッド。接続文字列の詳細はこちら
 - DBを閉じる共有メソッド
 - 引数に指定したキー値のレコードを取得するメソッド
 - 表の1行分の空データを生成するメソッド
 
共有メソッドとは
共有メソッドは、Sharedキーワードを付加します。Newキーワードを使って、インスタンスを生成する必要がありません。呼び出しは「クラス名.メソッド名」になり、DBオープンメソッドの呼び出しは、ClsHanbaiKanriDBIO.OpenDB のようにプログラミングします。
DBアクセス基本クラス:ソースリスト
Option Strict On
Imports Microsoft.VisualBasic  ' クラスを追加すると自動的に追加される
Imports System.Data.SqlClient
Imports System.Transactions    ' 参照の追加 System.Transactions
Imports System.Data            ' 【追加】
'/////////// 販売管理データベースアクセスクラス ////////////
Public MustInherit Class ClsHanbaiKanriDBIO
  '*******************************************************
  ' 機能:DBを開く共有メソッド
  ' 引数:SqlConnectionオブジェクト
  ' 引数:SqlCommandオブジェクト
  ' 戻値:なし
  '*******************************************************
  Protected Shared Sub OpenDB(ByRef con As SqlConnection,
    ByRef cmd As SqlCommand)
    Try
        ' 変数の宣言
        Dim settings As ConnectionStringSettings
        ' 接続文字列をapp.configファイルから取得
        settings = ConfigurationManager.ConnectionStrings _
        ("販売管理DBConnectionString")
        If settings Is Nothing Then
            ' 接続文字列取得エラー
            Throw New DBIOException _
            ("接続文字列がapp.configに未登録.")
        Else
            ' 接続文字列の設定
             con.ConnectionString = settings.ConnectionString
            ' SqlCommand.Connectionプロパティの設定
            cmd.Connection = con
            ' DBを開く
            con.Open()
        End If
    Catch ex As DBIOException
        ' DBIO例外が発生した時の処理
        Throw New DBIOException(ex.Message)
    Catch ex As Exception
        ' その他例外が発生した時の処理
        Throw New Exception(ex.ToString)
    End Try
  End Sub
  '*******************************************************
  ' 機能:DBを閉じる
  ' 引数:DBを開いた時のSqlConnectionオブジェクト
  ' 戻値:なし
  ' 補足:インスタンス生成不要
  '*******************************************************
  Protected Shared Sub CloseDB(ByRef con As SqlConnection)
    Try
        ' DBを閉じる
         con.Close()
    Catch ex As Exception
        ' 例外が発生した時の処理
        Dim errMsg As String
        errMsg = "ClsHanbaiKanriDBIO.CloseDBで例外発生:"
        Throw New Exception(errMsg & ex.ToString)
    End Try
  End Sub
  '--------------------< 変数メンバー>-------------------
  Protected tableNameValue As String   ' 表名
  Protected keyFieldValue As String    ' キー項目
  '=======================================================
  ' 機能:コンストラクタ
  ' 引数:表名
  ' 引数:キーフィールド
  '=======================================================
  Protected Sub New(tableName As String, keyField As String)
    tableNameValue = tableName    ' 表名
    keyFieldValue = keyField      ' キー項目名
  End Sub
  '*******************************************************
  ' 機能:表から1レコードを取得するメソッド
  ' 引数:主キー値
  ' 戻値:取得したレコード
  '*******************************************************
  Public Function GetKeyRecord(kCode As String) As DataTable
    Dim retDt As New DataTable()         ' リターン値
    Using con As New SqlConnection
        Using cmd As New SqlCommand
            ' DBを開く
            ClsHanbaiKanriDBIO.OpenDB(con, cmd)
            ' SQL文設定
            cmd.CommandText = _
            "SELECT * FROM " & tableNameValue & _
            " WHERE " & keyFieldValue & " = @value"
            ' SQL文の引数設定
            cmd.Parameters.Clear()
            ' 引数の実際のサイズから長さを推論する
            cmd.Parameters.Add("@value", SqlDbType.NChar)
            ' SQL文引数に値を設定
            cmd.Parameters("@value").Value = kCode
            ' 表からレコード取得
            Dim da As New SqlDataAdapter
            da.SelectCommand = cmd
            da.Fill(retDt)
        End Using
    End Using
    ' ◆戻値を設定してリターン
    Return retDt
  End Function
  '*******************************************************
  ' 機能:表対応の1行空データを生成するメソッド
  ' 引数:なし
  ' 戻値:生成した1行分空データ
  '*******************************************************
  Protected Function CreateDataRow() As DataRow
    Dim retDr As DataRow
    ' 表の列情報を取込むために、
    ' レコードを取得できなくても問題ないので、
    ' 第3引数のキー値にはアンダースコアを設定
    Dim dt As DataTable
    dt = GetKeyRecord("_")
    retDr = dt.NewRow
    Return retDr
  End Function
End Class