バックナンバー: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の研究ホームページに掲載され ている会社名・製品名等は、各社の登録商標または商標です。 ======================================================================
↑このページ(メルマガ:VB.NETデータベース) 先頭へ | すぐ使えるADO.NET ホームへ
Copyright© すぐ使えるADO.NET. All rights reserved.