Строка подключения SQL Express: расположение файла mdf относительно расположения приложения

Я использую базы данных SQL Express как часть проекта модульного теста в c #. Мои базы данных находятся здесь:

./Databases/MyUnitTestDB.mdf

Я хотел бы использовать относительный путь или переменную в app.config вместо того, чтобы моя строка подключения была определена как:

AttachDbFilename=C:\blah\blah\blah\yea\yea\yea\MyApplication\Databases\MyUnitTestDB.mdf 

Я видел использование | DataDirectory | но правильно ли я считаю, что это применимо только к веб-приложениям?

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

44
задан Jeroen 14 May 2015 в 14:35
поделиться

3 ответа

Всем спасибо, я использовал комбинацию ваших ответов.

В моем файле app.config моя строка подключения определена следующим образом

<add name="MyConnectionString"
    connectionString="Server=.\SQLExpress;AttachDbFilename=|DataDirectory|\MyDatabase.mdf;Database=MyDatabaseForTesting;Trusted_Connection=Yes;" />

В моем классе модульного тестирования я установил свойство DataDirectory, используя следующее

[TestInitialize]
public void TestInitialize()
{
    AppDomain.CurrentDomain.SetData("DataDirectory", System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Databases"));

    // rest of initialize implementation ...
}
64
ответ дан 26 November 2019 в 22:00
поделиться

Да, | DataDirectory | Веб-приложение для выбора каталога App_Data веб-приложения.

В не веб-приложении, в зависимости от .NET Framework, его можно использовать, а также изменять с помощью AppDomain.SetData

Но у вас есть две другие возможности для создания соединения:

1.- Используйте относительный путь:

String con ="... AttachDbFilename=Databases\MyUnitTestDB.mdf ... ";

2.- получить путь к приложению и добавить в строку .
В приложении C # Windows вы можете использовать Application.StartupPath

 String con= " ... AttachDbFilename=" + Application.StartupPath + "\Databases\MyUnitTestDB.mdf ... ";

В зависимости от типа приложения или режима запуска у вас есть разные свойства. Пример:

  • Application.StartupPath - начальный путь exe-приложения, которое запускает приложение.
  • Application.ExecutablePath - начальный путь имя исполняемого приложения, которое определяет приложение. Но чтобы использовать Application, вам нужно включить System.Windows.Forms, который, например, не включен в консольные приложения.

  • System.IO.Path.GetDirectoryName ( System.Reflection.Assembly.GetExecutingAssembly (). GetName (). CodeBase ) - получает путь из текущей сборки «dll, exe, ...». Не зависит от типа приложения, изменений пути, .. • Всегда возвращайте каталог, когда находится Assemby.

  • Environment.CurrentDirectory - текущий каталог. Это можно изменить, например, если вы переходите по папкам.

Подробнее о различных параметрах строки подключения можно узнать здесь. http://www.connectionstrings.com/sql-server-2005

12
ответ дан 26 November 2019 в 22:00
поделиться

У меня здесь нет Visual Studio, но как насчет:

using System.IO;
using System.Windows.Forms;

string appPath = Path.GetDirectoryName(Application.ExecutablePath);
AttachDBFilme = appPath + "\\MyUnitTestDB.mdf"
2
ответ дан 26 November 2019 в 22:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: