社員マスタアクセス [VB]

Visual Basic ADO.NET [Community Express]

社員マスターテーブルアクセスクラス

販売管理データベースアクセス基本クラスから派生した社員テーブルアクセスクラスを作成します。基本クラスは抽象クラスとして実装しているので、この社員テーブルアクセスクラスでインスタンスを生成します。

サンプルプログラム

更新クラス図

社員テーブルアクセスクラスは、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