データベースアクセス VB Web

販売管理データベースアクセスクラス

Visual Studio Express 2012 for Web を使って、マスターファイルメンテナンスのWebアプリケーションを開発します。

今回は、得意先マスター照会フォームで利用する販売管理データベースアクセスクラスを実装します。今後必要に応じてメンバーを追加していきます。

販売管理DB:得意先マスター表
key 列 名 データ型 nullを許容
得意先コード nchar(4) しない
  郵便番号 nchar(7) しない
  得意先名称 nvarchar(40) しない
  得意先住所 nvarchar(50) しない

データベース接続文字列

接続文字列については、接続文字列のページを参考にして、作成してください。作成する接続文字列名は、長いですがわかりやすくするために、販売管理DBConnectionString」にします。

データベースオープン共有メソッド

共有メソッドは、インスタンスを生成せずに、クラス名.メソッド名で呼び出します。宣言時にSharedキーワードを付加します。

コンストラクタと、テーブルから1レコードを取得するメソッドを実装します。

販売管理DB:得意先マスター表

マスターファイル保守は、下の「販売管理DB」の得意先マスター表を使います。

得意先テーブルアクセスクラス

得意先テーブルアクセスクラスは、販売管理データベースアクセスクラスの派生クラスとして、次のメンバーを実装します。

  • コンストラクタ
  • 得意先マスター表へ1レコード追加するメソッド
  • 得意先マスター表の1レコードを更新するメソッド
  • 得意先マスター表を削除するメソッド

得意先マスターでは、コンストラクタしか使いません。他のメソッドは、追加・更新・削除で使います。

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

    '--------------------< 変数メンバー>-------------------
    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(tCode 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 = tCode
                ' 表からレコード取得
                Dim da As New SqlDataAdapter
                da.SelectCommand = cmd
                da.Fill(retDt)
            End Using
        End Using

        ' ◆戻値を設定してリターン
        Return retDt

    End Function

End Class

'%%%%%%%%%%%%%%%%% 得意先マスターアクセスクラス %%%%%%%%%%%%%%%%%%%
Public Class ClsTokuisakiTableIO
    Inherits ClsHanbaiKanriDBIO

    '--------------------< 定数メンバー>--------------------
    Protected Const TABLE_NAME As String = "得意先マスター表"
    Protected Const KEY_FIELD As String = "得意先コード"

    '=======================================================
    ' 機能:コンストラクタ
    ' 引数:なし
    '=======================================================
    Public Sub New()

        ' 最初に基本クラスのコンストラクタを呼び出す
        MyBase.New(TABLE_NAME, KEY_FIELD)

    End Sub

    '*******************************************************
    ' 機能:得意先マスター表へ1レコード追加するメソッド
    ' 引数:追加する得意先マスター表データ
    ' 戻値:なし
    '*******************************************************
    Public Sub InsertRecord(tokuisaki As TokuisakiData)
        ' 今後実装
    End Sub

    '*******************************************************
    ' 機能:得意先マスター表の1レコードを更新するメソッド
    ' 引数:更新する得意先データ
    ' 戻値:なし
    '*******************************************************
    Public Sub UpdateRecord(tokuisaki As TokuisakiData)
        ' 今後実装
    End Sub

    '*******************************************************
    ' 機能:得意先マスター表を削除するメソッド
    ' 引数:削除する得意先コード
    ' 戻値:なし
    '*******************************************************
    Public Sub DeleteRecord(tCode As String)
        ' 今後実装
    End Sub

End Class