Explicamos cómo desarrollar una aplicación C Sharp (C#) en Visual Studio .Net Community 2015 con acceso nativo a Oracle, sin necesidad de instalar Oracle Client. Para ello utilizaremos ODAC (Oracle Data Access Components), en concreto la librería Oracle.ManagedDataAccess.dll. No se necesitará disponer del fichero tnsnames.ora, únicamente la librería y el ejecutable de la aplicación.
- Descarga e instalación de ODAC Oracle Data Access Components para Visual Studio.
- Crear aplicación .Net con acceso nativo a Oracle usando Visual Studio .Net Community y C Sharp C#.
- Instalación y ejecución de la aplicación en equipo cliente.
- Descarga de la aplicación de ejemplo ProyectoA – Acceso Nativo Oracle con .Net.
Descarga e instalación de ODAC Oracle Data Access Components para Visual Studio
Accederemos a la web oficial de Oracle y descargaremos el fichero de instalación adecuado para la versión de Visual Studio .Net que estemos usando, en nuestro caso 2015:
Es posible que tengamos que iniciar sesión con nuestra cuenta de Oracle para la descarga:
Ejecutaremos el fichero descargado ODTforVS2015_183000.exe. Pulsaremos «Siguiente»:
Pulsaremos en «Instalar»:
Tras la instalación de ODAC el asistente nos indicará dónde se ubican los archivos de configuración de red de Oracle de ejemplo para nuestras aplicaciones. Pulsaremos en «Finalizar»:
Crear aplicación .Net con acceso nativo a Oracle usando Visual Studio .Net Community y C Sharp C#
Abriremos Visual Studio .Net Community, en nuestro caso la versión 2015, y pulsaremos en «File» – «New» – «Project»:
Elegiremos el lenguaje (Visual C#) y el tipo de aplicación «Windows» – «Windows Forms Application». Para este ejemplo usaremos .NET Framework 4.5.2. Introduciremos el nombre del namespace y la carpeta donde se guardará:
Añadiremos la referencia a la DLL de acceso a Oracle (ODAC) en nuestro proyecto. Para ello pulsaremos en el menú «Project» – «Add Reference»:
En la parte izquierda pulsaremos en «Extensions», y en la derecha buscaremos Oracle.ManagedDataAccess y lo marcaremos. Pulsaremos OK para agregar la referencia a esta DLL:
La referencia anterior suele estar en la carpeta:
C:\Program Files (x86)\Oracle Developer Tools for VS2015\odp.net\managed\common\
Y el fichero: Oracle.ManagedDataAccess.dll
Añadiremos al formulario los componentes necesarios para solicitar el nombre de red DNS o IP del servidor de Oracle, el usuario, la contraseña, el puerto y el nombre de servicio (Service Name). Añadiremos un botón Button para conectar y un TextBox con la propiedad Multiline = true, donde mostraremos el resultado de la conexión a Oracle:
Haremos doble clic sobre el botón Conectar para introducir el código C# correspondiente para la conexión.
Antes de continuar con el código del botón conectar estableceremos el using correspondiente al namespace Oracle.ManagedDataAccess.Client:
using Oracle.ManagedDataAccess.Client;
En el código fuente para la conexión a Oracle nativa desde C# que añadiremos al botón Conectar será:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
private void btConectar_Click(object sender, EventArgs e) { try { //Datos de conexión a Oracle - Si se usa fichero //tnsnames.ora (indicado en variable de entorno ORACLE_HOME) /* string constr = "user id=" + txtUsuario.Text + ";password=" + txtContrasena.Text + ";data source=" + txtNombreServicio.Text; */ //Datos de conexión para no usar tnsnames.ora string constr = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=" + txtServidorOracle.Text + ")(Port=" + txtPuerto.Text + ")))(CONNECT_DATA=(SERVICE_NAME=" + txtNombreServicio.Text + "))); User Id=" + txtUsuario.Text + ";Password=" +txtContrasena.Text + "; "; OracleConnection con = new OracleConnection(constr); con.Open(); if (txtLog.Text != "") { txtLog.AppendText(Environment.NewLine); } txtLog.AppendText("Conectado a servidor Oracle, versión: " + con.ServerVersion); con.Dispose(); } catch (Exception ex) { if (txtLog.Text != "") { txtLog.AppendText(Environment.NewLine); } txtLog.AppendText("Error al conectar a Oracle: " + ex); } } |
Ejecutaremos la apliacción y probaremos la conexión con el servidor Oracle. Si todo es correcto nos devolverá el texto:
Conectado a servidor Oracle, versión: 11.2.0.4.0
La versión variará según la de Oracle, como es lógico:
Instalación y ejecución de la aplicación en equipo cliente
Una vez desarrollada nuestra aplicación con acceso nativo a Oracle, para ejecutarla en un equipo cliente, no necesitaremos instalar Oracle Client, será suficiente con disponer del ejecutable, la DLL Oracle.ManagedDataAccess.dll y el Framework correspondiente. La DLL Oracle.ManagedDataAccess.dll el propio compilador de Visual Studio la habrá copiado a la carpeta del proyecto, donde también se encuentra el ejecutable:
Si no tenemos el Framework adecuado (para el ejemplo empleamos el 4.5.2), al ejecutar la aplicación nos mostraría este mensaje de error:
Con el texto:
To run this application, you first must install one of the following versions of the .NET Framework: .NETFramework, Version=v4.5.2. Would you like to download and install .NETFramework, Version=v4.5.2 now?
En este caso deberemos descargar e instalar la versión exacta que indica la aplicación desde la web oficial de Microsoft.
Descarga de la aplicación de ejemplo ProyectoA – Acceso Nativo Oracle con .Net
Código fuente en Visual Studio .Net Community C# C Sharp de la aplicación ProyectoA – Acceso Nativo Oracle con .Net:
Anexo
El código fuente completo de la aplicación ProyectoA – Acceso Nativo Oracle con .Net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Oracle.ManagedDataAccess.Client; namespace AccesoNavitoOracle { public partial class formMenuPrincipal : Form { public formMenuPrincipal() { InitializeComponent(); } private void btConectar_Click(object sender, EventArgs e) { try { //Datos de conexión a Oracle - Si se usa fichero //tnsnames.ora (indicado en variable de entorno ORACLE_HOME) /* string constr = "user id=" + txtUsuario.Text + ";password=" + txtContrasena.Text + ";data source=" + txtNombreServicio.Text; */ //Datos de conexión para no usar tnsnames.ora string constr = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=" + txtServidorOracle.Text + ")(Port=" + txtPuerto.Text + ")))(CONNECT_DATA=(SERVICE_NAME=" + txtNombreServicio.Text + "))); User Id=" + txtUsuario.Text + ";Password=" +txtContrasena.Text + "; "; OracleConnection con = new OracleConnection(constr); con.Open(); if (txtLog.Text != "") { txtLog.AppendText(Environment.NewLine); } txtLog.AppendText("Conectado a servidor Oracle, versión: " + con.ServerVersion); con.Dispose(); } catch (Exception ex) { if (txtLog.Text != "") { txtLog.AppendText(Environment.NewLine); } txtLog.AppendText("Error al conectar a Oracle: " + ex); } } } } |