9

私はSQLServerデータベースから始めています。System.Data.SqlClientしたがって、名前空間を使用する必要があるようです。ただし、SqlServer データベースをシャットダウンして、MySql または Oracle に移動する可能性があります。このため、必要に応じて将来別のデータベース システムに簡単に移行できるように、.Net アプリがデータベースと通信する方法に関する一連の標準を考えています。

したがって、ここに基準があります:

  1. 可能であれば ORM を使用します (NHibernate など) (LINQ は SqlServer のみをサポートするため、LINQ はありませんが、エンティティ フレームワークとその Oracle および MySql のサポートはどうでしょうか?)
  2. ORM がやり過ぎの場合は、パラメーター化された SQL クエリを使用します。
  3. ストアド プロシージャは、データベースで実行する必要がある長時間または複雑なアクションにのみ使用してください。

これにより、当面の主な質問に至ります。 DAL のコーディングにはどの名前空間を使用すればよいですか?

System.Data.ODBC選択は と の間にあるように私には見えますSystem.Data.OleDB:

  • トレードオフは何ですか?
  • どちらが優先されますか?
  • 最初の 3 つの基準についてどう思いますか?
4

7 に答える 7

3

System.Data.SQLClient

SQL Server 2000 以降にのみ接続しますが、これらのデータベースに接続すると最適なパフォーマンスが得られます。

System.Data.OledbClient

SQL 6.5 に接続

OLEDBClient を使用すると、ORACLE や Access などの他のデータベースに接続できます。ただし、SQL Server を使用する場合は、SQLClient を使用するとパフォーマンスが向上します。

注: ORACLE に接続するために、Microsoft には ORACLEClient もあります。

System.Data.ODBCClient

ODBC ドライバーを使用して、レガシー データベースにのみ接続します。(例: MS Access 97)

元のソース

于 2015-08-02T12:38:20.780 に答える
2

SQLServerドライバーを使用したい。私はあなたがやろうとしていることを理解していますが、複数のデータベースのサポートを達成する方法は、抽象化の別のレイヤーを挿入することです。あなたはこれを多くの方法で行うことができます。ただし、データベース固有のコードをクラス階層の端に配置します。したがって、各クラスはデータベース固有の機能のメリットを享受できますが、上位レベルの呼び出し元は、その下で使用されているデータベースを知らないか、気にしません。ORMに関しては、私はLLBLGenを好みますが、これは私の好みです。

また、明確にするために、LINQはSQLServerに固有のものではありません。それがLINQ-to-SQLです。LINQは、LINQ-to-SQL、LINQ-to-Entities、LINQ-to-objectsで使用できるクエリテクノロジであり、LLBLGenでさえLINQをサポートしています。

于 2009-06-01T22:26:10.647 に答える
2

今のところ SQLClient と Odbc のどちらを使用していても、ストアド プロシージャやその他のデータベース固有の機能を使用している場合は、データベース エンジンを変更した場合にそれらを書き直す必要があります。

于 2011-05-06T12:53:29.743 に答える
1

データベースを交換する(または複数のバックエンドをサポートする)ことに気付いた場合は、ORMが最適です。それ以外の場合は、変更をサポートするために、DALの多くをリファクタリング/リライトする必要があります。アプリが小さい場合、それは悪くはありませんが、実質的なものは何でもあり、あなたは傷つくでしょう。

于 2009-06-01T22:31:47.937 に答える
1

SqlClientを使用して、変更された場合はDALを再書き込み/再生成します。

今すぐ複数のプラットフォームで実装してテストする予定がない限り、今の余分な労力がDALをやり直すための労力よりも大したことか、それよりも少ないかはわかりません。また、DALを持っているという事実もありません。とにかく後で変更するために、すべてを1か所にまとめていることを意味します。

于 2009-06-01T22:25:31.177 に答える
1

SQL Server を使用すると、SqlClient は OleDB や ODBC よりもはるかに迅速かつ簡単に開発できることがわかります。複数のプラットフォームをサポートする必要がある可能性が非常に高い場合を除き、書き直す必要があるリスクよりもメリットの方が大きいことがわかります。あなたのDAL。

さらに、OleDB / ODBC を使用することは、プラットフォームの独立性を維持する 1 つの方法にすぎません。DAL を複数実装し、それぞれが使用されているプラ​​ットフォームにネイティブなクライアントを使用する方が効果的である場合があります。

于 2009-06-01T22:43:00.440 に答える
0

重要な機能でない限り、プラットフォームの独立性を維持することについてあまり心配する必要はないと言われていると聞きました。そうは言っても、

SQLClientはネイティブアクセスを提供し、パフォーマンスを向上させる必要があります(抽象化/変換を行う必要はありません)。

OLEDBとODBCを機能させるために変更する必要があるのは、接続文字列だけです。OLEDBには、クライアント側のインテリジェンスが少し多いため、パフォーマンスが向上します。

于 2009-06-01T22:33:26.730 に答える