受注伝票エントリー 第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」 などホームページに掲載されている会社名・製品名等は、各社の登録商標ま たは商標です。 ====================================================================