Как получить корневой путь для winforms - PullRequest
1 голос
/ 14 сентября 2011

Я использую базу данных доступа, которая находится в папке bin / debug, и использую ее в коде, подобном

    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, например,

    <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 в папку bin / debug, чтобы она работала, когда приложение установлено.

Как решить эту проблему, чтобы обе стороны разрешали один и тот же путь, так как root имеет папку DataBase, и оба использовали этот путь.

Ответы [ 2 ]

2 голосов
/ 14 сентября 2011

Не следует развертывать БД в каталоге установки: доступ для записи в C:\Program Files и подкаталоги требует прав администратора.Вам лучше скопировать его в свой каталог под ProgramData.

Еще лучше, если вы хотите, чтобы разные пользователи Windows имели свою собственную копию БД: Когда ваша программа запускается, она должна искать копию БД в папке AppData текущего пользователя.Если нет доступной копии, ваша программа должна сначала скопировать файл с \Program Files\blah\ на пользователя AppData.

Ответы на этот вопрос показывают, как получить путь к AppData.

2 голосов
/ 14 сентября 2011

Вы не должны жестко кодировать любой bin / debug, потому что при развертывании у вас будет приложение, запущенное с любого другого установленного пути, чтобы получить путь к каталогу исполняемого файла, сделайте следующее:

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 в debug или в папке окончательной установки приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...