Wie eine .NET-Anwendung zu schreiben, die sowohl mit SqlServer und Oracle (jetzt, dass System.Data.OracleClient veraltet ist) funktioniert

StackOverflow https://stackoverflow.com/questions/1193066

Frage

siehe auch System.Data.OracleClient Namespace eingestellt?

(Zum einem Panik noch nicht, wird System.Data.OracleClient von Microsoft nicht noch entfernt werden, jedoch ist es nicht in der Client-Version von .net 4)

Diese Verwendung möglich sein, durch System.Data.OracleClient verwenden, jedoch hat Microsoft zu deprecate OracleClient entschieden. (OracleClient ist die ADO.NET-Provider für Oracle von Microsoft entwickelt und Schiffen als Teil des .NET Framework.)

Sie ODP.Net verwenden könnte, aber möchten Sie Ihren SQL Server-Kunden ODP.Net installieren müssen? (Haben Sie alle Ihre Kunden wünschen Oracle-Software installieren zu müssen?)

Datadirect ist keine Option, da sie einen Arm und ein Bein kosten ; es kann erschwinglich sein nur um, wenn Sie einen einzelnen Server mit einem Mainframe verbinden müssen. Es ist jedoch keine Option für alle Kunden zu erwarten, es zu kaufen.

Verschieben Form C # Java ist keine gute Wahl, da ich eine C # Programmierer und Wunsch bin in der Lage sein, ein Leben zu verdienen!

Wie die meisten ISVs, die mehrere RDBMS unterstützen müssen wir nur eine Lösung brauchen, die uns die kleine Teilmenge von Oracle verwenden können, die gleich SqlServer ist. Deshalb war System.Data.OracleClient leistungsfähig genug für uns.

(Vielleicht sollten wir einfach beginnen, alle Daten in flachen Dateien zu speichern, so dass DBA Stopp des Kunden versuchen, uns zu sagen, wie man Schreibsoftware. Oracle DBAs sind schlimmer!)


Meine Frage ist, wie kann ich .NET-Software, dass die Gespräche zu Oracle schreiben, die uns Schmerz als .NET-Software installiert ist frei, dass die Gespräche zu SqlServer. Mit Gebrauch ODP.NET macht nur das Oracle-Client installiert noch schmerzhaftes, mit mehr noch schief gehen.

Wenn ich wurde mit JAVA Ich konnte nur JDBC Typ 4 Treiber verwenden. Microsoft bietet eine für SqlServer und Oracle bietet eine für Oracle. Allerdings scheint es, dass Oracle will .Net Nutzung so hart wie möglich machen und Microsoft will Oracle Nutzung so hart wie möglich machen.


Bisher ist die beste Option sieht aus wie Devart der dotConnect .

Jedoch habe ich auf Frage Wetter .NET fange ist ein gutes Entwicklungssystem für ISV, wie früher oder später immer einen Kunden erhalten, die Oracle-Unterstützung erfordert. In der Java-Welt scheinen sie dieses Problem gelöst zu haben.


Es sieht aus wie Oracle sein kann, über eine senible Fully Managed ADO.NET-Provider themselfs zu bringen, es auch leicht sein kann, installieren! finden Sie unter hier dass Ansprüche Beta - 2011, Produktion -. Ende 2011

War es hilfreich?

Lösung

EDIT: Der vollständig verwaltete ODP.NET ist in der Produktion ab sofort verfügbar. Es ist sehr klein (weniger als 10 MB) und ist auf andere Dateien abhängig. Sie können es erhalten hier:

http://www.oracle.com/technetwork/topics /dotnet/downloads/index.html

Original Antwort:

Eine Möglichkeit, leicht sicherstellen, dass die erforderliche Oracle Client-Software (einschließlich ODP.NET) auf der Deployment-Maschine ist immer verfügbar ist einbinden, um sie mit Ihrer Anwendung. ODP.NET hat eine viel bekommen leichter jetzt einbetten, dass XCOPY ODP.NET zur Verfügung steht. Sie können es von diesem Link heruntergeladen werden:

http://www.oracle.com/technology /software/tech/windows/odpnet/index.html

Mit XCOPY ODP.NET, alles, was Sie tun müssen, wenn Sie Ihre Anwendung bereitstellen wird, um die folgenden:

1) Kopieren Sie Ihre Anwendung auf die Zielmaschine

2) Run "install.bat", die Kopien ein paar Oracle DLL auf den Zielcomputer (einschließlich ODP.NET und der Oracle-Client-Seite (OCI) Software)

3) Run "configure.bat", das macht einen "gacutil" und aktualisiert die Registrierung der Zielmaschine

4) Geben Sie Ihre Anwendung mit Verbindungszeichenfolge Informationen. Sie können die EZConnect Verbindungszeichenfolge verwenden ( „hostname @ service“) oder Sie (oder Ihr Kunde) kann durch Setzen des TNS_ADMIN Registrierungseintrag oder Umgebungsvariable Punkt zu einem anderen Oracle-sqlnet Konfigurationen vorbestehenden teilen, die sqlnet connect Aliase bereits konfiguriert ist.

Das ist es! Es ist wirklich so einfach.

Ich hoffe, dass Sie über einen guten Blick auf ODP.NET XCOPY in den Link nehmen, um für sich selbst zu sehen, wie einfach es in diesen Tagen ist die Einbettung von ODP.NET mit Ihrer App.


Zusätzliche Hinweise:

Wenn Sie nicht einbetten ODP.NET mit Ihrer Anwendung, sowohl im Fall von Microsoft OracleClient und im Fall von ODP.NET, muss es zusätzliche Oracle Client-Seite (OCI) Software auf jedem Einsatz Rechner installiert sein. Der einzige Unterschied zwischen den beiden Fällen besteht darin, dass, wenn Sie ODP.NET verwenden, es muss auch auf dem Deployment-Computer existiert. Die gute Nachricht ist, dass eine typische Oracle auf Ihrem Kunden-Rechner installieren gehört ODP.NET bereits.

Nun, wenn Ihre Zielmaschine hat bereits ODP.NET installieren Sie brauchen nichts anderes zu tun. Sie müssen nur Ihre Anwendung verteilen. Wenn Sie tun, um installieren ODP.NET das Standard-Installationsprogramm verwenden, können Sie es auch aus dem obigen Link Download. Die Standard-ODP.NET installieren nur ein paar Minuten und konfiguriert alles für Sie nimmt.

Und wieder können Sie EZConnect connect Strings verwenden, um Konfigurations ein Stück Kuchen zu machen die Vernetzung oder die TNS_ADMIN Registrierungseintrag oder Umgebungsvariable, um die Vorteile von vorbestehenden nehmen connect Aliase, dass Ihr Kunde bereits mit verwendet wird.

Hope, das hilft,

Christian Shay

Oracle

Fühlen Sie sich frei über Ihr Feedback zu diesem und anderen zukünftigen Features auf unserer Feature-Anfrage Website zur Verfügung zu stellen: http://apex.oracle.com/pls/apex/f? p = 18357: 46

Andere Tipps

Haben Sie bei alternativen Oracle-Provider sah aus wie Devart der dotConnect ? Dieser Treiber als Beispiel, ist 100% verwaltetem Code, unterstützt viele erweiterte Oracle verfügt, bietet Entity Framework-Unterstützung (dass eines Tages in ODP.NET wird kommen, ich bin sicher).

Es gibt eine Reihe von anderen Funktionen (wie ASP.NET-Provider-Modell-Unterstützung), dass wir nicht bis zur ODP.NET 11g Release bekommen haben. Ziemlich liberal Lizenzierung und preiswert. seine eigenen Profiler kommt auch mit, wenn ich mich richtig erinnere.

ihre Tests , führt zu ODP.NET günstig verglichen. Ich würde lieben, Sie zu etwas Open-Source-zu-Punkt, aber nach meiner Erfahrung, wenn Sie in Oracle als Datenbank gekauft haben, haben akzeptieren Sie schon die Tatsache, dass Sie etwas Geld für Ihre Datenbank-bezogene Werkzeuge zur Festlegung würden .

Es gibt einen großen Unterschied zwischen veraltet ist und entfernt werden.

Wenn Sie nur die Teilmenge der Funktionalität verwenden, die auf SQL Server und Oracle gemeinsam ist, dann sollten Sie sich gut über 4,0 bis ASP.Net bewegen und weiterhin Programm, wie Sie tun zur Zeit.

Mit so etwas wie EntitySpaces , würden Sie relativ providerunabhängig sein lassen. (Es verwendet OracleClient in seiner DAL)

Völlig einverstanden mit Philippe über Oracle-Client-Software ein Schmerz zu sein. Ich habe den Überblick über die Anzahl der Male verlor ich es installiert habe und die Erfahrung gehasst. Gib mir MySQL, SQL Server oder sogar Zugang bevorzugt.

(Eigentlich nehme ich den Zugang Kommentar zurück): -)

Mit den "Die Provider Factory-Pattern", die im Grunde eine Fabrik ist mit einem Datenprovider zu geben, die vollständig von den Datenbank-Anforderungsmethoden abstrahiert wird, dass Verwendungen hier ist es ein Blogpost mit einigem Beispielcode, der zeigt, wie die a href auch tun <=" http: / /www.dnrtv.com/default.aspx?showNum=63" rel = "nofollow noreferrer"> Jean-Paul Boodhoo auf Demystifying Design Patterns Teil 1 auf dnrtv.com zeigt, wie man auch.

Dies ist einige sehr coole Sachen im Grunde haben Sie eine Fabrik, die für immer eine Verbindung ein Verfahren liefert

public IDbConnection GetConnection()
{
     IDbConnection connection =  _frameworkDBProviderFactory.CreateConnection();
     connection.ConnectionString = _authenticationSettings.ConnectionString;            
     return connection;
} 

obwohl eine Schnittstelle, so dass Sie jede Art von Datenbank aufrufen können, die Connection-Objekt implementiert die IDbConnection ist Schnittstelle (SQLServer, MySQL, Oracle, etc.) und es funktioniert einfach.

Mit dem abstrahiert entfernt, was DB Sie mit Ihnen sogar zur Laufzeit tauschen können und Ihre Anwendung wird nie wissen, ist es nicht brauchen, um so zu Verbindung zu einem Orical DB, laden Sie die ODP.NET , die gleiche Sache mit mySQL Connector beide IDbConnection implementieren und Ihren Code gegen die abstrahierten Verbindung schreiben.

Zusätzlich zu dem, was andere haben vorgeschlagen, könnte man erwägen, den Anbieter Muster und Oracle ODP.NET verwendet wird.

Datenbank unabhängig zu sein, ist ein sehr harter Job, weil es viele spezielle Dinge (bind Variablennamen, Objekt Zitat, ...) sind. Verwenden Sie eine Bibliothek wie NHibernate , die eine Schicht zwischen der Anwendung und der realen Datenbank stellt.

Wenn Sie auf beide Datenbanken zu verbinden haben, als es sich um eine Frage des Einsatzes ist. Wenn Sie Oracle (mit System.Data.OracleClient oder Oracle.DataAccess.Client) verbinden müssen Sie Oracle-Client-Software auf dem Computer installiert. Der Datenbankanbieter mit Rahmen im Einsatz ist nicht genug, um eine Oracle-Datenbank zu verbinden.

Wenn Sie Oracle verbinden, müssen Sie Software von Oracle installieren. Wenn Sie die deprecation fürchten, als installieren und zu verwenden ODP.Net. Es gibt einige Unterschiede zwischen zwei Oracle-Datenbank-Anbieter.

Für eine bessere Bereitstellung von Oracle wurde das Konzept der Instant Client . Dieser Client kann mit xcopy Einsatz im Einsatz. Sine Orakel 11 das Instant-Client können mit ODP.Net gebündelt werden.

Die Installation von ODP.Net ist in der Post von Christian Shay beschrieben.

Die Oracle.DataAccess muss Montage nicht in sterben Global Assembly Cache sein. Legen Sie es in Ihrem ist. Das Instant-Client von Oracle.DataAccess verwendet wird, muß nicht auf Ihrem Client-Rechner in einem anderen Verzeichnis sein. Legen Sie es in Ihrem ist. Die Dokumentation beschreibt, wie Ihre Anwendung konfigurieren, finden ein Instant-Client.

Would ODBC sowohl für machbar sein?

Solange Sie nicht invoke ein ODP.Net Objekt zu tun, brauchen Sie nicht ODP zu installieren, wenn Sie nur den Zugriff SQL Server.

Ich glaube, dass ODBC noch SQL Server und Oracle mit einem gewissen Transparenz verwenden kann, so dass ich einen Blick auf mit ADO.Net mit den ODBC-Provider nehmen würde. Es wird Ihnen nicht alle der Leistung geben oder Funktionen, die SqlClient oder OracleClient würde, aber es sollte ziemlich nah an den gleichen Code für Oracle oder SQL-Server sein.

Das könnte Sie prüfen, mit SubSonic 3.0 ! Ich habe es läuft meine SQLServer, MySQL und SQLite-basierte Anwendung und Benutzer zwischen diesen 3 zur Laufzeit wechseln kann!

Nach meiner Erfahrung kann man nicht einfach die ODP.NET Datenprovider-DLL bereitstellen. Oracle erfordert eine Heiminstallation für etwas mehr als die Standardkonfiguration (zum Beispiel verwenden wir LDAP-Namensauflösung, erfordern eine LDAP.ora Datei in einem speziellen Heim-Pfad).

Allerdings ODP.NET implementiert die ADO.NET 2.0-Standards nur in Ordnung (DbProviderFactory, etc). Und ich habe programmiert gegen die Basisklassen (DbConnection, DbCommand, usw.), ohne dass für die speziellen Klassen für einige Zeit in meiner Firma.

Mein Vorschlag dieses Datenzugriff Arbeit für die Herstellung zu verwenden ist / befolgen Sie die Anweisungen in der NHibernate .

Wenn Sie eine Logistik oder IT-Problem bei der Installation ODP.NET oder an Ihren Kunden / Klienten bekommen, empfehle ich Ihnen zu Ihrer IT-Mitarbeiter und Oracle über Lösungen für das Gespräch.

Der Kunde sollte installieren odp.net und der Oracle-Client auf dort Maschinen. Sie sollten es nicht bereitstellen. Ihre Bewerbung wird die benötigte Oracle DLL im GAC finden.

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