|
|||||
<このサンプルの概要> 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 |