visual tools studio framework for developer dataaccess conectar con 11g .net sql-server oracle ado.net odp.net

.net - framework - oracle developer tools for visual studio 2017



Cómo escribir una aplicación.Net que funcione con SqlServer y Oracle(ahora que System.Data.OracleClient está en desuso) (13)

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

(En primer lugar, no entre en pánico todavía, Microsoft no está eliminando System.Data.OracleClient todavía, sin embargo, no está en la versión de cliente de .net 4)

Este uso es posible mediante el uso de System.Data.OracleClient, sin embargo , Microsoft ha decidido depreciar OracleClient . (OracleClient es el proveedor ADO.NET para Oracle desarrollado por Microsoft y enviado como parte del .NET Framework).

Puede usar ODP.Net, pero ¿desea que sus clientes de Sql Server tengan que instalar ODP.Net? (¿Desea que alguno de sus clientes tenga que instalar el software Oracle?)

DataDirect no es una opción, ya que cuesta un brazo y una pierna; puede ser asequible si necesita conectar un solo servidor a un mainframe. Sin embargo, no es una opción esperar que todos los clientes lo compren.

Mover C # a Java no es una buena opción, ya que soy un programador de C # y ¡deseo poder ganarme la vida!

Al igual que la mayoría de los ISV que tienen que soportar múltiples RDBMS, solo necesitamos una solución que nos permita usar el pequeño subconjunto de Oracle que es lo mismo que SqlServer. Por lo tanto System.Data.OracleClient fue lo suficientemente potente para nosotros.

(Quizás deberíamos comenzar a almacenar todos los datos en archivos planos, para que el DBA del cliente deje de decirnos cómo escribir software. ¡Los DBA de Oracle son peores!)

Mi verdadera pregunta es cómo puedo escribir el software .NET que habla con Oracle y que no nos molesta instalarlo como software .NET que habla con SqlServer. Tener que usar ODP.NET solo hace que la instalación del cliente Oracle sea aún más dolorosa, con aún más errores.

Si estuviera usando JAVA, podría usar los controladores JDBC de tipo 4. Microsoft proporciona uno para SqlServer y Oracle proporciona uno para Oracle. Sin embargo, parece que Oracle desea que el uso de .Net sea lo más difícil posible y Microsoft desea que el uso de Oracle sea lo más difícil posible.

Hasta ahora, la mejor opción se parece a dotConnect de devArt .

Sin embargo, estoy comenzando a cuestionar el clima .NET es un buen sistema de desarrollo para ISV, ya que tarde o temprano siempre obtendrá un cliente que necesita soporte Oracle. En el mundo de Java, parecen tener este problema resuelto.

¡Parece que Oracle puede estar a punto de sacar un proveedor de ADO.NET Sennible Totalmente Administrado por sí mismo, incluso puede ser fácil de instalar! mira aquí que afirma Beta - 2011, Producción - Finales de 2011.


¡Puede considerar usar SubSonic 3.0 ! Lo tengo ejecutar mi SQLServer, MySQL y aplicación SQLite y el usuario puede cambiar entre estos 3 en tiempo de ejecución.


¿Sería factible usar ODBC para ambos?


Además de lo que otros han sugerido, podría considerar usar el patrón de Proveedor y ODP.NET de Oracle.


Creo que ODBC todavía puede usar tanto SQL Server como Oracle con cierta transparencia, por lo que consideraría el uso de ADO.Net con el proveedor de ODBC. No le proporcionará todo el rendimiento o las características que SqlClient u OracleClient tendrían, pero debería estar muy cerca del mismo código para Oracle o SQL Server.


El cliente debe instalar odp.net y el cliente de Oracle en sus máquinas. No deberías implementarlo. Su aplicación encontrará los dll de Oracle necesarios en el GAC.


En mi experiencia, no se puede simplemente implementar el DLL del proveedor de datos ODP.NET. Oracle requiere una instalación de Home para algo más que la configuración predeterminada (por ejemplo, utilizamos la resolución de nombre de LDAP, que requiere un archivo LDAP.ora en una ruta de inicio especial).

Sin embargo, ODP.NET implementa muy bien los estándares ADO.NET 2.0 (DbProviderFactory, etc.). Y he programado contra las clases base (DbConnection, DbCommand, etc.) sin necesidad de clases específicas durante algún tiempo en mi empresa.

Mi sugerencia para hacer que este acceso a datos funcione es usar / seguir las instrucciones en Entlib o usar NHibernate .

Si tiene un problema de logística o de TI instalando ODP.NET o llevándolo a su cliente / cliente, le sugiero que hable con su personal de TI y Oracle sobre las soluciones para eso.


Hay una gran diferencia entre ser obsoleto y ser eliminado.

Si solo está utilizando el subconjunto de funcionalidades que es común tanto para SQL Server como para Oracle, entonces debería estar bien moviéndose a ASP.Net 4.0 y continuar programando cómo lo hace actualmente.

Usar algo como EntitySpaces te permitiría ser relativamente independiente del proveedor. (usa OracleClient en su DAL)

Estoy totalmente de acuerdo con Philippe en que el software de cliente de Oracle es un problema. He perdido la cuenta de la cantidad de veces que lo he instalado y odio la experiencia. Dame MySQL, SQLServer o incluso acceso de preferencia.

(En realidad, retomo el comentario de Access) :-)


Siempre que no invoque un objeto ODP.Net, no necesita instalar ODP si solo tiene acceso a SQL Server.


Utilice el "Patrón de fábrica del proveedor" que básicamente está usando una fábrica para dar un proveedor de datos que está completamente abstraído de los métodos de solicitud de base de datos que lo utilizan. Aquí hay un blog con código de muestra que muestra cómo hacerlo también Jean-Paul Boodhoo sobre la desmitificación de patrones de diseño Parte 1 en dnrtv.com muestra cómo hacerlo también.

Esto es algo muy bueno, básicamente, tienes una fábrica que proporciona métodos para obtener una conexión

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

a través de una interfaz para que pueda llamar a cualquier tipo de Base de datos cuyo objeto de conexión implemente la interfaz IDbConnection (SQLServer, MySQL, Oracle, etc.) y simplemente funciona.

Al abstraer el DB que usa, incluso puede intercambiarlos en tiempo de ejecución y su aplicación nunca lo sabrá, no es necesario conectarlo a un Orical DB, descargar ODP.NET , lo mismo con el conector mysql ambos implementar IDbConnection, y escribe tu código contra la conexión abstraída.


¿Has mirado a proveedores alternativos de Oracle como dotConnect de devArt ? Este controlador, por ejemplo, es un código administrado al 100%, admite muchas características avanzadas de Oracle, brinda soporte de Entity Framework (que seguro vendrá algún día en ODP.NET).

Hay muchas otras características (como el soporte del modelo de proveedor de ASP.NET) que no obtuvimos hasta la versión 11g de ODP.NET. Licencia bastante liberal y con un precio razonable. También viene con su propio generador de perfiles, si no recuerdo mal.

En sus pruebas , se desempeña favorablemente en comparación con ODP.NET. Me encantaría señalarte algo de código abierto pero, en mi experiencia, una vez que has comprado Oracle como base de datos, ya has aceptado el hecho de que estarás depositando algo de dinero en efectivo para tus herramientas relacionadas con la base de datos. .


Ser independiente de la base de datos es un trabajo muy difícil porque hay muchas cosas específicas (vinculación de nomenclatura variable, cita de objeto, ...). Use una biblioteca como NHibernate que coloca una capa entre su aplicación y la base de datos real.

Si tiene que conectarse a ambas bases de datos, entonces es una cuestión de implementación. Si se conecta a Oracle (utilizando System.Data.OracleClient u Oracle.DataAccess.Client), necesita el software de cliente Oracle instalado en su máquina. El proveedor de base de datos implementado con framework no es suficiente para conectarse a una base de datos de Oracle.

Si se conecta a Oracle, debe instalar el software de Oracle. Si le teme a la depreciación, entonces instale y use ODP.Net. Hay algunas diferencias entre el proveedor de la base de datos 2 oracle.

Para un mejor despliegue, Oracle introdujo el concepto de cliente instantáneo . Este cliente puede implementarse utilizando la implementación de xcopy. Sine Oracle 11 el cliente instantáneo se puede unir con ODP.Net.

La instalación de ODP.Net se describe en el post de Christian Shay.

El ensamblado Oracle.DataAccess no debe estar en el caché de ensamblaje global. Ponlo en tu directorio bin. El cliente instantáneo utilizado por Oracle.DataAccess no debe estar en un directorio diferente en su máquina cliente. Ponlo en tu directorio bin. La documentación describe cómo configurar su aplicación para encontrar un cliente instantáneo.


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

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

Respuesta original:

Una forma de garantizar fácilmente que el software requerido del lado del cliente de Oracle (incluido ODP.NET) esté siempre disponible en la máquina de implementación es incrustarlo con su aplicación. ODP.NET se ha vuelto mucho más fácil de incorporar ahora que XCOPY ODP.NET está disponible. Puedes descargarlo desde este enlace:

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

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

1) Copie su aplicación a la máquina objetivo

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

3) Ejecute "configure.bat", que hace un "gacutil" y actualiza el registro de la máquina de destino

4) Proporcione a su aplicación la información de la cadena de conexión. Puede usar la cadena de conexión EZCONNECT ("hostname @ servicename") o usted (o su cliente) puede compartir configuraciones preexistentes de sqlnet configurando la entrada de registro TNS_ADMIN o la variable de entorno para que apunte a otra casa Oracle que tenga alias de conexión sqlnet ya configurados.

¡Eso es! Es así de simple.

Espero que eche un vistazo a ODP.NET XCOPY en el enlace de arriba para ver lo fácil que es en estos días insertar ODP.NET con su aplicación.

Notas adicionales:

Si opta por no incrustar ODP.NET con su aplicación, tanto en el caso de Microsoft OracleClient como en el caso de ODP.NET, es necesario que haya software adicional del lado del cliente de Oracle (OCI) instalado en cualquier máquina de despliegue. La única diferencia entre los dos casos es que cuando usa ODP.NET, también debe existir en la máquina de despliegue. La buena noticia es que una instalación típica de Oracle en su equipo de cliente ya incluirá ODP.NET.

Ahora, si su máquina de destino ya tiene instalado ODP.NET, no necesita hacer nada más. Solo necesita distribuir su aplicación. Si necesita instalar ODP.NET utilizando el instalador estándar, también puede descargarlo desde el enlace proporcionado anteriormente. La instalación estándar de ODP.NET solo toma unos minutos y configura todo para usted.

Y de nuevo, puede usar las cadenas de conexión EZConnect para simplificar la configuración de red, o usar la entrada de registro TNS_ADMIN o la variable de entorno para aprovechar los alias de conexión preexistentes que su cliente ya está acostumbrado a utilizar.

Espero que esto ayude,

Christian Shay

Oráculo

No dude en enviarnos sus comentarios sobre esta y otras funciones futuras en nuestro sitio web de solicitud de funciones: http://apex.oracle.com/pls/apex/f?p=18357:46