サンプルコードの共通(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