2011-01-07 6 views
0

Je travaille sur une application qui devra communiquer avec de nombreuses applications différentes s'exécutant sur différentes plates-formes de base de données. Je connaîtrai le schéma de la table avant l'exécution mais je ne connaîtrai pas la plate-forme de base de données (MS SQL 200X, Oracle 9i, 10g, etc., MySQL 4.0.1, 5.x, etc, sybase, etc) jusqu'à l'exécution.Obtention de données à partir de plusieurs bases de données

Je crois comprendre que chacun de ces systèmes a un dialecte légèrement différent. Ai-je besoin d'utiliser nhibernate pour gérer les différences lors de la connexion à ces systèmes ou puis-je utiliser ADO.NET et transmettre des chaînes SQL brutes (sélectionnez * dans le tableau)?

Répondre

1

SQL doit être normalisé pour tous les dbs, mais ils n'utilisent pas tous la même syntaxe, cela dépend donc du SQL que vous appelez. Par exemple, SQL Server utilise TOP alors qu'Oracle utilise rownum. Même si elles sont toutes DDL, certaines différences syntaxiques entre les SGBD peuvent être un problème.

Si select * from table est tout ce que vous voulez, alors il ne devrait pas y avoir de problème, autre que les hits de performance.

2

Si vous avez seulement besoin d'utiliser des instructions SQL ANSI, qui devraient être implémentées par toutes les bases de données alors oui, vous pouvez simplement utiliser ADO.NET. D'après mon expérience, le principal problème avec le code agnostique de base de données est l'utilisation de clés de substitution, comme des séquences ou des champs de numérotation automatique, car toutes les bases de données les implémentent différemment. Si vous avez besoin d'utiliser des fonctionnalités qui diffèrent d'une base de données à l'autre, je ne pense pas qu'il soit suffisant de passer à un mappeur relationnel d'objet comme NHibernate - ne le faites que si vous avez d'autres raisons de le faire. Vous pouvez implémenter votre propre gestion des différences de syntaxe en générant suffisamment de SQL pour différentes bases de données.

Questions connexes