サンプルコードの共通(DataAccess)

当サンプルの中で、Access や SQL Server のデータベースに対して
SELECT 文を発行し、データを取得しているサンプルがありますが、
こちらで紹介する、共通部品を使用しています。
サンプルのプロジェクトダウンロード

このカテゴリーの先頭へ このページの先頭へ

■クラス図

クラス図です。
準備中...

このカテゴリーの先頭へ このページの先頭へ

■コード

DataAccess の基底の抽象クラスです。

AbstructDataAccess.vb
Public MustInherit Class AbstructDataAccess

  'コネクションを開くメソッド定義
  Public MustOverride Sub Open(ByVal ConnectionString As String)
  'SELECT文を発行し、DataTableを返却するメソッド定義
  Public MustOverride Function DataSelect(ByVal SqlScript As String) As DataTable
  'コネクションを閉じるメソッド定義
  Public MustOverride Sub Close()

  'DBNullを""にする
  Protected Function NullConvert(ByVal value As Object) As String
    If TypeOf value Is DBNull Then
      Return ""
    End If
    Return value.ToString()
  End Function
End Class
このカテゴリーの先頭へ このページの先頭へ

OLE オブジェクトへの DataAccess クラスです。
AbstructDataAccess を継承しています。

OleDataAccess.vb
Imports System.Data.OleDb

Public Class OleDataAccess
  Inherits AbstructDataAccess

  'コネクション
  Private m_OleConnection As OleDbConnection

  'コネクションを開く
  Public Overrides Sub Open(ByVal ConnectionString As String)
    Me.m_OleConnection = New OleDbConnection
    Me.m_OleConnection.ConnectionString = ConnectionString
    Me.m_OleConnection.Open()
  End Sub

  'SELECT文を発行し、DataTableを返却する
  Public Overrides Function DataSelect(ByVal SqlScript As String) As DataTable

    Dim selectCommand As OleDbCommand
    Dim oleDataReader As OleDbDataReader

    selectCommand = New OleDbCommand
    selectCommand.Connection = Me.m_OleConnection
    selectCommand.CommandType = CommandType.Text
    selectCommand.CommandText = SqlScript
    oleDataReader = selectCommand.ExecuteReader()

    'DataReader→DataTable
    Dim dt As DataTable = New DataTable
    'DataTableに列を追加
    For i As Integer = 0 To oleDataReader.GetSchemaTable.Rows.Count - 1
      dt.Columns.Add(DirectCast(oleDataReader.GetSchemaTable.Rows(i).Item("ColumnName"), String), _
               GetType(String))
    Next
    Do While oleDataReader.Read
      Dim row As DataRow = dt.NewRow()
      For i As Integer = 0 To oleDataReader.FieldCount - 1
        row(i) = MyBase.NullConvert(oleDataReader.Item(i))
      Next
      dt.Rows.Add(row)
    Loop
    oleDataReader.Close()
    Return dt

  End Function

  'コネクションを閉じる
  Public Overrides Sub Close()
    If Me.m_OleConnection Is Nothing Then Exit Sub
    If Not Me.m_OleConnection.State = ConnectionState.Closed Then
      Me.m_OleConnection.Close()
    End If
    Me.m_OleConnection.Dispose()
  End Sub
End Class
このカテゴリーの先頭へ このページの先頭へ

SQL Server への DataAccess クラスです。

SqlServerDataAccess.vb
Imports System.Data.SqlClient

Public Class SqlServerDataAccess
  Inherits AbstructDataAccess

  'コネクション
  Private m_SqlConnection As SqlConnection

  'コネクションを開く
  Public Overrides Sub Open(ByVal ConnectionString As String)
    Me.m_SqlConnection = New SqlConnection
    Me.m_SqlConnection.ConnectionString = ConnectionString
    Me.m_SqlConnection.Open()
  End Sub

  'SELECT文を発行し、DataTableを返却する
  Public Overrides Function DataSelect(ByVal SqlScript As String) As DataTable

    Dim sqlDataReader As SqlDataReader
    Dim selectCommand As SqlCommand

    selectCommand = New SqlCommand
    selectCommand.Connection = Me.m_SqlConnection
    selectCommand.CommandType = CommandType.Text
    selectCommand.CommandText = SqlScript
    sqlDataReader = selectCommand.ExecuteReader()

    'DataReader→DataTable
    Dim dt As DataTable = New DataTable
    'DataTableに列を追加
    For i As Integer = 0 To sqlDataReader.GetSchemaTable.Rows.Count - 1
      dt.Columns.Add(DirectCast(sqlDataReader.GetSchemaTable.Rows(i).Item("ColumnName"), String), _
               GetType(String))
    Next
    Do While sqlDataReader.Read
      Dim row As DataRow = dt.NewRow()
      For i As Integer = 0 To sqlDataReader.FieldCount - 1
        row(i) = MyBase.NullConvert(sqlDataReader.Item(i))
      Next
      dt.Rows.Add(row)
    Loop
    Return dt
  End Function

  'コネクションを閉じる
  Public Overrides Sub Close()
    If Me.m_SqlConnection Is Nothing Then Exit Sub
    If Not Me.m_SqlConnection.State = ConnectionState.Closed Then
      Me.m_SqlConnection.Close()
    End If
    Me.m_SqlConnection.Dispose()
  End Sub
End Class
このカテゴリーの先頭へ このページの先頭へ