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