我想查看特定文件夹中的数据库文件,我之前做的是这样的:
"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;";
但是,当我将其更改为第二个时,错误消息如下所示:
我的问题是:有没有办法删除bin
位置路径,但仍然像第二个那样查找数据库的文件?
谢谢
答案 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
直接轻松。