NonSoft

アクセスMDBを操作するサンプル(VB.NET)


 サンプル(ソース/コード)
<このサンプルの概要>
System.Data.OleDbを使用しアクセスMDBを操作するサンプル(VB.NET) です。
本サンプルはSystem.Data.OleDbの基本機能だけをシンプルにクラス化して、
ACCESS MDBを操作しています。

System.Data.OleDbは汎用のADOクラスですのでプロバイダを指定する事によって、
ACCESSでもORACLEでもSQLサーバでも同様にDB操作出来ます。

基本機能としてはアクセスMDB接続、MDB切断、MDB検索、MDB更新(レコード追加)、
トランザクション開始、コミット、ロールバックがあります。
これ以外の機能を使う事は殆ど無いと思います。

ところで、、、
このサンプルではプロバイダとしてMicrosoft.Jet.OLEDB.4.0を使用していますが、
これはx86(32ビット)でのみ有効でx64(64ビット)では使用出来ません。
x64(64ビット)のパソコンでMicrosoft.Jet.OLEDB.4.0を使用するためには、
x86(32ビット)モードでコンパイルする必要があります。
x86(32ビット)モードでコンパイルするためには、[プロジェクト]の[プロパティ]で
[コンパイル]の[詳細コンパイルオプション]の[ターゲットCPU]を[x86]にします。

データベース関係のその他のサンプル(VB6/VB.NET/C#.NET)はこちらです。
データベース関係のその他のサンプル(VB6/VB.NET/C#.NET)

★クラス(AccessMdb.vb)
Imports System.Data.OleDb

Public Class AccessMdb
    ''' <summary>
    ''' SQLコネクション
    ''' </summary>
    Private _con As OleDbConnection = Nothing

    ''' <summary>
    ''' トランザクション・オブジェクト
    ''' </summary>
    ''' <remarks></remarks>
    Private _trn As OleDbTransaction = Nothing

    ''' <summary>
    ''' DB接続
    ''' </summary>
    ''' <param name="dsn">データソース名</param>
    ''' <param name="tot">タイムアウト値</param>
    ''' <remarks></remarks>
    Public Sub Connect(Optional ByVal dsn As String = "db1.mdb", _
                       Optional ByVal tot As Integer = -1)

        Try
            If _con Is Nothing Then
                _con = New OleDbConnection
            End If

            Dim cst As String = ""
            cst = cst & "Provider=Microsoft.Jet.OLEDB.4.0"
            cst = cst & ";Data Source=" & dsn
            ' データベースパスワードが設定されている場合
            ' cst = cst & ";Jet OLEDB:Database Password=xxxxx"
            If tot > -1 Then
                '_con.ConnectionTimeout = tot
                cst = cst & ";Connect Timeout=" & tot.ToString
            End If
            _con.ConnectionString = cst

            _con.Open()
        Catch ex As Exception
            Throw New Exception("Connect Error", ex)
        End Try
    End Sub

    ''' <summary>
    ''' DB切断
    ''' </summary>
    Public Sub Disconnect()
        Try
            _con.Close()
        Catch ex As Exception
            Throw New Exception("Disconnect Error", ex)
        End Try
    End Sub

    ''' <summary>
    ''' SQLの実行
    ''' </summary>
    ''' <param name="sql">SQL文</param>
    ''' <param name="tot">タイムアウト値</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function ExecuteSql(ByVal sql As String, _
                               Optional ByVal tot As Integer = -1) As DataTable
        Dim dt As New DataTable

        Try
            Dim sqlCommand As New OleDbCommand(sql, _con, _trn)

            If tot > -1 Then
                sqlCommand.CommandTimeout = tot
            End If

            Dim adapter As New OleDbDataAdapter(sqlCommand)

            adapter.Fill(dt)
            adapter.Dispose()
            sqlCommand.Dispose()
        Catch ex As Exception
            Throw New Exception("ExecuteSql Error", ex)
        End Try

        Return dt
    End Function

    ''' <summary>
    ''' トランザクション開始
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub BeginTransaction()
        Try
            _trn = _con.BeginTransaction()
        Catch ex As Exception
            Throw New Exception("BeginTransaction Error", ex)
        End Try
    End Sub

    ''' <summary>
    ''' コミット
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub CommitTransaction()
        Try
            If _trn Is Nothing = False Then
                _trn.Commit()
            End If
        Catch ex As Exception
            Throw New Exception("CommitTransaction Error", ex)
        Finally
            _trn = Nothing
        End Try
    End Sub

    ''' <summary>
    ''' ロールバック
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub RollbackTransaction()
        Try
            If _trn Is Nothing = False Then
                _trn.Rollback()
            End If
        Catch ex As Exception
            Throw New Exception("RollbackTransaction Error", ex)
        Finally
            _trn = Nothing
        End Try
    End Sub

    ''' <summary>
    ''' ファイナライズ
    ''' </summary>
    ''' <remarks></remarks>
    Protected Overrides Sub Finalize()
        Disconnect()
        MyBase.Finalize()
    End Sub
End Class

★フォームモジュール(Form1.vb)
Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "
' 省略
' ボタンを2つ追加してお試しください
#End Region

    Private Sub Button1_Click( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim db As New AccessMdb
        Dim tb As DataTable
        Dim i As Integer
        db.Connect()
        tb = db.ExecuteSql("select col1,col2,col3 from test")
        For i = 0 To tb.Rows.Count - 1
            System.Diagnostics.Trace.WriteLine( _
                tb.Rows(i).Item("col1").ToString() & ":" & _
                tb.Rows(i).Item("col2").ToString() & ":" & _
                tb.Rows(i).Item("col3").ToString())
        Next
        db.Disconnect()
    End Sub

    Private Sub Button2_Click( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim db As New AccessMdb
        db.Connect()
        db.BeginTransaction()
        db.ExecuteSql( _
            "insert into test(col1,col2,col3) " & _
            "values('1234567890',9,'2007-03-04 05:06:07')")
        db.CommitTransaction()
        db.Disconnect()
    End Sub
End Class