连接字符串中DB的相对路径

时间:2013-09-20 07:22:59

标签: c# database string connection

我正在用C#开发一个db应用程序,我当前的连接字符串是

@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Shop.accdb;Persist Security Info=False;"

如何修改它以使db位于项目的文件夹中,而不是D?我的意思是我打算将项目发送给朋友,所以我不想包括完整路径,只包括项目的文件夹。

提前谢谢!

1 个答案:

答案 0 :(得分:3)

将您的连接字符串更改为

 @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Shop.accdb;" + 
  "Persist Security Info=False;";

|DataDirectory|是一个替换字符串(对于WinForms应用程序)将由Framework设置为当前目录的值。
在代码中(在任何数据访问之前),可以使用

将其更改为您喜欢的内容
 AppDomain.CurrentDomain.SetData("DataDirectory", @"D:\temp");

See this thread on MSDN

但是,请记住,如果您因为权限问题而改变该值的原因,那么将您的数据库与程序(C:\ program files)存储在同一文件夹中会有同样的问题,因为该文件夹是也严厉写限制。最好的方法是将您的数据库存储在C:\PROGRAMDATA\<myAppDatabaseFolder>

的子文件夹中
string myFolder = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
myFolder = Path.Combine(myFolder, "myAppDatabaseFolder);
AppDomain.CurrentDomain.SetData("DataDirectory", myFolder);

(我想你的设置程序会创建MyAppDatabaseFolder,所以我没有检查文件夹是否存在)