N
NikSoft
Покажем, как можно работать с двумя базами данных, не изменяя исходных текстов проекта, а изменяя только его файл конфигурации. Задачу решает следующий MultiConnection класс.
Если имя проекта “BoolSwitch”, то в файл конфигурации “BoolSwitch.exe.config” необходимо добавить следующие строки
Меняя в файле конфигурации значение свойства "Provider" на 0 или 1, функция GetConnectionString будет обеспечивать переключение к нужной базе данных без перекомпиляции проекта.
Интерфейс IDbConnection является базовым для OleDbConnection и SqlConnection классов. Заметим,что MultiConnection класс по сути реализует Factory паттерн.
Код:
class MultiConnection
{
private static BooleanSwitch _switch = new BooleanSwitch("Provider", "Supports switching");
private static string GetConnectionString()
{
if (_switch.Enabled) // > 0
{
return @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\WINDOWS\SHELLNEW\ACCESS9.MDB";
}
else
{
return @"Data Source=.\SQLEXPRESS;AttachDbFilename='D:\Program Files\DVDCollectionDatabase.mdf';
Integrated Security=True;Connect Timeout=30;User Instance=True";
}
}
private static IDbConnection GetConnection()
{
if (_switch.Enabled)
{
return new OleDbConnection(GetConnectionString());
}
else
{
return new SqlConnection(GetConnectionString());
}
}
public static void Test()
{
IDbConnection c = GetConnection();
try
{
Console.WriteLine(c.ConnectionString);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message + ex.StackTrace);
}
}
}
Код:
<system.diagnostics>
<switches>
<add name="Provider" value="1"/>
</switches>
</system.diagnostics>
Интерфейс IDbConnection является базовым для OleDbConnection и SqlConnection классов. Заметим,что MultiConnection класс по сути реализует Factory паттерн.