すぐ使えるADO.NET

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

本の紹介

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

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




【第44号】

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

いよいよ夏ですね。忙しくて夏休みも取れない方もいるかと思いますが、健康
には十分注意して、仕事頑張ってください。

すぐ使えるADO.NET --> サンプルプログラム満載
                      http://park5.wakwak.com/‾weblab/
======================================================================
             ■■ VB.NETワンポイント:udlファイル ■■

ConnectionStringプロパティに接続文字列ではなく、udlファイルを指定して、
データベースに接続することもできます。

データベース接続情報を保存する拡張子udlファイルは、次のように作成します。

1.メモ帳などで、空のテキストファイルを作成します。

2.ファイル拡張子をudlに変更します。

3.拡張子をudlに変更したファイルを開きます。

4.データリンクプロパティダイアログが表示されますので、
  OLEプロバイダと接続データベースを設定します。

ファイルの内容は次のように自動生成されます。
[oledb]
; Everything after this line is an OLE DB initstring
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:¥xxxxx¥bin¥sample.mdb;
Persist Security Info=False

connect.udlファイルがプロジェクトファイルホルダの下のbinホルダにあれば、
次のようにコーディングすることができます。

    Dim con As OleDbConnection

    Try
      con = New OleDbConnection()

      'DB接続文字列の設定
      con.ConnectionString = _
      "File Name=" & Application.StartupPath & "¥connect.udl"

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

    Catch oExcept As Exception
      Throw New Exception("例外発生" + oExcept.ToString)

    Finally
      'DB接続を閉じる
      If Not con Is Nothing Then
        If con.State = ConnectionState.Open Then
          con.Close()
        End If
      End If

    End Try


----------------------------------------------------------------------
     ■■ データベースアクセスクラスの汎用メソッドについて 13 ■■

今号から社員テーブルのレコード削除について説明します。

まず、clsDeleteSyainクラスを作成します。次にレコード削除メソッド
deleteRecordを、clsDBIOクラスに追加します。このメソッドの引数には、
clsDeleteSyainクラスのオブジェクトを指定します。

今号では、clsDeleteSyainクラスを作成します。clsUpdateSyainと同様になり
ますが、入力値のチェックがないぶん簡単です。

次号掲載予定のdeleteRecordメソッドも、updateRecordと同様になりますので、
時間に余裕がある方は、第43号を参考にして、是非コーディングしてみてくだ
さい。

少し補足します。updateRecordでも、レコード取得時の更新日時を引数に指定
します。更新のSQL文と同様にWHERE句で使用します。これは、更新の時と同様
に、他で更新されていた場合には、削除できないようにするためです。

他で削除されていた場合には、ExecuteNonQuery()の戻り値が0になりますので、
この場合もエラーにして、例外をスローします。


--【プログラムソースリスト】------------------------------------------
Option Strict On

Imports System.Text.RegularExpressions

'----------------- << 社員テーブル削除データクラス >> ----------------
Public Class clsDeleteSyain

  Private mSyainCode As String
  Private mUpdateTime As Date

  '-------------------------------------------------------------------
  ' 機能:コンストラクタ
  ' 引数:in 社員1レコード分のデータ
  '-------------------------------------------------------------------
  Sub New(ByVal parSyain As DataRow)

    MyBase.New()

    '【社員コードセット】
    If IsDBNull(parSyain("社員コード")) Then
      Throw New Exception("clsDeleteSyain.New引数例外:社員コード未設定")
    Else
      pSyainCode = CStr(parSyain("社員コード"))
    End If

    '【更新日時セット】
    If IsDBNull(parSyain("更新日時")) Then
      Throw New Exception("clsDeleteSyain.New引数例外:更新日時未設定")
    Else
      pUpdateTime = CDate(parSyain("更新日時"))
    End If

  End Sub

  '-------------------- プロパティ:社員コード --------------------
  Public Property pSyainCode() As String

    'Getプロパティ
    Get
      Return Me.mSyainCode
    End Get

    'Setプロパティ
    Set(ByVal Value As String)

      '未入力はエラー
      If Value = "" Then
        Throw New mySyainCodeException("社員コード未入力")
      Else
        '数字以外はエラー
        If Not Regex.IsMatch(Value, "^[0-9]+$") Then
          Throw New _
          mySyainCodeException("社員コードに数字以外あり")
        Else
          '社員テーブルアクセスオブジェクト
          Dim oDBIO As New clsDBIO()

          '社員マスタにこの社員コードがなければエラー
          If oDBIO.existKeyRecord("社員テーブル", Value) = False Then
            Throw New mySyainCodeException("社員コード未登録")
          Else
            Me.mSyainCode = Value
          End If
        End If
      End If

    End Set

  End Property

  '-------------------- プロパティ:更新日時 --------------------
  Public Property pUpdateTime() As Date

    'Getプロパティ
    Get
      Return mUpdateTime
    End Get

    'Setプロパティ
    Set(ByVal Value As Date)
      mUpdateTime = Value
    End Set

  End Property

End Class

----------------------------------------------------------------------
              ■■ 次号予告 第45号(8月29日発行予定) ■■
1. VB.NETワンポイント
2. データベースアクセスクラスの汎用メソッドについて 14
======================================================================
VB.NET データベースプログラミング奮闘記
  発行者:ウェブ実験室(-----@-----)
          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.