我正在使用bin / debug文件夹中的access db,并在像
这样的代码中使用它 private static string **_strCon** = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
***Application.ExecutablePath.ToString().Substring(0,
Application.ExecutablePath.ToString().LastIndexOf('\\')) +
"\\Reporting.accdb***;Jet
OLEDB:Database Password=abc;";
对于报告,我使用DataSet,它使用app.config中的connectionstring,如
<add name="GarzaReportingSystem.Properties.Settings.ReportingConnectionString"
connectionString="Provider=Microsoft.ACE.OLEDB.12.0;***Data Source=|DataDirectory|\bin
\Debug\Reporting.accdb***;Persist Security Info=True;Jet OLEDB:Database Password=abc" providerName="System.Data.OleDb"/>
问题:
当我进行项目设置而不是安装应用程序时。我需要将Reporting.accdb放在根文件夹中,以便我的表单使用_strCon工作。换句话说,我的可执行路径成为根文件夹
但对于DataSet
我需要将access db放在bin / debug文件夹中,以便在安装应用程序时能够正常工作。
如何解决此问题,以便像root一样解析相同路径的文件夹DataBase,并且都使用该路径。
答案 0 :(得分:2)
你不应该对任何bin / debug进行硬编码,因为在部署中你将从任何其他安装的路径运行应用程序,以获取exe的目录路径:
var executingFolder = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
然后像:
var dbPath = System.IO.Path.Combine(executingFolder, "data\MyDbName.mdb");
如果将项目中的MyDbName.mdb
文件包含在名为data的文件夹中,则可以先在Visual Studio中设置,然后在安装程序中设置此类data
子文件夹将始终部署在bin / debug下在调试或最终的应用程序安装文件夹中。
答案 1 :(得分:2)
您不应在安装目录中部署数据库:C:\Program Files
中的写访问权限和子目录需要管理员权限。您最好将其复制到ProgramData
下的目录中。
更好的是,如果您希望不同的Windows用户拥有自己的数据库副本:当您的程序启动时,它应该在当前用户的AppData
文件夹中查找数据库的副本。如果没有可用的副本,您的程序应首先将文件从\Program Files\blah\
复制到用户的AppData
。
Answers to this question显示了如何检索AppData路径。