Odbc、OleDb、SQLClient をいつ使用する必要がありますか?トレードオフとは何ですか
質問
SQLServer データベースから始めます。したがって、使用する必要があるようです System.Data.SqlClient
名前空間。ただし、SqlServer データベースをシャットダウンして、MySql または Oracle に移動する可能性があります。このため、私は、将来必要になった場合に別のデータベース システムに簡単に移行できるように、.Net アプリがデータベースと通信する方法に関する一連の標準を考案しています。
したがって、基準は次のとおりです。
- 可能であればORMを使用します(例:nhibernate)(linqはsqlserverのみをサポートしているためですが、エンティティフレームワークとOracleとmysqlのサポートはどうですか?)
- ORM が過剰な場合は、パラメーター化された SQL クエリを使用します。
- データベースで実行する必要がある長い実行または複雑なアクションに対してのみストアドプロシージャを使用します。
それが私を私のことに導きます 目前の主な質問。 DAL のコーディングにはどの名前空間を使用すればよいですか?
私には次のどちらかを選択できるように思えます System.Data.ODBC
そして System.Data.OleDB
:
- トレードオフは何ですか?
- どちらか一方が他方よりも優先されますか?
- 最初の 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の)
<のhref = "https://social.msdn.microsoft.com/Forums/sqlserver/en-US/b1cf6249-cbc2-4ab7-90d9-dbea8acf523a/what-is-the-difference-between-systemdatasqlclient- systemdataoledbclient-と?フォーラム= sqldataaccess」のrel = "" nofollowを>オリジナルソースの
他のヒント
あなたは、SQL Serverドライバを使用します。私はあなたがやろうとしているのか理解ができますが、複数のデータベースをサポート成し遂げるような方法は、抽象化の別の層を挿入することです。あなたは、この多くの方法を行うことができます。しかし、あなたはあなたのクラス階層のエッジでデータベース固有のコードを置きます。したがって、各クラスは、データベース固有の機能の利点を得ることができますが、より高いレベルの発信者は、下に使用されているもののデータベースを知っているか気にしません。限りオームズとして、私は LLBLGen を好むが、これはちょうど私の好みです。
また、単に明確にするために、LINQは、SQL Serverに固有ではありません。それは、LINQツーSQLです。 LINQを使用して、LINQツーSQL、LINQツーエンティティ、LINQツーオブジェクトで使用できるクエリの技術であり、さらにはLLBLGenは、LINQをサポートしています。
あなたがストアドプロシージャまたはその他のデータベース固有の機能を使用する場合は、今のところのSqlClientまたはODBCを使用するかどうかは関係ありませんが、あなたはデータベースエンジンを変更した場合、それらを書き換える必要があります。
私はただのSqlClientを使用したいと再書き込み/再生成DAL
は、あなたが今、複数のプラットフォームに実装し、テストしようとしている場合を除き、私は余分な労力が今大したやDALをやり直すための努力よりも任意の少ない、とあなたがきたという事実であるか分かりませんすべてのDALは、あなたがとにかく後で変更のための1つの場所ですべてを持っている意味しまっています。
あなたはデータベースを交換(または複数のバックエンドをサポート)することがあります任意の予感を持っている場合は、ORMは、移動するための方法です。そうしないと、あなたはまだ変更をサポートするために、あなたのDALの多くを書き換え/リファクタリングする必要があります。あなたのアプリが小さい場合、それは悪いことではないだろうが、何もかなり、あなたが傷つくことがあります。
SQL Server を使用すると、SqlClient は OleDB や ODBC よりも開発がはるかに速く、簡単であることがわかります。複数のプラットフォームをサポートする必要がある可能性が非常に低い場合を除き、書き換えが必要になるリスクよりもメリットの方が大きいことがわかります。あなたのDAL。
さらに、OleDB / ODBC の使用は、プラットフォームの独立性を維持する 1 つの方法にすぎません。DAL を複数実装し、それぞれが使用されているプラットフォームにネイティブなクライアントを使用する方が効果的であることがわかります。
私はそれはそれは重要な機能でない限り、あなたは、プラットフォームの独立性を維持することについてはあまり気にしてはならないと言っ聞きました。それは言った、
のSqlClientは(それがどんな抽象化/翻訳を行う必要はありません)あなたのネイティブアクセス権を与えると、よりパフォーマンスする必要があります。
あなたはODBC対働いOLEDBを取得するために変更する必要が唯一のものは、あなたの接続文字列です。それがより良いパフォーマンスを提供していますので、OLEDBはもう少しクライアント側の知性を持っています。