Cómo escribir una aplicación .NET que funciona tanto con SQL Server y Oracle (ahora que System.Data.OracleClient está en desuso)

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

Pregunta

véase también el espacio de nombres System.Data.OracleClient descontinuado?

(En primer lugar no se preocupe todavía, System.Data.OracleClient no está siendo removido por Microsoft todavía, sin embargo, no está en la versión de cliente de .NET 4)

Este uso a ser posible mediante el uso System.Data.OracleClient, Sin embargo Microsoft ha decidido despreciar OracleClient . (OracleClient es el proveedor ADO.NET para Oracle desarrollado por Microsoft y los buques como parte de .NET Framework.)

Se puede usar ODP.Net, sin embargo es lo que desean sus clientes de SQL Server a tener que instalar ODP.Net? (¿Desea que cualquiera de sus clientes a tener que instalar el software de Oracle?)

DataDirect no es una opción, ya que cuesta un brazo y una pierna ; que sólo puede ser asequible sobre si es necesario conectar un único servidor a una computadora central. Sin embargo, no es una opción para esperar que todos los clientes que compran.

Moving forma de C # a Java no es una buena opción, ya que soy un programador de C # y deseo ser capaz de ganarse la vida!

Al igual que la mayoría de los proveedores de software independientes que tienen que soportar múltiples RDBMS sólo necesitamos una solución que nos permite utilizar el pequeño subconjunto de Oracle que es lo mismo que SqlServer. Por lo tanto System.Data.OracleClient era lo suficientemente potente como para nosotros.

(Tal vez deberíamos empezar a almacenar todos los datos en archivos planos, así que deja de DBA de ese cliente intenta decirnos cómo escribir software. DBA Oracle son los peores!)


Mi verdadera pregunta es ¿cómo puedo escribir software .NET que se comunica con Oracle que nos es libre de dolor a instalado como software .NET que se comunica con SqlServer. Tener que utilizar ODP.NET sólo hace que el cliente de Oracle sin embargo, instalar más doloroso, sin embargo, con más a ir mal.

Si yo estaba usando JAVA tan sólo pudiera utilizar JDBC de tipo 4 conductores. Microsoft proporciona una para SQL Server y Oracle proporciona una para Oracle. Sin embargo, parece que Oracle quiere hacer uso de .Net tan duro como sea posible y Microsoft quiere hacer uso de Oracle tan duro como sea posible.


Hasta ahora, el mejor opción de Devart dotConnect .

Sin embargo estoy empezando a cuestionar .NET clima es un buen sistema de desarrollo para ISV, como tarde o temprano, siempre obtendrá un cliente que exige el apoyo de Oracle. En el mundo Java que parecen haber resuelto este problema.


Parece que Oracle puede estar a punto de llevar a cabo un senible themselfs proveedor ADO.NET Gestión Completa incluso puede ser fácil de instalar! ver aquí que las reclamaciones beta - 2011, Producción -. Finales de 2011

¿Fue útil?

Solución

EDIT: El ODP.NET totalmente gestionado ya está disponible en la producción. Es muy pequeño (menos de 10 MB) y no depende de otros archivos. Puede obtenerlo aquí:

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

Respuesta original:

Una forma de fácilmente asegurarse de que el software del lado del cliente requerido Oracle (incluyendo ODP.NET) está siempre disponible en la máquina de despliegue es incorporarlos con su solicitud. ODP.NET ha conseguido un mucho más fácil de incrustar ahora que XCOPY ODP.NET está disponible. Se puede descargar desde este enlace:

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

Con XCOPY ODP.NET, todo lo que necesita hacer al implementar su aplicación es la siguiente:

1) Copia de su aplicación a la máquina de destino

2) Ejecutar "install.bat" que copia un par de Oracle DLL a la máquina de destino (incluyendo ODP.NET y el lado del cliente de Oracle (OCI) de software)

3) Ejecutar "configure.bat", que realiza una "gacutil" y actualiza el registro de la máquina de destino

4) Proporcionar su aplicación con información de la cadena de conexión. Se puede utilizar la cadena de conexión EZConnect ( "nombre de host @ servicename") o usted (o su cliente) puede compartir configuraciones SQLNET preexistentes estableciendo la entrada de registro TNS_ADMIN o variable de entorno para apuntar a otra casa de Oracle que tiene SQLNET conectar alias ya configurados.

Eso es todo! Realmente es así de simple.

Espero que se tome una buena mirada a ODP.NET XCOPY en el enlace anterior para ver por sí mismo lo fácil que es en estos días para incrustar ODP.NET con su aplicación.


Notas adicionales:

Si decide no incrustar ODP.NET con su aplicación, tanto en el caso de Microsoft OracleClient y en el caso de ODP.NET, es necesario que haya un software adicional en el cliente de Oracle (OCI) instalado en cualquier máquina de despliegue. La única diferencia entre los dos casos es que cuando se está utilizando ODP.NET, también tiene que existir en la máquina de despliegue. La buena noticia es que una instalación típica de Oracle en su máquina cliente incluirá ODP.NET ya.

Ahora, si su equipo de destino ya ha instalado ODP.NET que no es necesario hacer nada más. Sólo tiene que distribuir su aplicación. Si es necesario instalar ODP.NET utilizando el instalador estándar, también se puede descargar desde el enlace que aparece más arriba. El estándar ODP.NET instalación sólo lleva unos minutos y configura todo para usted.

Y de nuevo, puede utilizar EZConnect conectar cadenas de hacer configuración de red de un pedazo de la torta, o utilizar la variable de entrada del registro TNS_ADMIN o ambiente para aprovechar preexistente conectar alias que su cliente ya está acostumbrado a utilizar.

Espero que esta ayuda,

Christian Shay

Oracle

No dude en darnos tu opinión sobre esta y otras funciones futuras en nuestra página web solicitud de función: http://apex.oracle.com/pls/apex/f? p = 18.357: 46

Otros consejos

¿Ha mirado a proveedores alternativos como Oracle dotConnect de Devart ? Este controlador, como un ejemplo, es 100% código administrado, soporta muchas características avanzadas de Oracle, brinda apoyo Entity Framework (que llegará algún día en ODP.NET, estoy seguro).

Hay un montón de otras características (como modelo de proveedor de soporte ASP.NET) que no llegamos hasta el lanzamiento ODP.NET 11g. licencias liberal bonita y un precio razonable. También viene con su propio generador de perfiles, si no recuerdo mal.

En sus pruebas , lleva a cabo favorablemente en comparación con ODP.NET. Me encantaría que apuntar a algo de código abierto, pero, en mi experiencia, una vez que has comprado en Oracle como base de datos, que ya ha aceptado el hecho de que se le que se establecen algo de dinero para sus herramientas relacionadas con bases de datos .

Hay una gran diferencia entre ser obsoleto y siendo eliminado.

Si sólo está utilizando el subconjunto de la funcionalidad que es común a ambos SQL Server y Oracle, a continuación, que debe estar bien en movimiento a través de ASP.Net 4.0 y continuando a programar cómo lo hace actualmente.

El uso de algo así como EntitySpaces , que le permiten ser relativamente independiente del proveedor. (Se utiliza en OracleClient es DAL)

Completamente de acuerdo con Philippe sobre el software de cliente de Oracle ser un dolor. He perdido la cuenta del número de veces que lo he instalado y odiaba la experiencia. Dame MySQL, SQL Server o incluso de acceso en la preferencia.

(En realidad, me retracto de la observación de Acceso): -)

Utilice "El patrón de la fábrica del proveedor", que básicamente está utilizando una fábrica para dar un proveedor de datos que está completamente abstraído de los métodos de petición de bases de datos que utiliza aquí es un entrada de blog con un código de ejemplo que muestra cómo hacer esto también Jean-Paul Boodhoo en Patrones Desmitificando diseño Parte 1 en dnrtv.com muestra cómo también.

Esto es un poco de materia muy fresca, básicamente, que tiene una fábrica que proporciona un métodos para conseguir una conexión

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

a pesar de una interfaz para que pueda llamar a cualquier tipo de base de datos que es objeto de conexión implementa la interfaz IDbConnection (SQL Server, MySQL, Oracle, etc.) y que funciona.

Por abstraerse de lo que su uso de DB incluso se puede cambiarlos en tiempo de ejecución y su aplicación nunca se sabe, que no necesita de modo que la conexión a una base de datos Orical, descargar el ODP.NET , lo mismo con conector MySQL tanto implementar IDbConnection y escribir su código contra la conexión abstraída.

Además de lo que otros han sugerido que podría considerar el uso del patrón de proveedores y ODP.NET de Oracle.

Al ser independiente de base de datos es un trabajo muy difícil porque hay un montón de cosas específicas (variable de nombres se unen, la cita de objetos, ...). Utilice una biblioteca como NHibernate que pone una capa entre la aplicación y la base de datos real.

Si usted tiene que conectar a ambas bases de datos, que se trata de una cuestión de implementación. Si se conecta a Oracle (usando System.Data.OracleClient o Oracle.DataAccess.Client) necesita tener instalado en su máquina software de cliente de Oracle. El proveedor de base de datos se implementa con marco no es suficiente para conectarse a una base de datos Oracle.

Si se conecta a Oracle, tiene que instalar el software de Oracle. Si tiene miedo de la desaprobación, de instalar y utilizar ODP.Net. Hay algunas diferencias entre el proveedor de base de datos Oracle 2.

Para una mejor implementación de Oracle introdujo el concepto de instantánea cliente . Este cliente se distribuyen mediante la implementación xcopy. Oracle sine 11 el instante cliente puede estar incluido en ODP.Net.

La instalación de ODP.Net se describe en el puesto de Cristiano Shay.

El montaje Oracle.DataAccess no debe ser in die caché de ensamblados global. Ponerlo en el directorio bin. El cliente instantánea utilizado por Oracle.DataAccess no debe estar en un directorio diferente en la máquina cliente. Ponerlo en el directorio bin. El documentación se describe cómo configurar la aplicación para encontrar un cliente instantánea.

¿Quieres mediante ODBC tanto para ser viable?

Mientras no se debe invocar un objeto ODP.Net, no es necesario instalar PAO si sólo el acceso de SQL Server.

Creo que todavía puede utilizar ODBC SQL Server y Oracle con un poco de transparencia, por lo que sería echar un vistazo a utilizar ADO.Net con el proveedor de ODBC. No le dará todo el rendimiento o características que SqlClient o OracleClient serían, pero debe ser bastante cerca del mismo código para Oracle o SQL Server.

Es posible considerar el uso de SubSonic 3.0 ! Tengo que ejecutar mi aplicación basada en SQL Server, MySQL y SQLite y el usuario puede cambiar entre estos 3 en tiempo de ejecución!

En mi experiencia, no se puede simplemente implementar la DLL de proveedor de datos ODP.NET. Oracle requiere una instalación de inicio para algo más que la configuración por defecto (por ejemplo, se utiliza la resolución de nombres LDAP, lo que requiere un archivo LDAP.ora en una ruta principal especial).

Sin embargo, ODP.NET implementa el estándar 2.0 ADO.NET bien (DbProviderFactory, etc). Y he programado en contra de las clases base (DbConnection, DbCommand, etc) sin necesidad de las clases específicas para algún tiempo en mi compañía.

Mi sugerencia para hacer este trabajo de acceso a los datos es usar / seguir la guía en el EntLib o utilizar NHibernate .

Si usted tiene una logística o la instalación de TI ODP.NET o conseguir a su cliente / cliente problema, le sugiero que hable con el personal de TI y Oracle sobre las soluciones para ello.

El cliente debe instalar odp.net y el cliente de Oracle de la existencia de máquinas. Usted no debe desplegarlo. Su solicitud será encontrar los necesarios de Oracle DLL en el GAC.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top