65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 VB.NET 编程创建 Microsoft Access 数据库

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.15/5 (7投票s)

2014年8月29日

CPOL

2分钟阅读

viewsIcon

68779

downloadIcon

2909

如何在没有 Microsoft Office 的情况下使用 VB.NET 编程创建 Microsoft Access 数据库

引言

本技巧演示如何使用 VB.NET 在没有 Microsoft Office 的情况下编程创建 Access 数据库。

但是,为了使此示例正常工作,您必须安装 Microsoft Access 数据库引擎 2013 运行时,或您喜欢的任何版本。您可以从 Microsoft Access Database Engine 2013 下载它。

开始新项目时,请不要忘记导入

  • System.Data
  • System.Data.OleDb
  • System.Configuration,在引用 > 程序集 > Framework 中添加
  • Microsoft Office 15.0 Access Database Engine Object Library,在引用 > COM 中添加
    • Microsoft.Office.Interop.Access.Dao

如果您安装了 x86 Microsoft Access 数据库引擎 2013 运行时,请不要忘记设置编译 > 目标 CPU > x86。AnyCPU 只会给您带来麻烦。

背景

我产生这个想法是因为我的 Web 托管服务器与本地计算机创建的 Access 数据库存在兼容性问题。代码实现对于 Winform 和 ASP.NET 项目几乎相同,只需要进行一些修改即可。

Using the Code

所以,让我们开始研究代码吧。

我们从 app.config 开始。以下是需要添加到 app.config 中的几个设置。

<appSettings>
    <!-- database root-->
    <add key="dbroot" value="database"/>
    <!-- database root-->
    <!-- Database_Provider -->
    <add key="Database_Provider"
    value="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%mdbfilepath%;
    Jet OLEDB:Database Password=%mdbfilepasswords%;" />
    <!-- Database_NewDatabaseType value is 1,1.1,2,3,4,12,14,15 database version, runtime version-->
    <add key="Database_NewDatabaseType" value="14" />
    <!-- Database_Provider -->

    <!-- database_mdb filename only without file extension -->
    <add key="Database_sample1" value="sample1" />
    <add key="Database_sample2" value="sample2" />
    <!-- database_mdb filename only without file extension -->
  </appSettings >

dbroot 是您保存数据库文件的文件夹,只需文件夹名称即可。在这种情况下,它是 database

    <!-- database root-->
    <add key="dbroot" value="database"/>
    <!-- database root-->

Database_Provider,您可以在 Database_NewDatabaseType 中设置数据库版本。

    <!-- Database_Provider -->
    <add key="Database_Provider" value="Provider=Microsoft.ACE.OLEDB.12.0;
    Data Source=%mdbfilepath%;Jet OLEDB:Database Password=%mdbfilepasswords%;" />
    <!-- Database_NewDatabaseType value is 1,1.1,2,3,4,12,14,15 database version, runtime version-->
    <add key="Database_NewDatabaseType" value="14" />
    <!-- Database_Provider --> 

命名 Database 文件和键。在这种情况下,键是 Database_sample1 ,文件名是 sample1。如果您有更多数据库文件,则需要在此处添加更多项目。

    <!-- database_mdb filename only without file extension -->
    <add key="Database_sample1" value="sample1" />
    <add key="Database_sample2" value="sample2" />
    <!-- database_mdb filename only without file extension -->

现在,这是代码。

要创建新的数据库,您只需要一行代码即可。

      CloudAccessDatabase.CreateNewDatabase(CloudAccessDatabase.DatabaseType.sample1)
      CloudAccessDatabase.CreateNewDatabase(CloudAccessDatabase.DatabaseType.sample2)

但是,在那之前,您需要做一些准备工作。

步骤 1:添加您的数据库 ID。如果您有 3,4,5 个数据库,只需随意命名,例如 sample3=2。

       Public Enum DatabaseType
        sample1 = 0
        sample2 = 1
       End Enum  

步骤 2:从 app.config 获取数据库文件名。

    Shared Function ConnDatabaseFilePath(stype As DatabaseType) As String

        Dim dbroot As String = CloudAppSettings.GetValidDatabaseRoot
        Dim dbfilename As String = ""

        'create database folder
        If Directory.Exists(dbroot) = False Then
            Directory.CreateDirectory(dbroot)
        End If

        'get the access file name from app.config
        Select Case stype
            Case DatabaseType.sample1
                dbfilename = CloudAppSettings.GetConfigAppSettingsByName("Database_sample1")
            Case DatabaseType.sample2
                dbfilename = CloudAppSettings.GetConfigAppSettingsByName("Database_sample2")
        End Select

        dbfilename = String.Format("{0}{1}", dbfilename, ".accdb")
        dbroot = String.Format("{0}{1}", dbroot, dbfilename)

        Return dbroot
    End Function  

步骤 2.1:只有当您添加新的数据库时,才需要更改此部分。

    Select Case stype
            Case DatabaseType.sample1
                dbfilename = CloudAppSettings.GetConfigAppSettingsByName("Database_sample1")
            Case DatabaseType.sample2
                dbfilename = CloudAppSettings.GetConfigAppSettingsByName("Database_sample2")
        End Select  

步骤 3:编写数据库表命令。如果您的 DatabaseType Enum DatabaseType.sample3,您必须为它编写一些内容。

    Shared Function CommandString(sType As DatabaseType) As ArrayList

        Dim result As New ArrayList
        Select Case sType
            Case DatabaseType.sample1
                result.Add("CREATE TABLE sample1 ([id] COUNTER IDENTITY(1,1),
                _[SessionId] VARCHAR (40), [SessionDate] DATETIME, _
                [SessionName] LONGTEXT, CONSTRAINT PKSessions PRIMARY KEY (SessionId))")
            Case DatabaseType.sample2
                result.Add("CREATE TABLE Roles ([id] COUNTER IDENTITY(1,1), _
                [Rolename] LONGTEXT, [ApplicationName] LONGTEXT, _
                CONSTRAINT PKRoles PRIMARY KEY (Rolename, ApplicationName))")
                result.Add("CREATE TABLE UsersInRoles ([id] COUNTER IDENTITY(1,1), _
                [Username] LONGTEXT, [Rolename] LONGTEXT, [ApplicationName] LONGTEXT, _
                CONSTRAINT PKUsersInRoles PRIMARY KEY (Username, Rolename, ApplicationName))")
        End Select
        Return result
    End Function   

所以,现在您理解一点了吗?

核心

以上所有准备工作都是为了这段代码。

  1. 获取文件路径。
  2. 获取连接字符串。
  3. 创建 OleDbConnection
  4. 检查数据库是否已存在。
  5. AccessCreateDB,创建数据库文件。
  6. 创建数据库表,一个或多个表。
  7. 完成。
   Public Shared Sub CreateNewDatabase(sType As DatabaseType)
        Dim dbfile As String = ConnDatabaseFilePath(sType)
        Dim con As String = ConnSettings(sType)
        Dim conn As OleDbConnection = New OleDbConnection(con)
        Try
            If File.Exists(dbfile) = True Then
                'database already exist
            Else
                AccessCreateDB(dbfile)
                'create table
                If CommandString(sType).Count > 1 Then
                    conn.Open()
                    For items = 0 To CommandString(sType).Count - 1
                        Dim cmdCreate As New OleDbCommand
                        With cmdCreate
                            .Connection = conn
                            .CommandText = CommandString(sType).Item(items).ToString
                        End With
                        cmdCreate.ExecuteNonQuery()
                    Next
                    conn.Close()
                Else
                    Dim cmdCreate As New OleDbCommand
                    With cmdCreate
                        .Connection = conn
                        .CommandText = CommandString(sType).Item(0).ToString
                    End With
                    conn.Open()
                    cmdCreate.ExecuteNonQuery()
                    conn.Close()
                End If

            End If
        Catch ex As OleDbException
            MsgBox(ex.Message, MsgBoxStyle.Information, "OleDbException")
        End Try
    End Sub 
© . All rights reserved.