受注ヘッダーテーブル・明細テーブルアクセスクラス
受注ヘッダーデータを受注ヘッダーテーブルに、明細データをとディテールテーブルに追加するクラスです。
ヘッダーテーブル・明細テーブルアクセスクラスの実装
販売管理データベースアクセスクラスを継承したクラスです。
受注ヘッダー表と受注ディテール表にレコードを追加するInsertRecordメソッドを実装します。
TransactionScopeクラスを使用するので、受注ヘッダー表、または受注ディテール表にレコードが追加できなかった時は、自動的にロールバックされます。
レコードが正常に追加できた時は、追加した明細行数をリターン値にセットします。
【注意】SQL文は、必ずメソッド内部で生成してください。
ソースリストの枠内をクリックすると全選択できます。
Option Strict On Imports System.Data.SqlClient Imports System.Transactions '%%%%%%%%%%%%%%%%% 受注伝票アクセスクラス %%%%%%%%%%%%%%%%%%% Public Class ClsJuchuDenpyoIO Inherits ClsHanbaiKanriDBIO '--------------------< 定数メンバー >-------------------- Protected Const TABLE_NAME As String = "受注ヘッダー表" Protected Const KEY_FIELD As String = "受注番号" '======================================================= ' 機能:コンストラクタ ' 引数:なし ' 戻値:なし '======================================================= Public Sub New() ' 最初に基本クラスのコンストラクタを呼び出す MyBase.New(TABLE_NAME, KEY_FIELD) End Sub '******************************************************* ' 機能:ヘッダー表とディテール表へのレコード追加メソッド ' 引数:追加する受注ヘッダー表データ ' 引数:追加する受注ディテール表データ ' 戻値:受注ディテール表に追加したレコード数 '******************************************************* Public Function InsertRecord _ (ByVal header As ClsInsertHeader, _ ByVal meisai As List(Of ClsInsertDetailRow)) As Integer Dim retInsertCount As Integer ' リターン値 Dim addCount As Integer ' トランザクション開始 Using tran As New TransactionScope Using con As New SqlConnection Using cmd As New SqlCommand ' DBを開く ClsHanbaiKanriDBIO.OpenDB(con, cmd) ' 【受注ヘッダー表に追加】 ' SQL文の生成 cmd.CommandText = _ "INSERT INTO 受注ヘッダー表(受注番号, " & _ "受注日, "得意先コード) " & _ "VALUES(@bango, @juchuBi, @tokuCode)" ' SQL文の引数設定 cmd.Parameters.Clear() cmd.Parameters.Add("@bango", SqlDbType.NChar) cmd.Parameters.Add("@juchuBi", SqlDbType.Date) cmd.Parameters.Add("@tokuCode", SqlDbType.NChar, 4) ' 引数に値を設定 cmd.Parameters("@bango").Value = header.JuchuBango cmd.Parameters("@juchuBi").Value = header.JuchuBi cmd.Parameters("@tokuCode").Value = header.TokuisakiCode ' 受注ヘッダー表へ追加 addCount = cmd.ExecuteNonQuery() ' 戻り値が1以外なら例外をスローし、 ' 自動的にロールバック If Not addCount = 1 Then Throw New DBIOException("受注ヘッダー表への追加失敗") End If ' 【受注ディテール表に追加】 ' SQL文の生成 cmd.CommandText = _ "INSERT INTO 受注ディテール表(受注番号, " & _ "受注行番号, 商品コード, 受注数量) " & _ "VALUES(@bango, @gyo, @hinCode, @suryo)" ' SQL文の引数設定 cmd.Parameters.Clear() cmd.Parameters.Add("@bango", SqlDbType.NChar) cmd.Parameters.Add("@gyo", SqlDbType.SmallInt) cmd.Parameters.Add("@hinCode", SqlDbType.NChar, 5) cmd.Parameters.Add("@suryo", SqlDbType.Int) ' 明細行を1行ずつ受注ディテール表に追加 For i As Integer = 0 To meisai.Count - 1 ' 引数に値を設定 cmd.Parameters("@bango").Value = header.JuchuBango cmd.Parameters("@gyo").Value = i + 1 cmd.Parameters("@hinCode").Value = meisai(i).ShohinCode cmd.Parameters("@suryo").Value = meisai(i).JuchuSuryo ' 受注ディテール表へ追加 addCount = cmd.ExecuteNonQuery() If addCount = 1 Then ' 正常に受注ディテール表に追加 retInsertCount += 1 Else ' 戻り値が1以外なら例外をスローし、 ' 自動的にロールバック Throw New DBIOException _ ("受注ディテール表への追加失敗") End If Next i End Using End Using ' 正常にレコード追加完了 ' トランザクション完了(コミット) tran.Complete() End Using ' ◆戻値を設定してリターン Return retInsertCount End Function End Class