基本クラスメンバー
データベースアクセス基本クラスには、変数、コンストラクタ、メソッドなど次のメンバーを実装します。
引数を持たないコンストラクタは(デフォルトコンストラクタ)は実装しません。引数には、テーブル名(表名)とキ-フィールド名(キー項目)を指定します。
- コンストラクタ(引数有)
- 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