すぐ使えるADO.NET

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

本の紹介

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

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




【第4号】

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

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

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

1. VB.NETワンポイント:Int関数とFix関数の違い
2. テーブル設計:将来変更されるかもしれない項目を扱う場合(下)
                         −−サンプルプログラム−−
3. VB.NETワンポイントオブジェクト指向:Throwステートメント
4. 次号予告

----------------------------------------------------------------------
         ■■ VB.NETワンポイント:Int関数とFix関数の違い ■■

Int関数とFix関数は、共に小数部分を切り捨てた整数値を戻しますが、負数の
場合は、戻値が異なります。以下の例では、Option Strict Offです。

 Int関数の場合: Int(95 * 1.05)  --> 99

 Fix関数の場合: Fix(95 * 1.05)  --> 99

 Int関数の場合: Int(-95 * 1.05) --> -100

 Fix関数の場合: Fix(-95 * 1.05) --> -99

Option Strict Onの場合は、CInt関数でデータ型変換が必要です。
Int(95 * 1.05) ならば、CInt(Int(95 * 1.05)) とします。

CInt関数は常に最も近い整数に値を丸めますが、小数部分が、0.5の時に限り、
最も近い偶数に値を丸めますので注意して下さい。たとえば、

 CInt(2.4) --> 2   CInt(2.5) --> 2   CInt(2.6) --> 3  となります。

----------------------------------------------------------------------
 ■■ テーブル設計:将来変更されるかもしれない項目を扱う場合(下) ■■

では、さっそく、消費税額を計算する消費税クラスを構築する事にします。

クラス名:clsSyohizei[消費税クラス]

消費税率は取引した年月日で決まりますから、インスタンス生成時に、
その日付を引数に指定します。

プロパティは、取引年月日と消費税率のふたつです。クラス内部のみで参照し
ますので、Privateとします。

メソッドはPublicとして、消費税率取得、消費税額計算、税込額計算の各メ
ソッドを定義します。消費税額は円未満を切り捨てます。

メソッド:消費税率取得(消費税率テーブルから消費税率を取得)
            Public Function getSyohiZeiRitu() As Single

メソッド:消費税額計算(プロパティの消費税率を使って、消費税額を計算)
            Public Function calcSyohiZeiGaku _
              (ByVal hontaiKingaku As Integer) As Integer

メソッド:税込額計算(消費税額計算メソッドを使って、税込額を計算)
            Public Function calcZeikomiGaku _
              (ByVal hontaiKingaku As Integer) As Integer

なお、getSyohiZeiRituメソッドで使用するSQL文は、sample.mdbの消費税率
テーブルに、次のようにレコードが登録されているという前提です。

   消費税率ID    消費税率  適用開始日   適用終了日
(オートナンバ型) (通貨型) (日付時刻型) (日付時刻型)
        1         0.00      NULL値      1989/3/31
        2         0.03     1989/4/1     1997/3/31
        3         0.05     1997/4/1      NULL値

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

Option Strict On           'プロジェクトのプロパティでも設定可能
Imports System.Data.OleDb  'SQL Serverの場合 System.Data.SqlClient

'*******************************************************************
' クラス名:clsSyohizei[消費税クラス]
'*******************************************************************
Public Class clsSyohizei

  '--------------- プロパティ:取引日 ---------------
  Private mTorihikiBi As Date

  '--------------- プロパティ:消費税率 ---------------
  Private mSyohiZeiRitu As Single

  '-----------------------------------------------------------------
  ' 機能:コンストラクタ
  ' 引数:in 取引日
  '-----------------------------------------------------------------
  Sub New(ByVal parTorihikiBi As Date)

    MyBase.New()

    '取引日をプロパティにセット
    Me.mTorihikiBi = parTorihikiBi

    Try
      '消費税率取得メソッドを呼び出し、消費税率をプロパティにセット
      mSyohiZeiRitu = Me.getSyohiZeiRitu()

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

    End Try

    '取得する消費税率レコードがない時
    If mSyohiZeiRitu = -1 Then
      '独自に定義したSyohizeiExceptionクラスの例外を生成
      Throw New clsSyohizeiException("取引日の消費税率は未登録です")
    End If

  End Sub

  '-----------------------------------------------------------------
  ' 機能:消費税率テーブルから消費税率を取得するメソッド
  ' 引数:なし
  ' 戻値: 0以上 --> 消費税率
  '    -1   --> 該当する消費税率レコードなし
  '-----------------------------------------------------------------
  Public Function getSyohiZeiRitu() As Single

    Const strSelect As String = "SELECT * FROM 消費税率テーブル " + _
    "WHERE (適用開始日 IS NULL AND 適用終了日 >= @torihikiBi) OR " + _
    "(適用開始日 <= @torihikiBi AND @torihikiBi <= 適用終了日) " + _
    "OR (適用開始日 <= @torihikiBi AND 適用終了日 IS NULL)"

    'データベース接続オブジェクトのインスタンスを生成
    '注:MDBの場合                               SQL Server の場合
    Dim oConn As New OleDbConnection()        'As New SqlConnection()
    'コマンドオブジェクトのインスタンスを生成
    Dim oCommand As New OleDbCommand()        'As New SqlCommand()
    'データリーダオブジェクトの宣言
    Dim oDataReader As OleDbDataReader        'As SqlDataReader()

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

     'コネクションの設定
      oCommand.Connection = oConn
      'SQL文の設定
      oCommand.CommandText = strSelect
      'DB接続を開く
      oConn.Open()

      'SQL文パラメータの設定
      'パラメータのデータ型は、テーブルのフィールド型に揃える
      oCommand.Parameters.Add _
        (New OleDbParameter("@torihikiBi", OleDbType.DBDate))
      'プロパティの取引日を、引数にセットする
      oCommand.Parameters("@torihikiBi").Value = Me.mTorihikiBi

      '消費税率テーブルから該当レコードを読込む
      '取得レコードが1件の時、CommandBehavior.SingleRowを引数にセット
      oDataReader = oCommand.ExecuteReader(CommandBehavior.SingleRow)
      If oDataReader.Read() Then
        'レコードが取得できた時の処理:戻値に消費税率を設定
        getSyohiZeiRitu = CSng(oDataReader("消費税率"))
      Else
        'レコードが取得できなかった時の処理:戻値に-1を設定
        getSyohiZeiRitu = -1
      End If

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

    Finally
      If Not oDataReader Is Nothing Then
        oDataReader.Close()     'データリーダを閉じる
      End If
      If Not oConn Is Nothing Then
        oConn.Close()           'DB接続を閉じる
      End If

    End Try

    Return getSyohiZeiRitu

  End Function

  '----------------------------------------------------------------------
  ' 機能:消費税額を計算するメソッド(円未満切り捨て)
  ' 引数:in 本体金額
  ' 戻値:消費税額
  '----------------------------------------------------------------------
  Public Function calcSyohiZeiGaku(ByVal hontaiKingaku As Integer) _
                                                               As Integer
    calcSyohiZeiGaku = CInt(Fix(hontaiKingaku * Me.mSyohiZeiRitu))
    Return calcSyohiZeiGaku

  End Function

  '----------------------------------------------------------------------
  ' 機能:税込額を計算するメソッド(円未満切り捨て)
  ' 引数:in 本体金額
  ' 戻値:税込額
  '----------------------------------------------------------------------
  Public Function calcZeikomiGaku(ByVal hontaiKingaku As Integer) _
                                                               As Integer
    Dim syohiZeiGaku As Integer

    syohiZeiGaku = Me.calcSyohiZeiGaku(hontaiKingaku)
    calcZeikomiGaku = hontaiKingaku + syohiZeiGaku
    Return calcZeikomiGaku

  End Function

End Class

'******************** 消費税例外クラス ***************************
Public Class clsSyohizeiException
  Inherits ApplicationException

  Private mErrorMessage As String

  Public Sub New(ByVal errorMessage As String)
    MyBase.New(errorMessage)
  End Sub

End Class

----------------------------------------------------------------------
  ■■ VB.NETワンポイントオブジェクト指向:Throwステートメント ■■

Throwステートメントを使うと、例外を生成できます。消費税例外クラスのよ
うに、独自の例外も生成できます。生成した例外は、Catchブロックで処理を
行います。このCatchブロックは、複数指定することができます。

 Try
   〜
 Catch oExcept As clsSyohizeiException
   'ここに消費税率取得エラー処理をコーディング
 Catch oExcept As Exception
   'ここにその他のエラー処理をコーディング
 End Try

----------------------------------------------------------------------
                      ■■ 次号予告 ■■

第5号(5月連休明けを予定)  月3回位発行予定

1. VB.NETワンポイント
2. クラスメソッドの使い方
3. VB.NETワンポイントオブジェクト指向

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