2009-05-27 21 views
4

データベースを抽象化するC#ソースコードの例が必要です(最小限のコード変更でデータベース間を簡単に変更できます)。良質のサンプルサイトやチュートリアルを知っていますか?次のようにMicrosoft SQL Server、Oracle、MySQL、およびDB2のデータベース抽象化

特定のターゲット・データベースは、次のとおりです。
1のMicrosoft SQL Serverの
2.オラクル
3. MySQLの
3. DB2

私の特定の要件と問題が発生した次のとおりです。
1.データアクセスで使用されるクラスの抽象化。
2.ストアドプロシージャを呼び出す際にパラメータを使用する。 Microsoft SQL Serverでは@は問題ありません。他のデータベースは@をサポートしていません。
3.クエリの構文をあるデータベースから別のデータベースに変換する。ある種の「汎用」クエリを持っていて、それをターゲットデータベースにクエリを生成するいくつかのクラスを作成しますか?
4.データアクセス層に厳密に型指定されたデータセット。私は経験から、Visual StudioのTableAdapterとQueryウィザードがMySQLで失敗したことを覚えています。

あなたの専門知識と時間をありがとうございます。

答えて

6

は(自由の一種)

や他のORMを

+2

+1 - このようなORMは、あなたが不公平な努力なしに得る可能性がある限り、あなたを得るでしょう。いくつかの厄介なクエリのために、カスタムコードを書く必要があるかもしれません - merdeが起こります。これらのコーナーケースでは、機能をデータベース依存層とデータベース非依存層に分割します。データベースに依存しないモジュールを、標準インタフェースと、データベースに依存するモジュールを接続するためのメカニズムで設定します。 – ConcernedOfTunbridgeWells

+0

@Darius Kucinskas:多くの人がEntity Frameworkをうまく使っています。 EFに特有の問題はありましたか? –

+0

Entity Frameworkは、Netフレームワークの特定のバージョンに結びついている大きな問題の1つです。私がNet framework 3.5 sp1とVisual Studio 2008に縛られているEF1を使用し始めたとしたら、多くのEF1煩わしさを修正するEF4に切り替えることはできません(そのうちの1つはPOCOサポートが不足しています)。 Net 4フレームワークに切り替えてVisual Studio 2010を購入する必要があります。しかし、LinqがEntitiesに素敵な機能であることを認めなければなりません。 –

3

を強くお勧めしますが、Microsoft's Enterprise Libraryのデータアクセスアプリケーションブロックもご覧ください。

もちろん、どのORMでも必要な機能を提供する必要があります。

1

これに最も近い方法は、データベースプロバイダが提供するインターフェイスを使用することです。それらは機能的にほぼ平行している。構成されたデータベースに基づいて、コマンド・アダプター、データ・アダプター、および接続用のインターフェースを作成する静的ファクトリー・クラスを作成します。例えば:それは周りの構成文字列を渡す必要がありますけれども

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ドキュメントを使用して、通常使用する各オブジェクトによって与えられたインタフェースを調べ、それらを使用して固執してください。それはかなり簡単です。しかし、あなたはいくつかの方法でハックする必要があります。

関連する問題