社員マスター追加 [VB]

Visual Basic ADO.NET [Community Express]

社員マスターテーブルレコード追加関連メンバー実装

DBアクセス基本クラスから派生した社員マスターアクセスクラスのレコード追加関連のメンバーをじっそうします。

サンプルプログラム

クラス図

社員マスターアクセスクラスは、sampleDBアクセス基本クラスを継承し、レコード追加に必要なメンバーを実装します。

  • コンストラクタ(引数:社員コード)
  • 社員コードプロパティ
  • 行データ生成メソッド(社員マスター1レコードに対応)
  • 1レコード追加メソッド
社員マスター表
Key 列名 データ型 NULLを許容
社員コード nchar(5) しない
社員氏名 nvarchar(20) しない
社員カナ nvarchar(40) しない
部署コード nchar(4) しない
更新日時 datetime しない

ソースリストの枠内をクリックすると全選択できます。

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

  '**********************************************************
  ' 機能:社員マスターキー値のレコードの有無を調べるメソッド
  ' 引数:社員コード
  ' 戻値:レコードあり-->True、レコードなし-->False
  ' 補足:主キーフィールドはNChar型とする
  '******1*********2*********3*********4*********5**********6
  Public Overloads Function _
  ExistKeyData(ByVal keyCode As String) As Boolean

      Dim retExist As Boolean    ' リターン値

      ' 引数の空文字列チェック
      If keyCode.Length = 0 Then
          Throw New myShainCodeException _
          ("社員コードが未入力")
      End If

      ' キー値文字チェック(キー値は数字のみで構成されている)
      If Not Regex.IsMatch(keyCode, "^[0-9]+$") Then
          ' 数字以外はエラー
          Throw New myShainCodeException _
          ("社員コードに数字以外の文字があります")
      End If

      ' キー値長さチェック(社員コードは5桁)
      If Not keyCode.Length = 5 Then
          ' 5桁以外はエラー
          Throw New myShainCodeException _
          ("社員コードの桁数が正しくない")
      End If

      ' 引数コードのレコードの有無をチェックする
      retExist = _
      MyBase.ExistKeyData("社員テーブル", "社員コード", keyCode)

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

  End Function

  '**********************************************************
  ' 機能:社員社員マスターに1レコードを追加するメソッド
  ' 引数:追加する1レコード分の行データ
  ' 戻値:integer型:追加したレコード数
  '******1*********2*********3*********4*********5**********6
  Public Function InsertRecord(ByVal shain As ClsInsertShain) As Integer _
      Implements IDBIO.InsertRecord

      Dim retInsertCount As Integer    ' リターン値

      ' 引数の未設定チェック
      If shain Is Nothing Then
          ' 引数が未設定だったら例外をスロー
          Throw New myDBIOException _
          ("ClsShainTableIO.InsertRecord:引数が未設定")
      End If

      ' トランザクション開始
      Using tran As New TransactionScope
        Using con As New SqlConnection
          Using cmd As New SqlCommand
              ' 接続関連プロパティ設定
              MyBase.SetConnection(con, cmd)

              ' SQL文の作成
              cmd.CommandText = _
              "INSERT INTO " & _
              "社員テーブル(社員コード, 社員氏名, 社員カナ, " & _
              "更新日時) " & _
              "VALUES(@code, @shimei, @kana, @kousin)"

              ' SQL文引数に値を設定
              cmd.Parameters.Clear()
              cmd.Parameters.Add("@code", SqlDbType.NChar, 5)
              cmd.Parameters.Add("@shimei", SqlDbType.NVarChar, 20)
              cmd.Parameters.Add("@kana", SqlDbType.NVarChar, 40)
              cmd.Parameters.Add("@kousin", SqlDbType.DateTime)

              cmd.Parameters("@code").Value = Shain.ShainCode
              cmd.Parameters("@shimei").Value = Shain.ShainShimei
              cmd.Parameters("@kana").Value = Shain.ShainKana
              cmd.Parameters("@kousin").Value = DateTime.Now

              ' DB接続を開く
              con.Open()

              ' データベースの追加実行
              retInsertCount = cmd.ExecuteNonQuery()

          End Using
        End Using

        ' 1レコード追加なら正常(通常これしかありえない)
        If retInsertCount = 1 Then
            ' トランザクション完了(コミット)
            tran.Complete()
        Else
            ' 1レコード追加以外なら例外をスロー
            ' コミットしなければ、自動的にロールバックされる
            Throw New myDBIOException _
            ("ClsShainTableIO.InsertRecord:レコード追加失敗")
        End If

      End Using

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

  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