社員マスターテーブルアクセスクラス
販売管理データベースアクセス基本クラスから派生した社員テーブルアクセスクラスを作成します。基本クラスは抽象クラスとして実装しているので、この社員テーブルアクセスクラスでインスタンスを生成します。
サンプルプログラム
社員テーブルアクセスクラスは、sampleDBアクセス基本クラスを継承し、社員マスターアクセスに必要なメンバーを実装します。
sampleDBアクセス基本クラスにないメンバーはここに実装します。基本クラスあるメソッドと異なる部分があるメンバーは、Overloadsします。
更新に必要な次のメンバーを実装します。
- コンストラクタ(引数:なし)
- 1レコード更新メソッド
- 行データ生成メソッド(社員マスター1レコードに対応)
Option Strict On Imports System.Data.SqlClient Imports System.Text.RegularExpressions Imports System.Transactions ' [参照の追加]で追加 Public Class ClsShainTableIO Inherits ClsSampleDBIO Implements IDBIO '========================================================== ' 機能:コンストラクタ ' 引数:なし '========================================================== Public Sub New() MyBase.New() End Sub '********************************************************** ' 機能:引数のレコードを社員マスターから取得する ' 引数:社員コード ' 戻値:引数に指定した社員コードのレコード '******1*********2*********3*********4*********5**********6 Public Overloads Function GetKeyData(ByVal shainCode As String) As DataTable Dim retDt As New DataTable ' リターン値 ' 引数の空文字列チェック If shainCode.Length = 0 Then Throw New myShainCodeException _ ("社員コードが未入力") End If ' キー値文字チェック(キー値は数字のみで構成されている) If Not Regex.IsMatch(shainCode, "^[0-9]+$") Then ' 数字以外はエラー Throw New myShainCodeException _ ("社員コードに数字以外の文字があります") End If ' キー値長さチェック(社員コードは5桁) If Not shainCode.Length = 5 Then ' 5桁以外はエラー Throw New myShainCodeException _ ("社員コードの桁数が正しくない") End If ' 社員テーブルから引数コードのレコードを取得する retDt = _ MyBase.GetKeyData("社員テーブル", "社員コード", shainCode) ' ◆戻値を設定してリターン Return retDt End Function '********************************************************** ' 機能:社員マスターの1レコードを更新するメソッド ' 引数:ClsUpdateShainオブジェクト ' 戻値:更新したレコード数 '******1*********2*********3*********4*********5**********6 Public Function UpdateKeyRecord(ByVal shain As ClsUpdateShain) As Integer Dim retUpdateCount As Integer ' リターン値 ' トランザクション開始 Using tran As New TransactionScope Using con As New SqlConnection Using cmd As New SqlCommand ' 接続関連プロパティ設定 MyBase.SetConnection(con, cmd) ' SQL文の作成 cmd.CommandText = _ "UPDATE 社員テーブル " & _ "SET 社員氏名 = @shimei, 社員カナ = @kana, " & _ "部署コード = @bCode, 更新日時 = @newDate " & _ "WHERE 社員コード = @sCode AND 更新日時 = @date" ' SQL文引数に値を設定 cmd.Parameters.Clear() cmd.Parameters.Add("@sCode", SqlDbType.NChar, 5) cmd.Parameters.Add("@shimei", SqlDbType.NVarChar, 20) cmd.Parameters.Add("@kana", SqlDbType.NVarChar, 40) cmd.Parameters.Add("@bCode", SqlDbType.NChar, 4) cmd.Parameters.Add("@newDate", SqlDbType.DateTime) cmd.Parameters.Add("@date", SqlDbType.DateTime) cmd.Parameters("@sCode").Value = shain.ShainCode cmd.Parameters("@shimei").Value = shain.ShainShimei cmd.Parameters("@kana").Value = shain.ShainKana cmd.Parameters("@bCode").Value = shain.BushoCode cmd.Parameters("@newDate").Value = dateTime.Now cmd.Parameters("@date").Value = Shain.KoushinNichiji ' DB接続を開く con.Open() ' テーブルの更新を実行 retUpdateCount = cmd.ExecuteNonQuery() End Using End Using ' 1レコード更新なら正常(通常これしかありえない) If retUpdateCount = 1 Then ' トランザクション完了(コミット) tran.Complete() Else ' 1レコード更新以外なら例外をスロー ' コミットしなければ、自動的にロールバックされる Throw New myDBIOException _ ("ClsShainTableIO.UpdateKeyRecord:例外発生") End If End Using ' ◆戻値を設定してリターン Return retUpdateCount End Function '********************************************************** ' 機能:社員マスターの行データ生成 ' 引数:なし ' 戻値:生成した行データ '******1*********2*********3*********4*********5**********6 Public Overloads Function CreateDataRow() As DataRow Dim retRow As DataRow ' リターン値 retRow = MyBase.CreateDataRow("社員テーブル", "社員コード") Return retRow End Function End Class