2009-06-19 11 views
2

データベースに依存しないアプリケーションを構築する必要があります。特に、SQL Server、Oracle、MySQLで作業できるようにする必要があります。将来的には、おそらく他のDBベンダーもリストに追加されます。もちろん、どのDBを使用するにしても、同じスキーマを持ちます。.net:DataSetとTableAdaptersはデータベースとベンダーに依存しませんか?

インターフェイスを示すためのプロトタイプを構築するために、SQL Serverデータベースにスキーマを読み込み、そのデータベースのDataSetとTableAdaptersを生成しました。データセットはデータベースの特定のインスタンスによって生成されたため、生成されたDataSetとTableAdaptersはベンダーに依存しないものと思われます。さらに、別のSQL Server DBインスタンスで使用できるかどうかもわかりません。

私の質問は 異なるデータベース(場合によってはベンダー)と同じ自動生成データセットとテーブルアダプタを使用する方法はありますか?

乾杯、

マルコス

答えて

2

一般に、System.Data.Common名前空間に対してデータベースコードを開発すると、それは可能な限り不自然になります。ただし、各データベースプロバイダには、それとは異なる独自の実装レベルの詳細があるため、注意が必要です。

System.Data.Commonを使用してデータベースにとらわれないアプローチの例は次のようになります。

var factory = DbProviderFactories.GetFactory("My Provider Name"); 
using (var connection = factory.CreateConnection()) 
{ 
    connection.ConnectionString = "My Connection String"; 
    connection.Open(); 

    var cmd = factory.CreateCommand(); 
    cmd.CommandText = "My Command Text"; 
    cmd.Connection = connection; 

    var adapter = factory.CreateDataAdapter(); 
    adapter.SelectCommand = cmd; 

    var dataset = new DataSet(); 
    adapter.Fill(dataset); 

    // ... 
} 

は、単にデータベースプロバイダを切り替えるには、最初の行を変更し、コードの残りの部分はほとんど同じに残ることができます。

このアプローチでは、手作業で多くのコードを使用します。 NHibernate(David Basarabに言及されているように)、SubsonicまたはMicrosoft Enterprise Library Data Access Application Blockのようなデータベースフレームワークを使用することを検討してください。

0

は、私はあなたが間違った道を向かっていると思います。私は行くだろうNHibernate

私は毎日それを使用し、それはデータベースに依存しません。

関連する問題