1

I am using a Microsoft Access Database in my project; saved to the bin folder. What can I do, to ensure connectivity to that database, when the file path changes?

Imports System.Data.OleDb Public Class Form3

Dim con As New OleDb.OleDbConnection

Dim da As OleDbDataAdapter

Dim ds As New DataSet

Dim str1 As String

    con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\AARVIII\Documents\DATABASE\MP1.accdb"
4

3 回答 3

4

您的连接字符串将您的数据库定位在仅在您的 PC 上有效的固定位置。
一个简单的解决方法是使用|DataDirectory| 替换字符串。

con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + 
                       "Data Source=|DataDirectory|\MP1.accdb"

这样,您可以通过代码控制数据库的位置。
通常(对于桌面应用程序)|DataDirectory| 替换字符串指向您安装应用程序的同一文件夹,但您需要有写入权限,并且任何类型的活动数据库都需要对其文件的写入权限。所以这不是数据库文件的最佳位置。

但是,您可以使用这样的代码更改 DataDirectory 指向的位置。(当然放在任何尝试与数据库交谈之前)

 ' Prepare a string pointing to a subfolder of the common application data 
 Dim appFolder = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
 Dim dbFolder = Path.Combine(appFolder, "MyAppFolder")

 ' Create the folder if it doesn't exist.
 Directory.CreateDirectory(dbFolder)

 ' Change the substitution string kept by DataDirectory
 AppDomain.CurrentDomain.SetData("DataDirectory", dbFolder)

现在,您的数据库的目标目录将是 C:\programdata\myappfolder,您的应用程序具有读/写权限

有关数据目录的更多信息

DataDirectory 记录在哪里
DataDirectory 在哪里

于 2013-08-01T14:40:59.983 回答
1

是的,你应该使用:

con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "MP1.accdb"

并将数据库文件与启动 .exe 放在同一文件夹中...

于 2013-08-01T14:43:37.220 回答
0

我使用这个简单的代码,我可以将文件夹移动到任何地方

conString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\myDatabase.mdb"

确保将访问文件保存在 bin 文件夹中,以使此连接字符串正常工作。

于 2016-08-27T15:19:47.677 回答