2

構築しているアプリケーションは、データベースに依存しない必要があります。特に、SQL Server、Oracle、および MySQL と連携できるようにする必要があります。今後、他の DB ベンダーがリストに追加される可能性があります。もちろん、どの DB を使用する場合でもスキーマは同じです。

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

私の質問は次のとおりです。同じ自動生成された DataSet と TableAdapter を異なるデータベース (およびおそらくベンダー) で使用する方法はありますか?

乾杯、

マルコス

4

2 に答える 2

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などのデータベース フレームワークの使用を検討することもできます。

于 2009-06-19T13:00:51.163 に答える
0

あなたは間違った道を進んでいると思います。私はNHibernateを使います

私は毎日使用していますが、データベースに依存しません。

于 2009-06-19T12:40:41.453 に答える