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 VS2015odp.netmanagedcommon
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á:
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:
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);
}
}
}
}














