Come scrivere un'applicazione .NET che funziona sia con SqlServer e Oracle (System.Data.OracleClient ora che è deprecato)

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

Domanda

spazio dei nomi System.Data.OracleClient interrotto?

(In primo luogo non panico ancora, System.Data.OracleClient non viene rimosso da Microsoft ancora, tuttavia non è nella versione client di .net 4)

Questo uso per essere possibile utilizzando System.Data.OracleClient, tuttavia Microsoft ha deciso di deprecate OracleClient . (OracleClient è il fornitore di ADO.NET per Oracle sviluppato da Microsoft e navi come parte di .NET Framework.)

Si potrebbe usare ODP.Net, tuttavia non desiderate che il vostro clienti di SQL Server per essere necessario installare ODP.Net? (Vi auguro uno qualsiasi dei vostri clienti di avere per installare il software Oracle?)

DataDirect non è un'opzione in quanto costa un braccio e una gamba ; si può quasi essere conveniente se avete bisogno di collegare un singolo server a un mainframe. Tuttavia non è un'opzione per tutti i clienti si aspettano di acquistarlo.

Moving modulo C # a Java non è una buona opzione, come io sono un programmatore C # e voglio essere in grado di guadagnarsi da vivere!

Come la maggior parte gli ISV che devono supportare più RDBMS abbiamo solo bisogno di una soluzione che ci permette di utilizzare il piccolo sottoinsieme di Oracle, che è lo stesso di SqlServer. Pertanto System.Data.OracleClient era abbastanza potente per noi.

(Forse dovremmo iniziare a memorizzare tutti i dati in file flat, in modo arresto DBA che del cliente cercando di dirci come scrivere software. DBA Oracle sono il peggio!)


La mia vera domanda è come posso scrivere software .NET che parla a Oracle che siamo noi il dolore libero di installato come software .NET che parla a SqlServer. Dovendo utilizzare ODP.NET fa solo il client Oracle di installazione ancora più doloroso, con ancor più ad andare male.

Se stavo usando JAVA potrei semplicemente usare il tipo JDBC 4 piloti. Microsoft fornisce una per SqlServer e Oracle uno fornisce per Oracle. Tuttavia sembra che Oracle vuole fare uso .Net più forte possibile e Microsoft vuole fare uso di Oracle più forte possibile.


Finora il opzione migliore si presenta come dotConnect di Devart .

Comunque sto iniziando a mettere in discussione meteo NET è un sistema di sviluppo buono per ISV, come prima o poi si ottiene sempre un cliente che richiede il supporto Oracle. Nel mondo Java che sembrano avere questo problema risolto.


Sembra che Oracle potrebbe essere in procinto di mettere in evidenza un senible completamente gestito themselfs provider di ADO.NET può anche essere facile da installare! vedi qui che le affermazioni beta - 2011, la produzione -. Fine del 2011

È stato utile?

Soluzione

EDIT: L'ODP.NET completamente gestito è ora disponibile in produzione. E 'molto piccolo (meno di 10 MB) e non dipende da altri file. È possibile ottenere qui:

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

Risposta originale:

Un modo per facilmente assicurarsi che il software lato client necessario Oracle (compresi ODP.NET) è sempre disponibile sul computer di distribuzione è quello di incorporare con l'applicazione. ODP.NET ha ottenuto un molto più facile da incorporare ora che XCOPY ODP.NET è disponibile. Potete scaricarlo da questo link:

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

Con XCOPY ODP.NET, tutto quello che devi fare quando si distribuisce l'applicazione è il seguente:

1) Copia l'applicazione per computer di destinazione

2) Esegui "install.bat" che copia un paio di Oracle DLL al computer di destinazione (tra cui ODP.NET e il lato client Oracle (OCI) software)

3) Esegui "configure.bat", che fa un "gacutil" e aggiorna il Registro di sistema del computer di destinazione

4) Fornire l'applicazione con dati stringa di connessione. È possibile utilizzare la stringa di connessione EZConnect ( "hostname @ servicename") oppure (o il vostro cliente) può condividere configurazioni SQLNet preesistenti impostando la voce del Registro TNS_ADMIN o variabile d'ambiente per puntare a un'altra casa di Oracle che ha sqlnet collegare gli alias già configurate.

Questo è tutto! E 'davvero così semplice.

Spero che prendere una buona occhiata a ODP.NET XCOPY nel link qui sopra per vedere di persona quanto sia facile in questi giorni per incorporare ODP.NET con la tua applicazione.


Note aggiuntive:

Se si sceglie di non incorporare ODP.NET con l'applicazione, sia nel caso di Microsoft OracleClient e, nel caso di ODP.NET, ci deve essere aggiuntivo lato client Oracle software (OCI) installato su qualsiasi computer di distribuzione. L'unica differenza tra i due casi è che quando si utilizza ODP.NET, ma ha anche bisogno di esistere sul computer di distribuzione. La buona notizia è che un tipico Oracle installare sulla vostra macchina cliente includerà ODP.NET già.

Ora, se il vostro computer di destinazione già ha installato ODP.NET non c'è bisogno di fare altro. Hai solo bisogno di distribuire l'applicazione. Se si ha bisogno di installazione ODP.NET utilizzando il programma di installazione standard, è possibile anche scaricare dal link fornito sopra. Lo standard ODP.NET installare solo richiede pochi minuti e configura tutto per voi.

E ancora, è possibile utilizzare EZConnect collegare stringhe per fare configurazione di rete un pezzo di torta, o di utilizzare la variabile voce del Registro TNS_ADMIN o un ambiente di sfruttare preesistente collegare gli alias che il vostro cliente è già abituati ad usare.

Spero che questo aiuti,

Christian Shay

Oracle

Sentitevi liberi di fornire i tuoi commenti su questo e altre caratteristiche future sul nostro sito richiesta di funzionalità: http://apex.oracle.com/pls/apex/f? p = 18357: 46

Altri suggerimenti

Hai guardato fornitori alternativi Oracle come di Devart dotConnect ? Questo driver, ad esempio, è al 100% di codice gestito, supporta molte caratteristiche avanzate di Oracle, fornisce il supporto Entity Framework (che verrà un giorno in ODP.NET, ne sono sicuro).

Ci sono un sacco di altre caratteristiche (come il supporto modello di provider ASP.NET), che non siamo riusciti fino al rilascio ODP.NET 11g. Abbastanza licenza liberale ea prezzi ragionevoli. Viene inoltre fornito con il proprio profiler, se non ricordo male.

loro test , esegue favorevolmente rispetto al ODP.NET. Mi piacerebbe puntare a qualcosa di open source, ma, nella mia esperienza, una volta che hai comprato in Oracle come database, avete già accettato il fatto che ti verrà recante po 'di soldi per la vostra base di dati relativi utensili .

C'è una grande differenza tra l'essere deprecato e di essere rimosso.

Se stai usando solo il sottoinsieme di funzionalità che è comune ad entrambi SQL Server e Oracle, allora si dovrebbe andare bene in movimento attraverso di ASP.Net 4.0 e continuando a programmare come si fa attualmente.

Utilizzando qualcosa come EntitySpaces , avrebbero permesso di essere relativamente provider-agnostico. (Usa OracleClient nella sua DAL)

Completamente d'accordo con Philippe su software client di Oracle essere un dolore. Ho perso il conto del numero di volte che ho installato e odiato l'esperienza. Dammi MySQL, SQLServer o anche di accesso a preferenza.

(In realtà, riprendo il commento Access): -)

Utilizzare il "Il modello Provider Factory", che è fondamentalmente utilizza una fabbrica per dare un provider di dati che è completamente astratta lontano dai metodi di richiesta di database che lo utilizza: ecco un blogpost con alcuni esempi di codice che mostra come eseguire questa operazione anche Jean-Paul Boodhoo sui modelli Demystifying design Part 1 dnrtv.com mostra come pure.

Questo è un certo roba molto cool fondamentalmente si dispone di una fabbrica che fornisce a metodi per ottenere una connessione

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

se un'interfaccia in modo da poter chiamare qualsiasi tipo di database che è oggetto di connessione implementa l'interfaccia IDbConnection (SQLServer, MySQL, Oracle, ecc) e funziona solo.

Astraendo via ciò DB vostro usando si può anche scambiare fuori in fase di esecuzione e l'applicazione non potrà mai sapere, non ha bisogno di così per il collegamento ad un Orical DB, scaricare il ODP.NET , stessa cosa con connettore mysql sia implementare IDbConnection, e scrivere il codice contro il collegamento astratto.

In aggiunta a ciò che gli altri hanno suggerito che si potrebbe prendere in considerazione utilizzando il modello Provider e ODP.NET di Oracle.

Essendo indipendente dal database è un lavoro molto difficile, perché ci sono un sacco di cose specifiche (bind denominazione variabile, un oggetto quotazione, ...). Utilizzare una libreria come NHibernate che mette uno strato tra l'applicazione e il database vero e proprio.

Se si dispone di connettersi a entrambi i database, che è una questione di schieramento. Se ci si connette a Oracle (utilizzando System.Data.OracleClient o Oracle.DataAccess.Client) è necessario un software client Oracle installato sulla vostra macchina. Il provider di database distribuito con quadro non è sufficiente per connettersi a un database Oracle.

Se ci si connette a Oracle, è necessario installare il software da Oracle. Se si teme la disapprovazione, di installare e utilizzare ODP.Net. Ci sono alcuni differenze tra il provider di database Oracle 2.

Per una migliore distribuzione Oracle ha introdotto il concetto di instant cliente . Il client può implementato utilizzando la distribuzione xcopy. Oracle Sine 11 il cliente istante può essere fornito in bundle con ODP.Net.

L'installazione di ODP.Net è descritto nel post di Christian Shay.

Il montaggio Oracle.DataAccess non deve essere in global assembly cache die. Mettilo nella directory bin. Il client di instant utilizzato da Oracle.DataAccess non deve essere in una directory diversa da computer a computer client. Mettilo nella directory bin. Il documentazione descrive come configurare l'applicazione per trovare un cliente istante.

Sarebbe tramite ODBC sia per essere fattibile?

Fino a quando non si richiama un oggetto ODP.Net, non è necessario installare ODP se solo l'accesso di SQL Server.

Credo che ODBC è ancora possibile utilizzare SQL Server e Oracle con un po 'di trasparenza, quindi vorrei dare un'occhiata a utilizzando ADO.Net con il provider ODBC. Non vi darà tutte le prestazioni o le caratteristiche che SqlClient o OracleClient sarebbe, ma dovrebbe essere abbastanza vicino lo stesso codice per Oracle o SQL Server.

Si potrebbe considerare l'utilizzo di SubSonic 3.0 ! Ce l'ho gestito la mia applicazione basata SQLServer, MySQL e SQLite e l'utente può passare da questi 3 in fase di esecuzione!

Nella mia esperienza, non si può semplicemente distribuire la DLL provider di dati ODP.NET. Oracle richiede un'installazione casa per qualcosa di più rispetto alla configurazione di default (per esempio, usiamo la risoluzione dei nomi LDAP, che richiede un file LDAP.ora in uno speciale percorso Home).

Tuttavia, ODP.NET implementa l'ADO.NET 2.0 standard bene (DbProviderFactory, ecc). E ho programmato contro le classi di base (DbConnection, DbCommand, ecc) senza alcuna necessità per le classi specifiche per qualche tempo alla mia azienda.

Il mio suggerimento per fare questo lavoro l'accesso ai dati è quello di utilizzare / seguire la guida nel EntLib o utilizzare NHibernate .

Se si dispone di una logistica o IT problema installando ODP.NET o di ottenere al vostro cliente / cliente, vi suggerisco di parlare con i tuoi personale IT e Oracle sulle soluzioni per questo.

Il cliente deve installare odp.net e il client Oracle in là macchine. Si consiglia di non distribuirlo. L'applicazione potrete trovare le necessarie Oracle DLL nella GAC.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top