149 votos

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

Estoy tratando de usar el Oracle ODP.NET 11g (11.1.0.6.20) Cliente instantáneo en mi proyecto ASP.net como Proveedor de datos pero cuando ejecuto la página aspx obtengo un " El proveedor no es compatible con la versión del cliente de Oracle "Mensaje de error. Cualquier ayuda sería apreciada.

He referenciado el Proveedor de Datos en Visual Studio 2005 y el código detrás se ve así:

using Oracle.DataAccess.Client;
..

OracleConnection oOracleConn = new OracleConnection();
oOracleConn.ConnectionString =
    "Data Source=MyOracleServerName;" +
    "Integrated Security=SSPI";
oOracleConn.Open();

//Do Something

oOracleConn.Close();

El error de la página se ve así:

Exception Details: Oracle.DataAccess.Client.OracleException: The provider is not compatible with the version of Oracle client

Source Error: 
Line 21: 
Line 22: 
Line 23:             OracleConnection oOracleConn = new OracleConnection();
Line 24:             oOracleConn.ConnectionString =
Line 25:                 "Data Source=MyOracleServerName;" +

[OracleException (0x80004005): The provider is not compatible with the version of Oracle client]
   Oracle.DataAccess.Client.OracleInit.Initialize() +494
   Oracle.DataAccess.Client.OracleConnection..cctor() +483

Stack Trace: 
[TypeInitializationException: The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception.]
   Oracle.DataAccess.Client.OracleConnection..ctor() +0
   Boeing.IVX.Web.RoyTesting.Page_Load(Object sender, EventArgs e) in C:\Documents and Settings\CE218C\Desktop\IVX.Net\Web\IVX\RoyTesting.aspx.cs:23
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +47
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436

86voto

Chris Puntos 13472

He estado investigando este problema más a fondo, y simplemente hay que coger todas las DLLs apropiadas de la misma versión descargada de ODP.Net y ponerlas en la misma carpeta que el archivo Exe, porque ODP.Net es muy quisquilloso en cuanto a no mezclar los números de versión.

He explicado cómo hacer esto aquí: http://splinter.com.au/using-the-new-odpnet-to-access-oracle-from-c Sin embargo, aquí está lo esencial:

  • Descargue http://www.oracle.com/technology/software/tech/Windows/odpnet/index1110710beta.html
  • Descomprime el archivo
  • Descomprime todos los JAR que hay en él
  • Coge estos dll's que acaban de ser abiertos:
    • oci.dll (renombrado de 'oci.dll.dbl')
    • Oracle.DataAccess.dll
    • oraociicus11.dll
    • OraOps11w.dll
    • orannzsbb11.dll
    • oraocci11.dll
    • ociw32.dll (renombrado de 'ociw32.dll.dbl')
  • Ponga todos los DLLs en la misma carpeta que su ejecutable C#

44voto

Tod Thomson Puntos 1145

Deberías "ignorar" toda la charla x86/x64 de aquí para empezar y en su lugar probar el ODP.NET Managed Driver (si estás usando .Net 4):

https://www.nuget.org/packages/odp.net.managed/

Oracle ODP.net Administrado vs. Controlador no Administrado

¡Evita todo lo "no gestionado" que DLL lo que la arquitectura publica! :D (sobre el tiempo Oracle).

34voto

EverTheLearner Puntos 1517

Sólo instalé el Proveedor de datos del Oracle para .NET 2.0 (11.1.0.6.20) y no instalé el Cliente instantáneo de Oracle (11.1.0.6.0) .

¡Acabo de instalarlo y el error ha desaparecido!

31voto

Daniel Puntos 245

Esto puede ser causado por la ejecución de un tiempo de ejecución de 64bit .NET contra un cliente Oracle de 32bit. Esto puede suceder si tu servidor está ejecutando la aplicación en él 64 bit. Se ejecutará la aplicación .NET con el tiempo de ejecución de 64 bits. Puedes poner el indicador de CPU en tu proyecto en VS para que se ejecute en el tiempo de ejecución de 32 bits.

5voto

SKG Puntos 725

Para el Oracle 11g (11.1.0.7.20) tuve que añadir los siguientes dlls junto con mi Exe para trabajar.

  1. oci.dll
  2. OraOps11w.dll
  3. oraociicus11.dll (bastante grande cerca de 30mb)
  4. Oracle.DataAccess.dll

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X