standard que net c# .net oracle

c# - que - ¿Cómo uso Oracle desde.NET?



net standard 2.0 download (5)

Desafortunadamente, estoy tratando de usar Oracle desde .NET y es como volver a 1997. Explicar las cosas correctamente es un signo de debilidad y las variables de registro y entorno parecen destacar.

Así que aquí está lo lejos que he llegado.

Llené un gran formulario sobre mi vida en Oracle.com y descargué el

ODBC Windows 64-bit Instance Client, 11.2.0.3.0 y lo descomprimió en una carpeta. Cliente básico de Windows de 64 bits básico, 11.2.0.3.0 y lo descomprimió en la misma carpeta que la anterior.

Ejecuté el archivo .exe de instalación (no MSI, recuerda que esto es 1997).

Agregué una variable de entorno TNS_NAMES que apunta al archivo corporativo TNSNames.ora en un recurso compartido de red y configuré un DSN rápido en el Panel de control y ejecuté la prueba. ¡Funcionó!

Luego descargué la versión XCOPY de la última versión de ODP.NET para .NET 4.0 y la copié en mi carpeta de Dependencias en mi área de trabajo de control de fuente.

Agregué una referencia de mi proyecto a Dependencies / odp.net4 / odp.net / bin / 4 / Oracle.DataAccess.dll

He leído que necesito dejarle saber a ODP.NET administrado dónde puede encontrar sus bibliotecas no administradas de Oracle, que supongo son Dependencies / odp.net4 / bin / OraOps11w.dll pero podrían ser algunos otros binarios de Oracle ¿algun lado?

Ahora estoy configurando un parámetro de archivo de configuración llamado DllPath. Lamentablemente, los documentos de Oracle parecen no darse cuenta de que los archivos de configuración .NET necesitan que sus secciones se conecten en la sección configSections.

Aquí está la sección del archivo de configuración.

<oracle.dataaccess.client> <add key="DllPath" value="D:/Trunk/Dependencies/odp.net4/bin" /> </oracle.dataaccess.client>

¿Qué pasa en la sección de configuración? Los pocos hilos que he encontrado en este dan un ejemplo y luego dicen "No sé qué tipo = debería ser", que es el bit principal.

¿Alguien me puede aconsejar? ¿Alguien sabe un enlace a una Guía de Dummies para consultar una vista de Oracle desde .NET?

¿Hay algo que pueda hacer en 1997 para evitar tener que usar Oracle en 2012?

ACTUALIZAR

Sólo una actualización rápida. He copiado OraOps11w.dll en mi carpeta de la bandeja de salida y he eliminado cualquier cambio en el archivo web.config que había añadido anteriormente.

Ahora me sale el siguiente error, que estoy investigando.

No se pudo cargar el archivo o el ensamblaje ''Oracle.DataAccess'' o una de sus dependencias. Se intentó cargar un programa con un formato incorrecto.

Algunos otros foros hablan sobre el registro de Oracle.DataAccess.dll en el GAC, que estoy dispuesto a evitar, y no puedo ver cuál sería la diferencia de todos modos, pero lo intentaré.

ACTUALIZACIÓN 2

El registro de la biblioteca Oracle.DataAccess.dll en el GAC no hizo ninguna diferencia y lo he eliminado.

El final de la semana laboral está sobre mí y tengo que tomar un tren, pero he enviado un correo electrónico a otro equipo de desarrolladores aquí y espero que hayan peleado esta batalla antes (y que no hayan usado extractos nocturnos como todos los demás).

ACTUALIZACIÓN 3

Esta mañana descargué y configuré IIS Express 8.0 RC, que tiene una versión de 64 bits. La versión de 64 bits no es compatible con VS2010, por lo que debe ejecutarse desde la línea de comandos. Esto fue bastante simple, al buscar en el Administrador de tareas, pude ver qué línea de comandos usa VS para iisexpress.exe * 32.

Desafortunadamente, recibo este error cuando navego a mi sitio alojado por IIS Express de 64 bits.

El controlador "ExtensionlessUrl-Integrated-4.0" tiene un módulo incorrecto "ManagedPipelineHandler" en su lista de módulos

Este es un problema demasiado lejano en esta línea de investigación, así que intentaré usar la versión de 32 bits de ODP.NET.

ACTUALIZACIÓN 4

Descargué la instalación completa de la versión de 32 bits, pero me asusté cuando vi el Universal Installer de Oracle. Parece demasiado 90 para confiar con mi preciosa caja de desarrollo. Así que estoy usando el cliente ''XCopy'' de 32 bits, esto me permite abrir la página de inicio de mi sitio, por lo que las referencias funcionan. Gracias por aquellos que sugirieron un problema de arquitectura 32/64.

Ahora estoy investigando este error al crear una instancia de una nueva OracleConnection.

El proveedor no es compatible con la versión del cliente de Oracle.

ACTUALIZACIÓN 5 Creo que lo he hecho.

Así que descargué el último "cliente instantáneo" de 11 bits de 11 bits y lo puse en mi carpeta / Dependencias para el código base de la solución. Agregué esta carpeta a la variable de entorno del sistema% PATH% y también colgué el archivo OraOps11w.dll allí.

Finalmente, _oracleConnection = ¡la nueva OracleConnection (connectionString) no se lanza! Ahora necesito asegurarme de que tengo una botella de Laphroaig en el escritorio cuando vengo a desplegar para pinchar.

Entonces, para resumir, para IIS Express 7.5 (que es un proceso de 32 bits) en Windows 7, 64:

  • Descargue y extraiga el "Cliente instantáneo" 11g de 11 bits a alguna carpeta y agregue esta ubicación a su RUTA. Oci.dll es la principal biblioteca no administrada del lado del cliente de Oracle.

  • Descargue y extraiga el ODP.NET de 32 bits a alguna carpeta.

  • Copie OraOps11w.dll en la carpeta principal en la que reside el cliente instantáneo (arriba).

  • Agregue una variable de entorno TNS_ADMIN que apunta a una carpeta en la que reside el archivo de texto TNSNames.ora. Esto es como un archivo de hosts y asigna nombres de servicio de Oracle a los nombres de host del servidor.

  • Cierre y vuelva a abrir Visual Studio para asegurarse de recoger las nuevas variables de entorno y agregue una referencia al ensamblado administrado Oracle.DataAccess.dll en su carpeta ODP.NET.

Eso debería ser. Suena bastante simple cuando sabes cómo.

ACTUALIZACIÓN 5.1

Investigando el error a continuación, que originalmente no informé porque estaba seguro de que era un problema de firewall. La compañía en la que estoy tiene dos en cada estación de trabajo, pero acabo de abrir un socket en bruto para el servidor de Oracle por lo que no puede ser.

ORA-12541: TNS: sin oyente


En primer lugar, +1 por tu amor sin adulterar a Oracle, y dándote cuenta de que son la mejor compañía con los mejores productos. ;)

Sí, el proceso de descarga e instalación es ridículo. Por lo general, ni siquiera puedo encontrar la descarga de cliente correcta en su sitio, y el instalador de productos de Oracle Universal es terrible.

A veces, necesitará una copia de OraOps11w.dll en su directorio /bin . A veces no. Nunca he descubierto cuándo es necesario y cuándo no lo es, pero creo que si su referencia Oracle.DataAccess.dll no es exactamente la misma versión que el cliente Oracle instalado, entonces necesita el OraOps11w.dll .

¿Puede explicar lo que está tratando de hacer en su archivo de configuración con DllPath ? La instalación de Oracle debería haber registrado casi todo lo que necesita en el machine.config para su tiempo de ejecución .NET. Ha pasado un tiempo desde que configuré ODP.NET, pero no recuerdo que haya mucho que poner en la aplicación .config, aparte de la cadena de conexión.


He tenido el mismo problema y descubrí que ejecutar la desconfiguración y configuración de archivos bat en la versión copiada de la instalación del software Oracle.DataAccess.dll 11.x puede resolver o ayudar a resolver el problema.

Por ejemplo, configure.bat xxx.netx xxx / producto / 11.2.0 / cliente_1


La forma más sencilla de explicar el problema es señalar la diferencia entre el Cliente Oracle y las bibliotecas del cliente ODAC.

En una máquina de 64 bits (Windows 7+), debe tener instalado el Cliente Oracle de 64 bits. Este es el cliente que su máquina utilizará para conectarse a las bases de datos de Oracle que se implementan localmente en su máquina. Para las aplicaciones alojadas en un servidor web u otro servidor de terminal, la regla es la misma.

El truco es este ... como desarrollador, nuestras máquinas también deben tener las herramientas .Net IDE. Oracle tiene una convención de nomenclatura de mierda, pero esencialmente hay 2 partes: ODT (herramientas) y ODAC (acceso a datos). El proveedor de datos ODP.Net es una parte de las bibliotecas ODAC.

Entonces ... volviendo al IDE ... Visual Studio es de 32 bits y, por lo tanto, debemos instalar las herramientas anteriores en 32 bits.

Durante el desarrollo, la depuración, etc. VS.Net está utilizando las bibliotecas de cliente de 32 bits y las bibliotecas de acceso a datos para trabajar con Oracle.

Tan pronto como implementa esta aplicación en una máquina, utiliza cualquier Cliente que esté cargado en la máquina a menos que una plataforma específica esté dirigida.

Esto significa que si apuntas a 32 e implementas a 64, se romperá ... y viceversa. Lo mejor que puedes hacer es dejarlo en la sección de cualquier plataforma, y ​​simplemente recuerda qué demonios estás haciendo :)

La otra cosa con la que hay que tener cuidado es asegurarse de que los paquetes de su Cliente y ODAC sean de la misma versión ... no desea tener el cliente 11g R2 y el ODAC 11g R5, porque tan pronto como lo implemente, vuelva a cagarse.

La advertencia aquí es si desea "incrustar" el cliente oracle dentro de su aplicación, en cuyo caso OraOps junto con otras bibliotecas se implementan con la aplicación, esto se denomina Cliente Instantáneo de Oracle, también forma parte del paquete ODAC y se incluye en su paquete completo de cliente también.

Las buenas noticias...

Oracle estará pronto (2013 Q1) para lanzar su próximo paquete ODP.Net ... que será una biblioteca de códigos totalmente administrados ... lo que significa que no habrá más paquetes separados de clientes o ODAC para hacer coincidir, y la plataforma ignorará 32 y las distinciones de 64 bits ... funcionará de manera muy similar a como lo haría la antigua biblioteca de microsoft, solo que será creada y mantenida por oracle con un conjunto de características más sólido. Solo me gustaría que llegara antes.


No creo que este sea un problema de camino. "Se intentó cargar un programa con un formato incorrecto". es un error que casi siempre significa que está mezclando conjuntos de 32 y 64 bits y DLL en .NET.

Me di cuenta de que instaló el cliente de Oracle de 64 bits. Supongo que desde que funcionó la creación de DSN que está en una versión de 64 bits del sistema operativo. Su problema podría ser de una serie de escenarios relacionados:

  • Su copia de OraOps11w.dll podría ser un ensamblaje de 32 bits y lo está utilizando en una aplicación de 64 bits
  • Su copia de OraOps11w.dll podría ser un ensamblaje de 64 bits y está intentando usarlo desde una aplicación de 32 bits.
  • una de las dependencias no administradas de Oracle Data Provider para .NET es de 32 bits y no se puede cargar en su aplicación de 32 bits (o viceversa)

Creo que si su aplicación apunta a x86 específicamente, debe instalar el paquete del cliente de Oracle de 32 bits independientemente de la plataforma del sistema operativo subyacente (por ejemplo, todavía necesitaría el cliente de Oracle de 32 bits para una aplicación de 32 bits, incluso si estuviera usando una versión de 64 bits). versión de bit de Windows)

Un par de cosas para comprobar:

  • Verifique su configuración de "Objetivo de plataforma" en su ensamblaje que llama al proveedor de Oracle: x64 siempre intentará ejecutarse como de 64 bits, x86 siempre intentará ejecutarse como de 32 bits y "Cualquier plataforma" compilará JIT para la arquitectura del sistema operativo de destino en tiempo de ejecución (32 bits en un sistema x86 y 64 bits en un sistema x64)
  • Ejecute OraOps11w.dll a través de corflags.exe (consulte los detalles en esta publicación SO ) para ver si es de 32 bits, 64 bits o "Cualquier CPU"

Por último, ¿ha intentado incorporar un proveedor de datos .NET para Oracle (espacio de nombres System.Data.OracleClient?)

Es lo mejor que puedo hacer ya que no sé más acerca de la configuración de sus proyectos para su aplicación.


Pasé días en el pasado tratando de conectar Oracle en Windows 7.

El problema que encontré fue que tenía una aplicación ASP.NET de 32 bits con los controladores Oracle ODP.NET de 32 bits instalados. No sabía que, aunque la aplicación ASP.NET se ejecuta como un proceso de 32 bits y requiere ODP.NET de 32 bits, IIS es un proceso de 64 bits y hace que ODP.NET acceda al registro de 64 bits. llaves. No mencionó si estaba intentando configurar Oracle para ASP.NET, pero compartiré mi corrección (aunque es para la instalación de Oracle 10.2) .

( Estoy copiando esto literalmente de mi blog )

Nota: esto obliga a Oracle 11.2.0.1 a usar 32 bits solo en un entorno de 64 bits.

El primer error que cometí fue instalar el cliente Oracle 10g en Windows 7. Esto NO funcionará. Si lo instala, tendrá que realizar una limpieza después.

  • Vaya al sitio de Oracle y descargue / instale los clientes 11g de 32 bits y 64 bits.
  • Vaya aquí y siga los pasos de "Entrada de registro ficticio".
  • Abra regedit y verifique que HKLM/SOFTWARE/Wow6432Node/ORACLE/inst_loc apunta a la ubicación correcta (probablemente C: / oracle / Inventory)
  • Apunte la entrada del registro en HKLM/SOFTWARE/Wow6432Node/ORACLE/VOBHOME2.0 a la carpeta Oracle de 32 bits
  • Cree una variable de entorno ORACLE_HOME y ORACLE_HOME a la carpeta de 32 bits.

Ahora debería estar todo listo después de un reinicio.

Si intentó instalar el cliente Oracle 10g, tendrá que realizar una limpieza. Primero, asegúrese de que Oracle 10g esté completamente desinstalado, eliminado de su variable PATH, y se elimine el directorio. Luego, encuentre los ensamblados a los que se hace referencia en el GAC:

gacutil /l | find /i "Oracle" > c:/[some directory]/oracle.txt

Busque las líneas que se refieren a Oracle.DataAccess versión 10.2 y elimínelas del GAC. Como ejemplo (esto no funcionará a menos que tenga instalada la misma versión):

gacutil /u "Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342"

Cuando hice esto, tuve tres ensamblajes para eliminar:

  1. Oracle.DataAccess
  2. Policy.10.1.Oracle.DataAccess
  3. Policy.9.2.Oracle.DataAccess

Una vez más, es probable que necesites reiniciar (bueno, es Windows).

Si necesitas realizar alguna limpieza, también he escrito en mi blog sobre eso.

Para referencia
En caso de que el enlace a los pasos de la "entrada de registro ficticia" muera, aquí está el texto de esa publicación de Gadi:

"" Hola Ben,

En el momento del diseño, cuando se trabaja con SQL Server Business Intelligence Development Studio, el Oracle Connector se ejecuta en modo de 32 bits y, por lo tanto, carga el cliente Oracle de 32 bits.

Lo más probable es que esté recibiendo el error porque el conector está cargando el cliente de Oracle incorrecto (oci.dll), donde el servicio TNS no está definido.

Para resolver el problema, tienes dos opciones:

  1. Especifique la cadena de conexión de Oracle, en lugar del nombre del servicio TNS en el Editor de Oracle Connection Manager, por ejemplo, en el siguiente formato: host:port/service_name

  2. Defina una entrada de registro ficticia ( Z_SSIS ) de la siguiente manera:

    • Abra la utilidad regedit.
    • Localice la siguiente clave: HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/ORACLE .
    • Haga clic derecho en el nodo ORACLE y haga clic en Nuevo -> Clave.
    • Llame a la nueva clave Z_SSIS (para asegurarse de que sea la última entrada).
    • Haga clic derecho en el nodo Z_SSIS y haga clic en Nuevo -> Cadena.
    • Nombra la propiedad ORACLE_HOME .
    • Haga doble clic en ORACLE_HOME y ORACLE_HOME en la ubicación del directorio de inicio de instalación de Oracle 32Bit que desea utilizar.

Saludos,

Gadi ""