社員マスターIO レコード追加[VB 2013]

Visual Basic 2010/2008 やさしいADO.NET DBプログラム

   やさしいVB 2010 / 2008 ADO.NET

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

Copyright© やさしいVB2012/2010 ADO.NET. All rights reserved.