2010-10-14 36 views
22

He escrito una aplicación C# que se conecta a una base de datos Oracle 10g. Usando Oracle Data Access Component 11.2 "ODAC", funciona perfectamente en mi máquina.¿Cómo puedo implementar una aplicación .NET que use ODAC sin instalar todo el componente para el usuario?

Y ahora quiero implementar la aplicación e instalarla en otra "máquina limpia" que solo tenga .NET Framework. ¡Y no quiero instalar todo el componente ODAC para el usuario!

¿Cómo podría hacer eso? He tratado de incluir todos los archivos DLL necesarios a mi carpeta bin, como:

  • oci.dll
  • OCIW32.DLL
  • Oracle.DataAccess.dll
  • orannzsbb11.dll
  • oraocci11 .dll
  • oraociicus11.dll
  • OraOps11w.dll
  • msvcr71.dll

Pero aún así no funcionó. ¿Qué debo hacer para resolver este problema?

Respuesta

8

No estoy seguro de si su preocupación es tener que instalar el cliente de Oracle además de la instalación de ~ 50 MB ODAC o solo el ODAC independiente.

Si la preocupación se trata de tener que instalar el cliente de Oracle y el ODAC, puede usar el Oracle Instant Client? Ese es el método de huella más pequeño para instalar el cliente de Oracle. También necesitará el suplemento de ODAC xcopy.

Si su preocupación es solo la instalación de ODAC, no creo que haya una huella más pequeña disponible.

+0

corregirme si iam wrong ... tengo que instalar el cliente instantáneo de Oracle en todas las máquinas que ejecutarán mi aplicación ?? y ¿qué quieres decir con el suplemento de ODAC XCopy? ¿te refieres al dll que mencioné antes? Muchas gracias por su ayuda – 3oon

+0

Correcto. El cliente instantáneo debería estar instalado en cada máquina cliente. Pero el cliente instantáneo está diseñado para ser incluido con las aplicaciones y está compuesto por solo un puñado de DLL. El complemento ODAC Xcopy se vincula desde la página Instant Client. No he comparado el conjunto de archivos DLL que componen el conjunto de archivos DLL que enumeró. –

27

No necesita instalar ningún cliente de Oracle por separado. He instalado lo siguiente en el mismo directorio que el archivo .exe:

Oracle.DataAccess.dll 

    oci.dll 

    OraOps11w.dll 

    oraociei11.dll 

    msvcr71.dll 

Asegúrese de que el proyecto hace referencia a la misma Oracle.DataAccess.dll que va a entregar. Esto funcionó en una PC nueva que nunca había tenido clientes Oracle instalados.

I evitarse usando TNSNAMES.ORA por especificando una cadena de conexión como esta

connectionstring = Data Source = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST =) (PORT =))" + "(CONNECT_DATA = (= SERVIDOR DEDICADO) (SERVICE_NAME =)))"

Si está utilizando tNSNAMES.ORA acaba de cortar y pegar los detalles de la conexión en una cadena de una sola línea.

ver What is the minimum client footprint required to connect C# to an Oracle database?

para más información.

  • ejm

Para obtener información sobre cómo obtener los archivos DLL anteriores, consulte este tutorial: http://begeeben.wordpress.com/2012/08/01/accessing-oracle-database-without-installing-oracle-client/

11

Dado que esta cuestión fue publicada, el cliente de Oracle Managed ya está disponible (proporcionado por Oracle) . Lo he estado usando sin problemas. No requiere buscar DLL o una configuración especial. Simplemente agregue el paquete, modifique el archivo de configuración y ya está configurado. NuGet Link y an article por Oracle al respecto ...

Dado que este cliente está escrito enteramente en código administrado .NET, es independiente de la arquitectura y no hay necesidad de DLL externos, instalar un cliente Oracle, ni nada de eso.

Puede instalarlo en VS utilizando Package Manager.

Install-Package Oracle.ManagedDataAccess 

que he tomado a poner esto en el archivo machine.config (aunque también va a trabajar en web.config o app.config). He encontrado que esto ayuda a evitar conflictos con otros conductores que puedan estar instalados:

<configuration> 
    <system.data> 
     <DbProviderFactories> 
      <remove invariant="Oracle.DataAccess.Client" /> 
      <remove invariant="Oracle.ManagedDataAccess.Client" /> 
      <add name="ODP.NET, Managed Driver" 
       invariant="Oracle.ManagedDataAccess.Client" 
       description="Oracle Data Provider for .NET, Managed Driver" 
       type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/> 
     </DbProviderFactories> 
     </system.data> 
<configuration> 

Luego de la cadena de conexión:

<add name="MyConnectionString" connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=IPORNAMEOFHOST)(PORT=PORTNUM)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORACLESID)));User Id=ORACLEUSER;Password=ORACLEPASSWORD;" providerName="Oracle.ManagedDataAccess.Client"/> 
  • IPORNAMEOFHOST = Esta es la dirección IP o el nombre DNS tu servidor
  • PORTNUM = Este es el número de puerto que Oracle está escuchando. Normalmente 1521.
  • ORACLESID = El SID de la base de datos a la que intenta conectarse.
  • ORACLEUSER = El nombre de usuario a usar para la conexión.
  • ORACLEPASSWORD = La contraseña que se usará para la conexión.
+0

¿Esto también funciona si está apuntando a .NET 4 y está utilizando Entity Framework 5? – Filip

+2

No puedo hablar de EF5 con eso, pero lo he usado con éxito en .NET 4. [Este artículo] (http://www.oracle.com/technetwork/issue-archive/2014/14-mar/ o24odp-2147205.html) sugiere que EF debería funcionar. – mason

Cuestiones relacionadas