DBアクセス基本クラス VB Web

基本クラスメンバー

データベースアクセス基本クラスには、変数、コンストラクタ、メソッドなど次のメンバーを実装します。

引数を持たないコンストラクタは(デフォルトコンストラクタ)は実装しません。引数には、テーブル名(表名)とキ-フィールド名(キー項目)を指定します。

  • コンストラクタ(引数有)
  • 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