C # Абстракция базы данных для Microsoft SQL Server, Oracle, MySQL и DB2 - PullRequest
4 голосов
/ 27 мая 2009

Мне нужен пример исходного кода C #, который абстрагирует базы данных (легко переключаться с одной базы данных на другую с минимальной модификацией кода). Знаете ли вы несколько примеров сайтов или учебных пособий с хорошим качеством?

Конкретные целевые базы данных:
1. Microsoft SQL Server
2. Oracle
3. MySQL
3. DB2

Мои конкретные требования и возникшие проблемы следующие:
1. Абстракция классов, используемых в доступе к данным.
2. Использование параметров при вызове хранимых процедур. В Microsoft SQL Server @ нормально. Другие базы данных не поддерживают @.
3. Преобразование синтаксиса запроса из одной базы данных в другую. Есть ли у нас какой-то «общий» запрос, а затем создаются классы, которые генерируют запросы к целевой базе данных?
4. Строго типизированные наборы данных в слое доступа к данным. По опыту я помню, что мастер TableAdapter и Query в Visual Studio не сработал для MySQL.

Заранее благодарим за Ваш опыт и время.

Ответы [ 3 ]

6 голосов
/ 27 мая 2009

Посмотрите на

и другие ORM

3 голосов
/ 27 мая 2009

Хотя я настоятельно рекомендую NHibernate , вы также можете посмотреть на блок приложения Data Access Корпоративная библиотека Microsoft .

Конечно, любой ORM должен обеспечивать необходимую вам функциональность.

1 голос
/ 08 сентября 2009

Лучший способ достичь этого - использовать интерфейсы, предоставляемые поставщиками баз данных; они почти параллельны по функциональности. Создайте статический фабричный класс для создания интерфейсов для адаптеров команд, адаптеров данных и соединений на основе настроенной базы данных. Например:

    public static IDbDataAdapter GetDataAdapter (Database db)
    {
        switch (db)
        {
            default:
            case "MsSql":
                return new SqlDataAdapter ();
            case "MySql"
                return new MySqlDataAdapter ();
        }
    }

    public static IDbCommand GetCommand (Database db)
    {
        switch (db)
        {
            default:
            case "MsSql":
                return new SqlCommand ();
            case "MySql"
                return new MySqlCommand ();
        }
    }

Ваш клиентский код не будет знать разницу, хотя он должен будет передать строку конфигурации. Используйте документы VS для изучения интерфейсов, предоставляемых каждым из объектов, которые вы обычно используете, и придерживайтесь их, и это будет довольно просто - хотя вам, возможно, придется взломать пару вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...