すぐ使えるADO.NET

【Visual BasicによるADO.NETデータベースプログラミング】

本の紹介

バックナンバー:VB.NETデータベースプログラミング

ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。




【第65号】

 第65号(2008.7.23発行)
======================================================================
        ★★ -- VB.NETデータベースプログラミング奮闘記 -- ★★
            (VB 2005 Express & SQL Server 2005 Express)
----------------------------------------------------------------------
いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを中
心に掲載します。今後ともよろしくお願い申し上げます。

すぐ使えるADO.NET --> http://park5.wakwak.com/‾weblab/
======================================================================
                  ■■ 社員テーブルから削除する 3 ■■

社員コードを入力して、削除ボタンをクリックすると、入力した社員コードの
エラーチェックをし、エラーが無ければ、社員テーブルから該当するレコード
を削除します。

【sampleデータベースの社員テーブル】
----------------------------------------------------------------------
key  列 名   データ型    nullを許容  備 考
----------------------------------------------------------------------
○ 社員コード  nchar(5)       許容しない 英数字のみ
− 社員氏名   nvarchar(20)   許容しない
− 社員カナ   nvarchar(40)   許容しない
− 部署コード  nchar(4)       許容しない
− 更新日時   datetime       許容しない
----------------------------------------------------------------------

【sampleデータベースの部署テーブル】
----------------------------------------------------------------------
key  列 名   データ型    nullを許容  備 考
----------------------------------------------------------------------
○ 部署コード  nchar(4)       許容しない 英数字のみ
− 部署名    nvarchar(20)   許容しない
− 更新日時   datetime       許容しない
----------------------------------------------------------------------

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 社員テーブル削除                _□×┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃  Label1    TxtShainCode   BtnRetrieval
┃┌―――――┐ ┌―――――┐   ┌――――┐
┃│社員コード│ │     │   │ 検索 │
┃└―――――┘ └―――――┘   └――――┘
┃  Label2    LblShainShimei
┃┌―――――┐ ┌――――――――┐
┃│社員氏名 │ │        │
┃└―――――┘ └――――――――┘
┃  Label3    LblShainKana
┃┌―――――┐ ┌――――――――――――――┐
┃│社員カナ │ │              │
┃└―――――┘ └――――――――――――――┘
┃  Label4    LblBushoMei
┃┌―――――┐ ┌――――――┐
┃│部署   │ │      │
┃└―――――┘ └――――――┘
┃ BtnDelete    BtnClear
┃┌――――┐  ┌―――――┐
┃│ 削除 │  │ クリア │
┃└――――┘  └―――――┘
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

【検索ボタンクリック処理】
入力した社員コードが、社員テーブルに存在すれば、該当レコードを表示して、
社員コードを入力不可に設定します。社員テーブルに存在しなければ、エラー
メッセージを表示します。

【クリアボタンクリック処理】
表示データを初期状態に戻します。

【削除ボタンクリック処理】
該当レコードを社員テーブルから削除します。

----------------------------------------------------------------------
       ■■ ClsSampleDBIOクラスのDeleteKeyRecordメソッド ■■

基本クラスClsSampleDBIOの削除メソッドDeleteKeyRecordは、引数にテーブル
名、キーフィールド名、キー値を指定して、汎用的に利用できるようにします。

派生クラスのDeleteKeyRecordメソッドで、これら3引数を指定して、基本クラ
スの DeleteKeyRecordメソッド呼び出します。エラーチェックは、派生クラス
の DeleteKeyRecordメソッドで実行しているので、基本クラスでは、レコード
の削除処理を実装します。

派生クラスからは、MyBase.DeleteKeyRecordとして、基本クラスのメソッドを
呼び出します。

【前号の派生クラスDeleteKeyRecordメソッドを再掲載】
----------------------------------------------------------------------
  '*******************************************************************
  ' 機能:社員テーブルから1レコードを削除するメソッド
  ' 引数:社員コード(String型)
  ' 返値:integer型:削除したレコード数
  '******1*********2*********3*********4*********5**********6*********
  Public Overloads _
  Function DeleteKeyRecord(ByVal KeyCode As String) As Integer

    Dim retDeleteCount As Integer                'リターン値

    Try
      'キー値のレコード存在チェック
      If Me.ExistKeyData(KeyCode) = True Then
        '存在すれば、レコード削除
        retDeleteCount = _
        MyBase.DeleteKeyRecord("社員テーブル", "社員コード", KeyCode)
      Else
        '存在しなければ、例外をスロー
        Throw New myDBIOException _
        ("エラー:社員コードのレコードが存在しません")
      End If

    Catch ex As Exception
      '例外が発生したら、例外をスロー
      Throw New Exception("例外発生:" & ex.ToString)

    End Try

    '◆リターン
    Return retDeleteCount

  End Function
----------------------------------------------------------------------

基本クラスでは、引数のチェックは省略しています。派生クラスのメソッドで
は、引数は正しい値が設定されているという前提です。また主キーは、NChar
型に限定しています。

レコード追加処理と同様、NET Framework 2.0から追加されたTransactionScope
クラスのトランザクション処理を使いました。

TransactionScopeクラスを利用すれば、例外が発生した場合、自動的にロール
バックされます。明示的にロールバックメソッドを呼び出す必要はありません。
コミット(完了)するためには、Completeメソッドを呼び出します。


【ClsSampleDBIO.vbファイルにDeleteKeyRecordメソッドを追加】

--【プログラムソースリスト】------------------------------------------
Option Strict On               'プロジェクトのプロパティでも設定可能

Imports System.Configuration   '参照の追加でSystem.Configurationを追加
Imports System.Data.SqlClient
Imports System.Text.RegularExpressions
Imports System.Transactions    '参照の追加でSystem.Transactionsを追加

Public MustInherit Class ClsSampleDBIO

  '(中略)

  '*******************************************************************
  ' 機能:引数に指定したテーブルのキー値のレコードを削除する
  ' 引数:テーブル名
  ' 引数:キーフィールド名
  ' 引数:主キー値
  ' 戻値:削除したレコード数
  ' 補足:テーブルの主キーフィールドはNChar型とする
  '******1*********2*********3*********4*********5**********6**********
  Public Function DeleteKeyRecord(ByVal TableName As String, _
                                  ByVal KeyField As String, _
                                  ByVal KeyValue As String) As Integer

    Dim retDeleteCount As Integer                'リターン値

    Try
      'トランザクション開始
      Using tran As New TransactionScope
          Using con As New SqlConnection
              Using cmd As New SqlCommand

                  Me.SetConnection(con, cmd)   '接続関連プロパティ設定

                  'SQL文設定
                  cmd.CommandText = "DELETE FROM " & TableName & _
                  " WHERE " & KeyField & "=" & KeyValue

                  'DB接続を開く
                  con.Open()

                  'テーブルからキー値のレコード削除処理
                  retDeleteCount = cmd.ExecuteNonQuery()

                  If retDeleteCount = 0 Then
                      '削除するレコードがなかった時の処理
                      Throw New myDBIOException _
                      ("エラー:削除するレコードは存在しない")
                  ElseIf retDeleteCount >= 2 Then
                      'レコード削除が失敗した時の処理
                      Throw New myDBIOException _
                      ("エラー:削除処理に失敗")
                  End If

              End Using

          End Using

          'トランザクション完了(コミット)
          tran.Complete()

      End Using

    Catch ex As Exception
      Throw New Exception _
      ("ClsSampleDBIO.DeleteKeyRecordで例外発生:" & ex.ToString)
    End Try

    '◆リターン
    Return retDeleteCount

  End Function

----------------------------------------------------------------------
削除処理はこれで完了です。次号から更新処理に移ります。

======================================================================
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」ホームページで公開している
ソースプログラム・データの利用により生じた損害等については、発行者は
一切責任を負いません。ソースプログラムの再利用は自由です。著作権は発行
者が所有します。
このメールマガジン及び「すぐ使えるADO.NET」ホームページに掲載されてい
る会社名・製品名等は、各社の登録商標または商標です。
======================================================================

Copyright© すぐ使えるADO.NET. All rights reserved.