用于在特定文件夹中查找特定文件的自定义路径c#

时间:2014-10-29 11:39:27

标签: c# database winforms

我想查看特定文件夹中的数据库文件,我之前做的是这样的:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:/Fuhans's Folder/Project/SIA - Point of Sales/SIA - Point of Sales/Assets/Database/db1.accdb; Persist Security Info=False;";

我认为有一种查找数据库文件的快捷方式,而不是编写特定的文件夹吗?

我想出了:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=../Assets/Database/db1.accdb; Persist Security Info=False;";

但是,当我将其更改为第二个时,错误消息如下所示:

enter image description here

我的问题是:有没有办法删除bin位置路径,但仍然像第二个那样查找数据库的文件?

谢谢

2 个答案:

答案 0 :(得分:2)

在相对路径前添加另一个../

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=../../Assets/Database/db1.accdb; Persist Security Info=False;";

答案 1 :(得分:2)

您应该避免在连接字符串中使用绝对路径,并且在部署时,相对路径(..很容易被破坏)。

In ASP.NET to use a relative路径您可以使用|DataDirectory|db1.accdb,在WinForms中它不可用,但常量是使用Application Domain属性解析的。只需在main()方法中设置基础浴:

AppDomain.Current.SetData("RootFolder",
    @"D:\Fuhans's Folder\Project\SIA - Point of Sales\SIA - Point of Sales");

你的连接字符串:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|RootFolder|Assets/Database/db1.accdb;

为什么你应该使用绝对路径而不是相对路径?因为它不会受到工作目录的影响而且更容易添加多个常量:

AppDomain.Current.SetData("Bin",
    Application.StartupPath);
AppDomain.Current.SetData("AppData",
    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));

第二个选项在UAC(程序的文件夹可能根本不可写)方面效果会更好。另请注意,路径仍然是可导航的,因为它会被规范化。

假设您在开发环境中编译bin / debug:

Data Source=|Bin|../../Assets/Database/db1.accdb

假设您的应用程序将被部署并且它将在数据文件夹(而不是程序文件夹)上工作:

Data Source=|AppData|Assets/Database/db1.accdb

直接轻松。