2011-01-07 3 views
0

Я работаю над приложением, которое нужно будет связывать со многими различными приложениями, работающими на разных платформах баз данных. Я буду знать схему таблицы перед запуском, но я не буду знать платформу базы данных (MS SQL 200X, Oracle 9i, 10g и т. Д., MySQL 4.0.1, 5.x и т. Д., Sybase и т. Д.) До времени выполнения.Получение данных из нескольких баз данных

Насколько я понимаю, каждая из этих систем имеет несколько иной диалект. Нужно ли использовать nhibernate для обработки различий при подключении к этим системам или я могу использовать ADO.NET и передавать необработанные строки SQL (выберите * из таблицы)?

ответ

1

SQL должен быть стандартизирован для всех dbs, но они не все используют один и тот же синтаксис, поэтому он действительно зависит от того, к какому SQL вы звоните. Например, SQL Server использует TOP, в то время как Oracle использует rownum. Даже если они все DDL, некоторые синтаксические различия между СУБД могут быть проблемой.

Если выбрать * из таблицы - все, что вам нужно, тогда не должно быть проблем, кроме ударов с производительностью.

2

Если вам нужны только инструкции ANSI SQL, которые должны быть реализованы всеми базами данных, тогда да, вы можете просто использовать ADO.NET.

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

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