Как работать с двумя базами данных без перекомпиляции проекта

Тема в разделе ".NET", создана пользователем NikSoft, 28 май 2006.

Статус темы:
Закрыта.
  1. NikSoft

    NikSoft Гость

    Покажем, как можно работать с двумя базами данных, не изменяя исходных текстов проекта, а изменяя только его файл конфигурации. Задачу решает следующий MultiConnection класс.
    Код (Text):
    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);
    }
    }
    }
    Если имя проекта “BoolSwitch”, то в файл конфигурации “BoolSwitch.exe.config” необходимо добавить следующие строки
    Код (Text):
    <system.diagnostics>
    <switches>
    <add name="Provider" value="1"/>
    </switches>
    </system.diagnostics>
    Меняя в файле конфигурации значение свойства "Provider" на 0 или 1, функция GetConnectionString будет обеспечивать переключение к нужной базе данных без перекомпиляции проекта.
    Интерфейс IDbConnection является базовым для OleDbConnection и SqlConnection классов. Заметим,что MultiConnection класс по сути реализует Factory паттерн.
     
  2. karlito

    karlito Гость

    Чушь.

    Зачем такие извращения? Если можно просто в конфиге прописать строчку подключения к базе данных. И менять её в конфигурационном файле.

    Если это ASP.NET, то при изменении конфиг файла, ASP.NET перегрузит домен приложения.
    Если это WinForm, то придётся перегрузить приложение.

    И никакой компиляции. :D

    СЛОЖНО МОЖЕТ СДЕЛАТЬ ЛЮБОЙ, А ПРОСТО - ПРОФЕССИОНАЛ!!!
     
  3. NikSoft

    NikSoft Гость

    А где будет менять логику работы с двумя различными базами данных(MS Aссess, MS SQL Server) без перекомпиляции проекта профессионал karlito? Тоже в конфигурационном файле?
    Это же надо догадаться, написать такую чушь!!!
     
  4. karlito

    karlito Гость

    Microsoft.ApplicationBlock.Data - если хочешь абстрагироваться от определённого провадера. И будешь выбирать провайдер в конфиг файле.

    Ты в своём примере используешь коннекшены, но на этом работа с базой данных не ограничивается. а как же DBCommand, DBParameters? Factory Method - здесь не поможет. Минимум фабрику классов необходимо применять.

    Если уж твой пример в порядок привести, то возвращать необходимо System.Data.Common.DbProviderFactory, который в кое в чём сможет решить твою проблему.

    Совет. Не сохраняй в коде строки подключения к бд. потом обожжошься. :unsure:

    Пример на помойку. :)
     
  5. NikSoft

    NikSoft Гость

    Причем здесь Factory паттерн?
    Этот пример не призван показать как работать с Factory паттерн или с базами данных.
    Этот пример показывает как работать с BooleanSwitch классом и одной из возможных областей его применения.
    Так что место помоечных комментариев профессионала karlito только на помойке
     
  6. karlito

    karlito Гость

    Чуть-чуть по политкорректней.
    Работа с базами данных это не та область, где нужно применять BooleanSwith.

    СЛОЖНО МОЖЕТ СДЕЛАТЬ ЛЮБОЙ, А ПРОСТО - ПРОФЕССИОНАЛ!!! Это тебе совет. Не усложняй.
     
  7. NikSoft

    NikSoft Гость

    Звучит не убедительно. Считаю, что приведенный приведенный пример вполне корректен и может использоваться на практике.
    Не надо делать личностных оценок и вешать персональные ярлыки. Не надо делить программистов на профессионалов и непрофессионалов. Ознакомься с правилами этикета на форуме.
     
  8. Dr.Gigabit

    Dr.Gigabit Гость

    А между прочем karlito во многом прав :) Замена 0 на 1 выглядит не очень убедительно.
    Что значит менять логику работы? Интерфейсы то одинаковые.
    Если в зависимости от базы данных меняется интерфейс работы с ней -- что-то у вас не то с дзайном,имхо.

    Рекомендую посмотреть, как это решается, к примеру вот здесь http://www.bltoolkit.net/
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей