По умолчанию ваша строка подключения не может использовать |DataDirectory|
, которая является своего рода переменной, которая раскрывается до полного пути. Как указано здесь :
Путь, начинающийся с оператора DataDirectory
или ~
, не может найти физический путь вне ветви оператора DataDirectory
и ~
.
Если база данных будет на C:\Users\UserName\AppData\Roaming\ApplicationName\db_alarme.mdf
, вы можете вручную установить строку подключения следующим образом:
<connectionStrings>
<add
name="GTC_Frater_Razes.Properties.Settings.db_alarmeConnectionString"
connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\UserName\AppData\Roaming\ApplicationName\db_alarme.mdf;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
Поскольку очевидно, что вы не можете использовать переменные окружения - %APPDATA%
- вам придется знать каталог развертывания заранее.
В качестве альтернативы, вы можете установить значение DataDirectory
, используя AppDomain.SetData метод , прежде чем вы фактически откроете соединение:
AppDomain.CurrentDomain.SetData("DataDirectory", @"C:\Users\UserName\AppData\Roaming\ApplicationName");
Вы можете получить местоположение AppData\Roaming
, как показано здесь ; и перейдите в комбинированном пути к SetData
.
var dataDirectory = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"ApplicationName"
);
AppDomain.CurrentDomain.SetData("DataDirectory", dataDirectory);