Каковы хорошие способы достижения этого агностицизма БД без фактического кодирования двух DAL? Я слышал, что для этого подходит Блок приложений доступа к данным.MySQL и SQL Server для того же приложения
ответ
Вы также можете посмотреть различные библиотеки ORM, такие как NHibernate. Когда вы нацеливаете несколько баз данных, лучше всего искать инструмент, который может создавать вашу базу данных из файлов конфигурации или из кода. Это не позволит вам создавать идентичные базы данных в MySQL и MSSql.
Используйте библиотеку абстракции ADODB для MySQL. Собственные вызовы библиотеки MySQL довольно уродливы и примитивны, поэтому вы, вероятно, захотите что-то более высокого уровня в любом случае.
Один из вариантов заключается в кодировании с использованием классов IDbConnection, IDbCommand и др. Из пространства имен System.Data, а не специальных классов SQL Server (SqlConnection, SqlCommand) из System.Data.SqlClient или соответствующих классов MySQL. Вам все равно нужно создать экземпляр класса подключения для конкретной базы данных, которую вы используете, но оттуда вы можете просто использовать общие интерфейсы.
http://social.msdn.microsoft.com/Forums/en-US/csharplanguage/thread/1175d7ea-f5b4-442f-9155-08bf8b2ba06c/ и http://www.15seconds.com/issue/040127.htm есть примерный код.
Ну, как указывали другие, постарайтесь отвлечь себя от реальных занятий. Это может включать в себя использование интерфейсов, как указывает AHd54, или что-то подобное.
Это поможет вам только на полпути.
SQL, вам нужно выполнить будет иметь различие, а также, такие вещи, как следующие:
- синтаксического Имя параметра
- Позиционных параметры против названных параметров
- имен функций
- Некоторых синтаксических различий , например, как указать только дать мне первые N строк
Если вам нужно покрыть все эти вещи, и вы не можете или не будете использовать ORM (они редко получают вас на 100% там), тогда один из способов - создать свои собственные классы, которые абстрагируют не только фактические классы, но также выполняет некоторый тип перезаписи SQL для обработки различий кода.
Я перешел на путь перезаписи, поэтому, если вам нужны указатели на это, добавьте комментарий к этому ответу с вопросами, и я соответственно обновлю ответ.
Используйте инструмент построения диаграмм ERD, чтобы построить чисто логический дизайн, а затем сгенерировать DDL для каждого из ваших вариантов.
Вы можете проверить DBDesigner ...
рамки ОРМ поможет вам достичь RDBMS агностик инфраструктуры, но вы все равно придется держать индивидуальный DAL, если вы будете работать с ОДС и хранимые процедуры. Как следствие, вы, вероятно, не будете использовать триггеры, T-SQL, обновляющие представления и CLR-код C#. Вы бы просто отображали объекты и объекты.
ADO.NET прекрасно справится с большинством проектов.Если вам нужно переключаться между MSSQL или MySQL, можно добиться от поставщика агностик доступа очень просто, как это:
private static DbProviderFactory _provider = DbProviderFactories.GetFactory(WebConfigurationManager.ConnectionStrings["database"].ProviderName);
private static string _connectionString = WebConfigurationManager.ConnectionStrings["database"].ConnectionString;
public static DbParameter CreateParameter(string name, object value)
{
DbParameter parameter = _provider.CreateParameter();
parameter.ParameterName = name;
parameter.Value = value;
return parameter;
}
public static DataTable SelectAsTable(string query, DbParameter[] parameters)
{
using (DbConnection connection = _provider.CreateConnection())
{
connection.ConnectionString = _connectionString;
using (DbDataAdapter adapter = _provider.CreateDataAdapter())
{
adapter.SelectCommand = connection.CreateCommand();
adapter.SelectCommand.Parameters.AddRange(parameters);
adapter.SelectCommand.CommandText = query;
DataTable table = new DataTable();
adapter.Fill(table);
connection.Close();
return table;
}
}
}
Лучший способ сделать это (и в основном любой слой ACCESS базы данных, в самом деле в целом) использовать инструмент O/RM. Я предпочитаю ActiveRecord, который является оберткой вокруг nHibernate ...
Вот пример исходного кода для чего-то, использующего AR; code to operator object in Stacked
.net Provider model разработан специально для решения этой проблемы. Предоставляя класс «поставщик», который обрабатывает все ваши взаимодействия с db и сходит с хорошо продуманного базового класса, вы можете с минимальными усилиями обменивать back-end поставщиков (для sql, mySql (blech), xml или любого другого).
Также, по моему опыту, код, созданный ORM, не может конкурировать с написанным компетентным разработчиком и часто создает больше проблем с обслуживанием, которые он решает. ORM - еще один уровень абстракции, способствующий более медленному, более ресурсоемкому коду, который необходим только тем, кто не знаком с вставками SQL.
- 1. Хостинг Sharepoint и SQL Server с того же сервера
- 2. SQL Server: Multiple отношения для того же поля
- 3. SQL Server и MySQL Syncing
- 4. терминологии MySQL и SQL Server
- 5. Две версии одного и того же приложения
- 6. OOPHP: классы для SQL Server и MySQL
- 7. Альтернатива SQL Server для простого веб-приложения
- 8. Различные сборки для того же приложения
- 9. 2 backgroundtasks для того же приложения ios
- 10. Совместимость SQL-Server и MySQL?
- 11. Две версии одного и того же приложения
- 12. Использование SQLDependency/SqlNotificationRequest для того, чтобы несколько экземпляров одного и того же приложения получали одни и те же уведомления?
- 13. MySQL индексы для SQL SErver
- 14. MySQL Workbench для SQL Server?
- 15. SQL Server Dump для MySQL
- 16. SQL Server Как найти того же человека в
- 17. MySql Различные пути выполнения для одного и того же запроса
- 18. MySQL или SQL Server лучше для корпоративного приложения?
- 19. Многопользовательский сервер SQL Server с того же компьютера?
- 20. Проверка того же столбца в SQL Server insert
- 21. Запуск нескольких серверов рельсов для одного и того же приложения
- 22. 2 настроек культуры для одного и того же веб-приложения?
- 23. Android: публикация и подписывание того же приложения для многих клиентов
- 24. Объединение нескольких push-сообщений для одного и того же приложения
- 25. Различные значки и названия для того же iPad-приложения
- 26. Использование того же названия приложения для телефона и планшета
- 27. Несколько приложений heroku для одного и того же локального приложения
- 28. Используйте UIAlertView и UIAlertController для того же приложения
- 29. Таблицы SQL того же столбца для соединения
- 30. SQL Server 2008 - Заполнение того же значения на основе имени
бонусные баллы, если он также обрабатывает оракул. – 2008-11-06 16:13:23
AFAIK он обрабатывает Oracle прямо из коробки. Добавление mySQL прост, даже без предустановленного провайдера, найденного в CodePlex. – ProfK 2008-11-07 13:30:27