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






4.15/5 (7投票s)
如何在没有 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
所以,现在您理解一点了吗?
核心
以上所有准备工作都是为了这段代码。
- 获取文件路径。
- 获取连接字符串。
- 创建
OleDbConnection
。 - 检查数据库是否已存在。
AccessCreateDB
,创建数据库文件。- 创建数据库表,一个或多个表。
- 完成。
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