受注伝票エントリー 第15回(受注伝票アクセスクラス)
第87号(2010.8.25発行)
====================================================================
★★ -- VB.NETデータベースプログラミング奮闘記 -- ★★
(VB 2008 Express & SQL Server 2008 Express)
--------------------------------------------------------------------
いつもご購読ありがとうございます。ADO.NETの基本的なサンプルプログラ
ムをお届けします。これからもよろしくお願いいたします。
やさしいVB2008 ADO.NET → https://adonetvb.com/index.html
====================================================================
■■ 受注伝票エントリー 第15回 ■■
フォームから入力した受注データを、受注ヘッダー表と受注ディテール表に
登録するプログラムを作成します。
フォーム → https://adonetvb.com/OrderEntry/index.html
テーブル定義 → https://adonetvb.com/OrderEntry/DB.html
バックナンバー → https://adonetvb.com/MailMagazine/index.html
--------------------------------------------------------------------
■ 受注伝票アクセスクラス ■
受注ヘッダー表と受注ディテール表にレコードを追加するInsertRecordメソ
ッドを実装します。
レコード追加では、TransactionScopeクラスを使用するので、受注ヘッダー
表、または受注ディテール表にレコードが追加できなかった時は、自動的に
ロールバックされます。
InsertRecordメソッドを、ClsJuchuDenpyoIO.vbに追加します。
--【プログラムソースリスト:ClsJuchuDenpyoIO.vb】-------------------
'*******************************************************
' 機能:ヘッダー表とディテール表へのレコード追加メソッド
' 引数:追加する受注ヘッダー表データ
' 引数:追加する受注ディテール表データ
' 戻値:受注ディテール表に追加したレコード数
'*******************************************************
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
--------------------------------------------------------------------
最後にクリアボタンクリック処理を実装して、受注伝票エントリーのプログ
ラムは完了です。
クリアボタンクリック処理を、FormJuchuEntryクラスに追加します。
--【プログラムソースリスト:FormJuchuEntry.vb】---------------------
'*******************************************************
' クリアボタンクリック処理
'*******************************************************
Private Sub BtnClear_Click _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles BtnClear.Click
' ヘッダー部データ初期化
InitialHeader()
' ディテール部データ初期化
InitialDetail()
End Sub
--------------------------------------------------------------------
みなさんお疲れ様でした。次号からは、受注伝票エントリーで使用した既存
のDBアクセスクラスを再利用して、効率的なマスター保守プログラムを作
成していきます。
====================================================================
VB.NET データベースプログラミング奮闘記
発行者:ウェブ実験室(adonet‾live.jp ‾はあっとマーク)
http://park5.wakwak.com/‾weblab/
--------------------------------------------------------------------
このメールマガジン(マガジンID: 0000128094)は、
インターネットの本屋さん『まぐまぐ』から配信されています。
http://www.mag2.com/
【購読中止の方法】購読の中止は次のホームページからお願い致します。
http://park5.wakwak.com/‾weblab/
http://www.mag2.com/m/0000128094.htm
--------------------------------------------------------------------
このメールマガジン及び「すぐ使えるADO.NET」「やさしいBV2008 ADO.NET」
などのホームページで公開しているソースプログラム・データの利用により
生じた損害等については、発行者は一切責任を負いません。ソースプログラ
ムの再利用は自由です。著作権は発行者が所有します。
このメールマガジン及び「すぐ使えるADO.NET」「やさしいBV2008 ADO.NET」
などホームページに掲載されている会社名・製品名等は、各社の登録商標ま
たは商標です。
====================================================================