Как указать относительный путь к базе данных c#

Рейтинг: 1Ответов: 2Опубликовано: 08.01.2023

Делаю приложение 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");

Ответы

▲ 1

Вы можете использовать относительный путь, указывая путь относительно текущей директории. Обратите внимание, что в этом случае путь должен начинаться с двух точек (..).

Пример:

@"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"

Обратите внимание, что этот подход может быть непереносимым и не стабильным, так как он зависит от структуры каталогов на компьютере, на котором запущено приложение.

▲ 1

Может быть, такой вариант для получения пути Application.StartupPath; Или второй вариант Environment.CurrentDirectory; Можно также использовать ResourceManager или ConfigurationManager и хранить пути, если не ошибаюсь, в файлах ресурсов. Или в app.config соответственно, (но это общий случай) например:

<appSettings>
<add key="FileStorageRoot" value="{CommonApplicationData}\Storage" />