Frage

Ich beginne mit einer SQLServer-Datenbank ab. So scheint es, dass ich System.Data.SqlClient Namespace verwenden sollte. Aber, es gibt eine Chance, dass wir unsere SQLServer-Datenbank möglicherweise heruntergefahren und gehen Sie zu MySQL- oder Oracle. Aus diesem Grunde komme ich mit einer Reihe von Standards auf, wie unsere NET-Anwendungen mit der Datenbank kommunizieren, um es leichter zu einem anderen Datenbanksystem in der Zukunft migrieren, wenn wir so tun müssen.

So, hier sind die Standards:

  1. Verwenden Sie ein ORM, wenn möglich (zB NHibernate) (No LINQ, da es nur unterstützt SqlServer, aber was Entity Framework und seine Unterstützung für Oracle und MySQL?)
  2. Wenn ORM ist ein Overkill, dann parametrisierte SQL-Abfragen verwenden.
  3. Verwenden Sie gespeicherte Prozeduren nur für lange laufende oder komplexe Aktionen, die werden müssen, auf die durchgeführt Datenbank.

Was mich zu meiner Hauptfrage bei der Hand bringt. Welchen Namensraum soll ich meine DAL zu codieren verwenden?

Es scheint mir, dass die Wahl zwischen System.Data.ODBC und System.Data.OleDB ist:

  • Was ist das Trade-offs?
  • Sie einen über den anderen bevorzugt?
  • Was sind Ihre Gedanken über die ersten drei Standards?
War es hilfreich?

Lösung

System.Data.SQLClient

eine Verbindung mit SQL Server 2000 und später nur, aber Sie werden eine optimale Leistung, wenn sie mit diesen Datenbanken zu verbinden.

System.Data.OledbClient

Zum Anschluss SQL 6.5

OLEDBClient gibt Ihnen Fähigkeit, andere Datenbank wie Oracle oder Access zu verbinden. Aber für die mit SQL Server arbeiten, werden Sie eine bessere Leistung mit SQLClient erhalten.

. Hinweis: Für Verbindung zu Oracle, Microsoft hat auch OracleClient

System.Data.ODBCClient

Anschluss an Legacy-Datenbanken nur mit ODBC-Treiber. (Zum Beispiel MS Access 97.)

Ursprüngliche Quelle

Andere Tipps

Sie möchten den SQL Server-Treiber verwenden. Ich verstehe, was Sie versuchen zu tun, sondern so, wie Sie durch das Einfügen einer anderen Abstraktionsebene mehrere Datenbanken ist die Unterstützung erreichen würde. Sie können so viele Arten tun. Aber Sie setzen die Datenbank spezifischen Code am Rande Ihrer Klassenhierarchie. Daher kann jede Klasse die Vorteile der Datenbank spezifischer Funktionalität erhalten, aber die höheren Level Anrufer nicht wissen, oder kümmern, welche Datenbank unter verwendet wird. Soweit ORMs, ziehe ich es LLBLGen , aber das ist nur meine Vorliebe.

Auch nur zu klären, LINQ to SQL Server nicht spezifisch ist. Das ist LINQ-to-SQL. LINQ ist eine Abfrage-Technologie, die Sie in LINQ to SQL, LINQ-to-Entities, LINQ-to-Objekte verwenden können, und sogar LLBLGen unterstützt LINQ.

Egal, ob Sie SQLClient oder Odbc jetzt verwenden, wenn Sie gespeicherte Prozeduren oder andere Datenbank-spezifische Funktionen, werden Sie diejenigen, neu zu schreiben, wenn Sie Datenbank-Engines ändern.

Ich würde nur SqlClient verwenden und neu zu schreiben / re-generiert die DAL, wenn es geändert wird.

Es sei denn, Sie gehen auf mehreren Plattformen zu implementieren und zu testen jetzt, ich bin nicht sicher, ob der zusätzliche Aufwand gerade jetzt ist eine große Sache und nicht weniger als der Versuch, die DAL zu wiederholen, und die Tatsache, dass Sie haben bekam eine DAL überhaupt bedeutet, dass Sie alles an einem Ort für eine spätere Änderung sowieso haben.

Wenn Sie noch eine Ahnung bekommen, dass Sie Datenbanken tauschen werden (oder die Unterstützung mehrere Backends) dann ein ORM ist der Weg zu gehen. Andernfalls werden Sie müssen noch eine Menge Ihre DAL, um die Änderung Refactoring / umschreiben zu unterstützen. Wenn Ihre Anwendung klein ist, wird es nicht schlecht sein, aber alles wesentliches und Sie verletzt werden.

Sie werden feststellen, dass SQL Server unter Verwendung der SqlClient viel schneller und einfacher als mit OleDB und ODBC zu entwickeln - es sei denn, es sehr wahrscheinlich ist, dass Sie mehrere Plattformen unterstützen, müssen Sie feststellen, dass der Nutzen die Risiken überwiegen, dass Sie müssen Ihre DAL neu zu schreiben.

Zusätzlich OleDB / ODBC ist nur 1 Weg Plattformunabhängigkeit aufrechtzuerhalten - Sie können es effektiver finden können mehrere Implementierungen Ihrer DAL zu haben, die jeweils ein Client stammt von der Plattform verwendet werden

.

Ich habe gehört, sagte, dass, wenn es ein wesentliches Merkmal ist, sollten Sie nicht zu viele Sorgen über die Plattformunabhängigkeit beibehalten wird. Das heißt,

SQLClient geben Ihnen einen nativen Zugriff und sollte mehr performant sein (es hat keine Abstraktionen / Übersetzungen zu tun).

Das einzige, was müssen Sie OLEDB erhalten ändern vs. ODBC arbeiten, ist der Verbindungszeichenfolge. OLEDB hat ein wenig mehr clientseitige Intelligenz, so dass es eine bessere Leistung bietet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top