Я использую базы данных SQL Express как часть проекта модульного теста в c #. Мои базы данных находятся здесь:
./Databases/MyUnitTestDB.mdf
Я хотел бы использовать относительный путь или переменную в app.config
вместо того, чтобы моя строка подключения была определена как:
AttachDbFilename=C:\blah\blah\blah\yea\yea\yea\MyApplication\Databases\MyUnitTestDB.mdf
Я видел использование | DataDirectory |
но правильно ли я считаю, что это применимо только к веб-приложениям?
Я хочу контролировать это в файле конфигурации приложения, как в производстве, приложение использует размещенную базу данных sql.
Всем спасибо, я использовал комбинацию ваших ответов.
В моем файле 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 ...
}
Да, | 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.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
У меня здесь нет Visual Studio, но как насчет:
using System.IO;
using System.Windows.Forms;
string appPath = Path.GetDirectoryName(Application.ExecutablePath);
AttachDBFilme = appPath + "\\MyUnitTestDB.mdf"