我正在用C#开发一个db应用程序,我当前的连接字符串是
@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Shop.accdb;Persist Security Info=False;"
如何修改它以使db位于项目的文件夹中,而不是D?我的意思是我打算将项目发送给朋友,所以我不想包括完整路径,只包括项目的文件夹。
提前谢谢!
答案 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");
但是,请记住,如果您因为权限问题而改变该值的原因,那么将您的数据库与程序(C:\ program files)存储在同一文件夹中会有同样的问题,因为该文件夹是也严厉写限制。最好的方法是将您的数据库存储在C:\PROGRAMDATA\<myAppDatabaseFolder>
string myFolder = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
myFolder = Path.Combine(myFolder, "myAppDatabaseFolder);
AppDomain.CurrentDomain.SetData("DataDirectory", myFolder);
(我想你的设置程序会创建MyAppDatabaseFolder
,所以我没有检查文件夹是否存在)