DBアクセス基本クラス[VB 2013]

Visual Basic 2010/2008 やさしいADO.NET DBプログラム

   やさしい VB2010/2008 ADO.NET

販売管理データベースをアクセスするための基本クラスです。データベースの各テーブルにアクセスするためには、基本クラスから派生したクラスに実装します。このクラス構成にすると、派生クラスが効率的に作成できます。

データベースアクセス基本クラスの実装

受注エントリー画面

受注エントリーで販売管理データベースにアクセスするための基本クラスです。

得意先表、商品表、受注ヘッダー表、受注ディテール表にアクセスするためには、この基本クラスを派生したクラスにアクセスメソッドを実装します。

販売管理データベースアクセス基本クラスClsHanbaiKanriDBIOには、次のメソッドを実装します。

  • システム日付を取得する共有メソッド
  • DBを開く共有メソッド
  • 表から取得したレコードを返すメソッド
  • 引数に指定した表のキー値のレコードを取得する
  • 表の1行分の空データを生成するメソッド
Option Strict On
Imports System.Configuration    ' 参照の追加 System.Configuration
Imports System.Data.SqlClient
Imports System.Transactions     ' 参照の追加 System.Transactions

'////// 基本クラス:販売管理データベースアクセスクラス //////
Public Class ClsHanbaiKanriDBIO

  '**********************************************************
  ' 機能:現在のシステム日付を取得するメソッド
  ' 引数:なし
  ' 戻値:現在のシステム日付
  '******1*********2*********3*********4*********5**********6
  Public Shared Function GetSysDate() As Date

      Dim retSysDate As New Date    'リターン値
      Try
          Using con As New SqlConnection
              Using cmd As New SqlCommand
                  ' DBを開く
                  ClsHanbaiKanriDBIO.OpenDB(con, cmd)
                  ' SQL文設定
                  cmd.CommandText = "SELECT CONVERT(DATEtime, GETDATE())"
                  ' 表からレコード取得
                  retSysDate = CDate(cmd.ExecuteScalar())
              End Using
          End Using
          ' ◆戻値を設定してリターン
          Return retSysDate
      Catch ex As DBIOException
          ' DBIO例外が発生した時の処理
          Throw New DBIOException(ex.Message)
      Catch ex As Exception
          ' その他例外が発生した時の処理
          Throw New Exception(ex.ToString)
      End Try

  End Sub

  '**********************************************************
  ' 機能:DBを開く共有メソッド
  ' 引数:SqlConnectionオブジェクト
  ' 引数:SqlCommandオブジェクト
  ' 戻値:なし
  ' 補足:app.configファイルの
  '   :<connectionStrings>のaddタグのname属性を
  '   :"販売管理ConnectionString"に変更
  '******1*********2*********3*********4*********5**********6
  Public Shared Sub OpenDB(ByRef con As SqlConnection, _
                           ByRef cmd As SqlCommand)

      Try
          Dim settings As ConnectionStringSettings
          ' 接続文字列をapp.configファイルから取得
          settings = ConfigurationManager.ConnectionStrings _
              ("販売管理ConnectionString")
          If settings Is Nothing Then
              ' 接続文字列取得エラー
              Throw New DBIOException("接続文字列がapp.configに未登録.")
          Else
              ' 接続文字列の設定
              con.ConnectionString = settings.ConnectionString
              ' SqlCommand.Connectionプロパティの設定
              cmd.Connection = con
              ' DBを開く
              con.Open()
          End If
      Catch ex As DBIOException
          ' DBIO例外が発生した時の処理
          Throw New DBIOException(ex.Message)
      Catch ex As Exception
          ' その他例外が発生した時の処理
          Throw New Exception(ex.ToString)
      End Try

  End Sub

  '--------------------< 変数メンバー >-------------------
  Protected tableNameValue As String   ' 表名
  Protected keyFieldValue As String    ' キー項目
  Protected keyValue As String         ' キー値
  Protected dtValue As DataTable       ' 取得レコード

  '==========================================================
  ' 機能:コンストラクタ
  ' 引数:表名(テーブル名)
  ' 引数:キーフィールド名(列名)
  ' 引数:キー値
  '==========================================================
  Public Sub New(ByVal tableName As String, _
                 ByVal keyField As String, _
                 Optional ByVal value As String = "_")

        ' 最初に基本クラスのコンストラクタを呼び出す
        MyBase.New()
        ' 表からレコード取得
        dtValue = GetKeyData(tableName, keyField, value)
keyValue = value ' キー値
tableNameValue = tableName ' 表名
keyFieldValue = keyField ' キーフィールド名
End Sub '********************************************************** ' 機能:表から取得したレコードを返すメソッド ' 引数:キーフィールド名 ' 戻値:表から取得したレコード '******1*********2*********3*********4*********5**********6 Public Function GetRowsData() As DataTable Return dtValue End Function '********************************************************** ' 機能:引数に指定した表のキー値のレコードを取得する ' 引数:表名 ' 引数:キーフィールド名 ' 引数:キー値 ' 戻値:取得したレコード ' 補足:テーブル名の主キーフィールドはNChar型とする '******1*********2*********3*********4*********5**********6 Protected Function GetKeyData(ByVal tableName As String, _ ByVal fieldName As String, _ ByVal value As String) _ As DataTable Dim retDt As New DataTable() 'リターン値 '----------<< テーブルからレコード取得 >>---------- Using con As New SqlConnection Using cmd As New SqlCommand ' DBを開く ClsHanbaiKanriDBIO.OpenDB(con, cmd) ' SQL文設定 cmd.CommandText = "SELECT * FROM " & tableName & _ " WHERE " & fieldName & " = @value" ' SQL文の引数設定 cmd.Parameters.Clear() ' 引数の実際のサイズからデータ長を推論 cmd.Parameters.Add("@value", SqlDbType.NChar) ' SQL文引数に値を設定 cmd.Parameters("@value").Value = value ' 表からレコード取得 Dim da As New SqlDataAdapter da.SelectCommand = cmd da.Fill(retDt) End Using End Using ' ◆戻値を設定してリターン Return retDt End Function '********************************************************** ' 機能:表の1行分の空データを生成するメソッド ' 引数:なし ' 戻値:生成した1行分の空データ '******1*********2*********3*********4*********5**********6 Public Function CreateDataRow() As DataRow Dim retDr As DataRow ' リターン値 Dim dt As New DataTable ' 列情報を取込むために、レコードを取得するが ' 取得できなくても問題ないので ' 第3引数のキー値はアンダースコアを設定 dt = Me.GetKeyData(tableNameValue, keyFieldValue, "_") retDr = dt.NewRow Return retDr End Function End Class

Copyright© やさしいVB2012/2010 ADO.NET. All rights reserved.