すぐ使えるADO.NET

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

本の紹介

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

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




【第12号】

 第12号(2004.8.5発行)
======================================================================
           ★★ VB.NETデータベースプログラミング奮闘記 ★★

----------------------------------------------------------------------
ADO.NETの基本的なプログラミングを中心に掲載します。
末永くご購読の程よろしくお願い申し上げます。

すぐ使えるADO.NET --> サンプルプログラム満載
                      http://park5.wakwak.com/‾weblab/
======================================================================
                        -----【目次】-----

1. VB.NETワンポイント:文字列の改行
2. 部門単位で自動連番を生成するクラスの作成 3

----------------------------------------------------------------------
             ■■ VB.NETワンポイント:文字列の改行 ■■

文字列を任意の位置で改行するためには、改行したい位置に改行文字列を挿入
する必要があります。

文字列を改行する例をいくつか紹介します。メッセージボックスに表示して、
改行を確認しています。

  'メッセージボックスに表示するテキスト
  Const constMsg1 As String = "新三種の神器とは、"
  Const constMsg2 As String = "DVD・薄型TV・デジカメのことです"

  'タイトルバーに表示するテキスト
  Const constCap As String = "文字列の改行"

  '改行した文字列を設定する
  Dim strMsg As String

  '●改行文字列がないので、改行しません
  strMsg = "改行しません:" + constMsg1 + constMsg2
  MessageBox.Show(strMsg, constCap)

  '●Chr(13) + Chr(10)で改行
  strMsg = "Chr(13) + Chr(10)で改行:" + Chr(13) + Chr(10)
  strMsg += constMsg1 + Chr(13) + Chr(10) + constMsg2
  MessageBox.Show(strMsg, constCap)

  '●定数ControlChars.CrLfで改行
  strMsg = "ControlChars.CrLfで改行:" + ControlChars.CrLf
  strMsg += constMsg1 + ControlChars.CrLf + constMsg2
  MessageBox.Show(strMsg, constCap)

  '●定数ControlChars.NewLineで改行
  strMsg = "ControlChars.NewLineで改行:" + ControlChars.NewLine
  strMsg += constMsg1 + ControlChars.NewLine + constMsg2
  MessageBox.Show(strMsg, constCap)

  '●この環境(OS)で定義されている改行文字列を
  'Environment.NewLineプロパティで取得して改行
  strMsg = "Environment.NewLineで改行文字列を取得して改行:"
  strMsg += Environment.NewLine
  strMsg += constMsg1 + Environment.NewLine + constMsg2
  MessageBox.Show(strMsg, constCap)

下位互換のためにあるvbCrLfは、使用しないほうが良いでしょう。

----------------------------------------------------------------------
         ■■ 部門単位で自動連番を生成するクラスの作成 3 ■■

前号からの続きで、自動連番を生成するクラスclsSequenceNumを構築します。
連番生成テーブルは次のように定義しています。

key フィールド名   データ型    サイズ  値要求  空文字列の許可
----------------------------------------------------------------
◎ 部門コード  テキスト型    3 はい  いいえ
− 連番     数値型    整数型 はい  −
− 更新日時   日付/時刻型   − はい  −  --> 注:未使用

前号では、コンストラクタとgetSequenceNumメソッドを説明しました。今回は、
existBumonメソッドを説明します。

existBumonメソッドは、部門コードのレコードが連番生成テーブルに存在する
かしないかを調べます。引数はありません。戻値が、Trueならば、レコードが
存在し、Falseならば、レコードが存在しません。

existBumonメソッド中のSQL文は、次のようにします。

 "SELECT COUNT(*) FROM 連番生成テーブル WHERE 部門コード = @bumonCode"

@bumonCodeには、部門コードmBumonCodeを設定します。部門コードは、キー値
ですから、レコードが存在すれば、1レコードしかありません。キー値のレ
コード数を調べれば、レコードの有無が分かります。レコード数を取得する場
合は、ExecuteScalarメソッドを使います。

  Dim recCount As Integer
  recCount = CInt(oCommand.ExecuteScalar())

レコードが存在すれば、recCountは、1になります。この時は、戻り値にTrue
を設定します。
レコードが存在しなければ、0になります。この時は、戻り値にFalseを設定
します。

  If recCount = 1 Then
    'レコードが存在する時の処理
    Return True
  Else
    'レコードが存在しない時の処理
    Return False
  End If

では、連番生成クラスのexistBumonメソッドのソースリストを掲載します。
createSequenceNumメソッドは、次号に掲載します。ご了承願います。

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

Public Class clsSequenceNum

  '------------------------ プロパティ ------------------------
  '部門コード
  Private mBumonCode As String

  '------------------------------------------------------------
  ' 機能:コンストラクタ
  ' 引数:in 部門コード
  '------------------------------------------------------------
  Sub New(ByVal parBumonCode As String)

    MyBase.New()
    Me.mBumonCode = parBumonCode

    '部門コードのレコードがなければ、1レコード追加
    If Me.existBumon = False Then
      Me.createSequenceNum()
    End If

  End Sub

  '------------------------------------------------------------
  ' 機能:連番生成テーブルから連番を取得する関数
  ' 引数:なし
  ' 戻値:8桁文字列ならば、取得成功
  '       ""(長さ0の文字列)ならば、取得失敗
  '------------------------------------------------------------
  Public Function getSequenceNum() As String
    '第11号に掲載しました。
    http://park5.wakwak.com/‾weblab/mag011.htm
  End Function

  '------------------------------------------------------------
  ' 機能:プロパティの部門コードのレコードが連番生成テーブルに
  '       存在するか否かを調べるメソッド
  ' 引数:なし
  ' 戻値:True  --> 存在する.  False --> 存在しない
  '------------------------------------------------------------
  Private Function existBumon() As Boolean

    Dim oConn As New OleDbConnection()
    Dim oCommand As New OleDbCommand()

    Try
      'DB接続文字列の設定
      '注:プロジェクトファイルホルダの下にあるbinホルダにMDBを置く
      oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + _
      " Data Source=" + Application.StartupPath + "¥sample.mdb"

      'コネクションの設定
      oCommand.Connection = oConn

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

      'SQL文の設定
      Const strSelect As String = _
      "SELECT COUNT(*) FROM 連番生成テーブル " + _
      "WHERE 部門コード = @bumonCode"
      oCommand.CommandText = strSelect

      'SQL文パラメータの設定
      oCommand.Parameters.Add( _
      New OleDbParameter("@bumonCode", OleDbType.Char, 3))
      oCommand.Parameters("@bumonCode").Value = Me.mBumonCode

      '連番生成テーブルから該当部門コードのレコード数読込
      Dim recCount As Integer
      recCount = CInt(oCommand.ExecuteScalar())
      If recCount = 1 Then
        'レコードが存在する時の処理
        Return True
      Else
        'レコードが存在しない時の処理
        Return False
      End If

    Catch oExcept As Exception
      '例外が発生した時の処理
      Throw New clsDBIOException(oExcept.ToString)

    Finally
      'DB接続を閉じる
      If Not oConn Is Nothing Then
        oConn.Close()
      End If

    End Try

  End Function

  '------------------------------------------------------------
  ' 機能:連番生成テーブルに1レコードを登録するメソッド
  ' 引数:なし
  ' 戻値:True  --> 登録成功.  False --> 登録失敗
  '------------------------------------------------------------
  Private Function createSequenceNum() As Boolean
    '次号に掲載します。
  End Function

End Class

----------------------------------------------------------------------
            ■■ 次号予告 第13号(8月25日頃発行予定) ■■

1. VB.NETワンポイント
2. 部門単位で自動連番を生成するクラスの作成 4

======================================================================
VB.NET データベースプログラミング奮闘記    第12号(2004.8.5)
          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.