Как указать относительный путь к базе данных c#
Делаю приложение windows forms с базой данных Microsoft SQL Server и взаимодействия с ней для универа. Необходимо скинуть папку с проектом преподавателю, но в localdb указывается абсолютный путь на мой локальный диск, а нужно чтоб указывал относительный путь на папку проекта, чтоб проект был переносимым. Пробовал DataDirectory, не помогло. Ругается, что у AttachDbFilename неверное значение. Не знаю, что делать с этой строкой.
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\slouc\OneDrive\Desktop\project\CountCal\FoodDatabase.mdf;Integrated Security=True;Connect Timeout=30");
Ответы (2 шт):
Вы можете использовать относительный путь, указывая путь относительно текущей директории. Обратите внимание, что в этом случае путь должен начинаться с двух точек (..).
Пример:
@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=..\FoodDatabase.mdf;Integrated Security=True;Connect Timeout=30"
Это означает, что файл базы данных находится в одной директории выше текущей директории.
Если вы хотите использовать относительный путь, не зависящий от текущей директории, вы можете использовать ключевое слово DataDirectory. Это специальное значение, которое преобразуется в путь к папке App_Data, которая расположена в корневой директории приложения.
Пример:
@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\FoodDatabase.mdf;Integrated Security=True;Connect Timeout=30"
Чтобы использовать этот подход, вам нужно будет поместить файл базы данных в папку App_Data вашего проекта.
Если вы хотите использовать относительный путь, не зависящий от текущей директории и от корневой директории приложения, вы можете указать путь, начинающийся с трех точек (...), что означает, что путь относителен к каталогу, находящемуся на уровень выше текущей директории.
Пример:
@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=...\FoodDatabase.mdf;Integrated Security=True;Connect Timeout=30"
Обратите внимание, что этот подход может быть непереносимым и не стабильным, так как он зависит от структуры каталогов на компьютере, на котором запущено приложение.
Может быть, такой вариант для получения пути Application.StartupPath; Или второй вариант Environment.CurrentDirectory; Можно также использовать ResourceManager или ConfigurationManager и хранить пути, если не ошибаюсь, в файлах ресурсов. Или в app.config соответственно, (но это общий случай) например:
<appSettings>
<add key="FileStorageRoot" value="{CommonApplicationData}\Storage" />