Существует ли библиотека подключений к базе данных, которая будет обрабатывать различные типы подключений и операций с БД (например, OleDb, SQLite, ADO и т. Д.)? - PullRequest
1 голос
/ 20 мая 2011

У меня есть база данных Access, над которой мы работаем, но нам нужно преобразовать ее в SQLite и отправить ее другому клиенту, сохраняя при этом код, работающий для базы данных Access, а также для всех остальных, использующих нашу программу.

Минимум, что мне нужно, - это то, что может обрабатывать соединения и операции с базами данных Access и SQLite.Есть ли что-то подобное вообще существует?И я знаю, что данные и запросы различны для этих баз данных, я могу справиться с этим отдельно.

Есть ли другие предложения о том, как обрабатывать две отдельные базы данных и эта ситуация?

РЕДАКТИРОВАТЬ:

Что мне действительно нужно, это то, где я могу сделать это:

public AnyDBConnection GetConnection(string connectionString)
{
    //I guess somehow this needs to know the DB type (OleDB, SQLite, etc.)
    return new AnyDBConnection(connectionString);
}

Ответы [ 4 ]

2 голосов
/ 20 мая 2011

Для решения более низкого уровня все классы ADO.NET имеют общие базовые классы и интерфейсы, такие как DbConnection, IDbConnection и т. Д. Интерфейсы находятся в пространстве имен System.Data, тогда как абстрактные базовые классыв System.Data.Common.

Большинство библиотек ADO.NET 3-й части наследуют / реализуют их, так что все специфичные для базы данных соединения и команды и т. д. могут обрабатываться в этих общих интерфейсах.У каждого из них также должен быть класс, производный от DbProviderFactory для централизованного интерфейса для создания различных конкретных объектов.

У вас может быть где-нибудь метод CreateFactory, который ищет в конфигурации, какая база данных используется иСтрока подключения, а затем создает соответствующий объект фабрики для вас.

0 голосов
/ 20 мая 2011

Если у вас есть поставщики ADO.NET 2.0 для всех ваших поддерживаемых баз данных и строки подключения, определенные в разделе вашего файла конфигурации, вы можете сделать что-то вроде:

ConnectionStringSettings c = ConfigurationManager.ConnectionStrings[name];
DbProviderFactory factory = DbProviderFactories.GetFactory(c.ProviderName);
using(IDbConection connection = factory.CreateConnection())
{
    connection.ConnectionString = c.ConnectionString;
    ... etc
}

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

0 голосов
/ 20 мая 2011

Я предлагаю вам использовать постоянное невежество подход из Домен-управляемый дизайн .Цель DDD - развязать систему: модель ничего не знает о хранилище.В DDD вы будете адаптировать шаблон репозитория или лучше Общий шаблон репозитория .Этот шаблон обычно использует ORM внутри (это на самом деле довольно легко добавить).Таким образом, вы сможете сохранять / запрашивать данные из любого хранилища.

Для суммирования

  • Использовать DDD
  • Реализация универсального репозитория для невежественности постоянства
  • Получение ORM, например, NHibernate или Entity Framework
  • Добавление инверсии управления для выбора нужного хранилища
0 голосов
/ 20 мая 2011

Обычно люди используют ORM для таких сценариев.LLBLGgen коммерческий, но я думаю, что он самый продвинутый, если вам нужна поддержка многих баз данных.Кроме того, вы можете использовать Enterprise Library:

 public static Database GetDataBaseInstance()
    {
        try
        {
            //Create an object of the Database class and get the database connection info
            Database db = DatabaseFactory.CreateDatabase(SqlConnectionString);
            return db;
        }
        catch
        {
            throw;
        }
    }  

Кроме того, взгляните на эту статью.и использовать его с вашим кодом.и убедитесь, что ваш код совместим со всеми типами баз данных

...