2013-08-01 19 views
1

我在我的项目中使用了Microsoft Access数据库;保存到bin文件夹。当文件路径改变时,我能做些什么来确保与数据库的连接?当我的项目中,源文件路径更改时,如何保持数据库连接?

进口System.Data.OleDb 公共类Form3

昏暗CON作为新OleDb.OleDbConnection

昏暗哒作为OleDbDataAdapter的

昏暗DS作为新的数据集

昏暗STR1 As String

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

我相信你试图说你想让你的数据库连接字符串是动态的。所以当你移动你的应用程序文件夹时,项目可以找到你的数据库。那是对的吗? –

+0

您是否试过'。\ MP1.accdb'的数据源?根据http://stackoverflow.com/questions/5001980/app-config-connection-string-relative-path,相对路径是有效的。 – 2013-08-01 14:40:52

回答

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目录

Where is DataDirectory
DataDirectory where is documented

1

是啊,你应该使用:

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

而且在你启动.exe文件相同的文件夹数据库文件...

+0

以上工作不正常答案工作正常。 –

0

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

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

确保保存bin文件夹中的访问文件为此连接字符串起作用。

相关问题