0

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

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

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

先感谢您!

4

1 回答 1

3

将连接字符串更改为

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

|DataDirectory|是一个替换字符串(对于 WinForms 应用程序)将由框架设置为当前目录的值。
在代码中(在任何数据访问之前),它可以更改为您喜欢的内容

 AppDomain.CurrentDomain.SetData("DataDirectory", @"D:\temp");

请参阅 MSDN 上的此线程

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

string myFolder = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
myFolder = Path.Combine(myFolder, "myAppDatabaseFolder);
AppDomain.CurrentDomain.SetData("DataDirectory", myFolder);

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

于 2013-09-20T07:27:06.877 回答