Access2007 プロバイダ オープンMODE


VB Tips And Sample(HOME)(VB.NET Sample インデックス)



Imports System.Data.OleDb


Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim cn As New OleDbConnection
        Dim da As OleDbDataAdapter
        Dim ds As New DataSet
        Dim buil As New OleDbConnectionStringBuilder
        Dim i, j As Integer
        Try
            'Access 2007 プロバイダ Provider=Microsoft.ACE.OLEDB.12.0
            '(データベース接続をウィザード・ダイアログで設定していくとこの「ヘルプ」が参照できる)
            Access2000(データエンバイロメント(ウィザード)だっけ?で「ヘルプ」が参照できる)のものと変更はない様だ。
            MSのヘルプに記載されている内容↓
            '[Read] - 読み取り専用。
            '[ReadWrite] - 読み取りアクセス権および書き込みアクセス権。
            '[Share Deny None] - ほかのユーザーに対して、読み取りアクセス権および書き込みアクセス権を拒否することができません。(これが規定?)
            '[Share Deny Read] - ほかのユーザーは読み取りモードで開くことができません。
            '[Share Deny Write] - ほかのユーザーは書き込みモードで開くことができません。
            '[Share Exclusive] - ほかのユーザーは読み取り/書き込みモードで開くことができません。 
            '[Write] - 書き込み専用。 
            'MSのヘルプに記載されている内容↑

            cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\Database1.accdb;" & ";Mode=Share Deny None;"
            Debug.WriteLine(cn.ConnectionString)

            'テスト
            buil.ConnectionString = cn.ConnectionString
            Debug.WriteLine("mode;;" & buil.Item("Mode"))


            cn.Open()
            cn.Close()

            da = New OleDbDataAdapter("SELECT * FROM dbo_Customers", cn)

            For i = 0 To 5
                da.Fill(ds, "Customers") '目的のデータを取得してデータセットに格納後自動的に接続は解除される
                If ds.Tables(0).Rows.Count >= 1 Then
                    Debug.WriteLine(ds.Tables(0).Rows.Count.ToString)
                    Debug.WriteLine(ds.Tables(0).Rows(ds.Tables(0).Rows.Count - 1)(0).ToString)
                End If
                ds.Clear() 'MSDNから→すべてのテーブル内のすべての行を削除して、データの DataSet を消去します。 
                ds.Dispose()
                'ds.Dispose() を行ってもdsは初期化されていない あくまで「リソースを解放します」ということ。
                '開放したらデータの DataSet を消去するのでは?と思うが、「消去していない」ので注意!
                'ds.Clear()をしないと、次々と後ろに追加?前に挿入?でたらめ追加?でdsは増加してしまう。

            Next
            Debug.WriteLine("OPEN")

        Catch ex As Exception
            Debug.WriteLine(ex.Message)

        Finally
            ds.Clear() 'MSDNから→すべてのテーブル内のすべての行を削除して、データの DataSet を消去します。 
            ds.Dispose()
            cn.Close()
        End Try



    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub
End Class



VB Tips And Sample(HOME)(VB.NET Sample インデックス)