2011-01-07 7 views
0

私は、さまざまなデータベースプラットフォーム上で動作する多くの異なるアプリケーションと通信する必要のあるアプリケーションを開発中です。実行前にテーブルスキーマを知っていますが、ランタイムまでデータベースプラットフォーム(MS SQL 200X、Oracle 9i、10gなど、MySQL 4.0.1,5.xなど、sybaseなど)はわかりません。複数のデータベースからデータを取得する

これらのシステムのそれぞれがわずかに異なる方言を持っていると私は理解しています。これらのシステムに接続する際にnhibernateを使用して違いを処理する必要がありますか、ADO.NETを使用して生のSQL文字列(select * from table)を渡すことはできますか?

答えて

1

SQLはすべてのDBに対して標準化されるべきですが、すべて同じ構文を使用するわけではありませんので、実際に呼び出すSQLに依存します。たとえば、SQL ServerはTOPを使用し、Oracleはrownumを使用します。すべてがDDLであっても、DBMS間の文法上の違いが問題になる可能性があります。

select * from tableを使用すると、パフォーマンスヒット以外の問題は発生しません。

2

すべてのデータベースで実装する必要があるANSI SQL文のみを使用する必要がある場合は、ADO.NETを使用できます。

私の経験では、データベースに依存しないコードの主な問題は、シーケンスまたはオートナンバーフィールドのようなサロゲートキーの使用です。

データベース間で異なる機能を使用する必要がある場合は、NHibernateのようなオブジェクトリレーショナルマッパーに行く理由が十分ではないと思います。異なるデータベース用に異なるSQLを簡単に生成することで、構文の違いを独自に処理できます。

関連する問題