社員マスターテーブルレコード追加関連メンバー実装
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