Conexiones Web a ORACLE

8
Conexiones web a ORACLE Acceso con funciones gen�ricas ASP con ADO PHP con ODBC Java con ODBC Acceso con funciones nativas Con ASP (oo4o) o Sin pool o Con pool Con PHP(OCI) Con Java(OCI) .Net con ODP inicio CONEXION ADO CON ASP Option Explicit Dim sCadCon, oConexion, oRS, sSQL ' Creamos Objeto conexion Set oConexion = Server.CreateObject("ADODB.Connection") ' Abrimos conexion ' Podemos abrir la conexion de muchas formas en funcion de c�mo sea el string de conexion ' Conexion por ODBC A TRAV�S DE UN DSN sCadCon = "DSN=UNINET10;UID=prueba;PWD=prueba;" ' Conexion por ODBC pero sin definir el DSN. Necesitamos poner el nombre del controlador exacto ' SERVER es el nombre que le hemos dado en el TNSNAMES ' sCadCon = "DRIVER={Microsoft ODBC for Oracle};SERVER=UNINET10;UID=prueba;PWD=prueba;" ' Conexion por OLEDB. Necesitamos que este intalado el controlador en el servidor. Normalmente se ' instala al instalar el cliente de ORACLE

description

Conexiones Web a ORACLE

Transcript of Conexiones Web a ORACLE

Page 1: Conexiones Web a ORACLE

Conexiones web a ORACLE

Acceso con funciones gen�ricas

ASP con ADO PHP con ODBC Java con ODBC

Acceso con funciones nativas

Con ASP (oo4o)o Sin pool o Con pool

Con PHP(OCI) Con Java(OCI) .Net con ODP

inicio 

CONEXION ADO CON ASP

Option Explicit Dim sCadCon, oConexion, oRS, sSQL

' Creamos Objeto conexionSet oConexion = Server.CreateObject("ADODB.Connection")

' Abrimos conexion

' Podemos abrir la conexion de muchas formas en funcion de c�mo sea el string de conexion

' Conexion por ODBC A TRAV�S DE UN DSN sCadCon = "DSN=UNINET10;UID=prueba;PWD=prueba;"

' Conexion por ODBC pero sin definir el DSN. Necesitamos poner el nombre del controlador exacto' SERVER es el nombre que le hemos dado en el TNSNAMES' sCadCon = "DRIVER={Microsoft ODBC for Oracle};SERVER=UNINET10;UID=prueba;PWD=prueba;"

' Conexion por OLEDB. Necesitamos que este intalado el controlador en el servidor. Normalmente se ' instala al instalar el cliente de ORACLE ' Data Source es el nombre que le hemos dado en el TNSNAMES ' sCadCon = "Provider=MSDAORA.1;User ID=prueba;password=prueba;Data Source=UNINET10"

oConexion.ConnectionString = sCadConoConexion.Open' Al hacer el open IIS mira si en ese momento dispone algun proceso ORACLE disponible en el POOL que el

Page 2: Conexiones Web a ORACLE

' IIS mantiene, sino lo crea.

' Hacer consultasSQL = "SELECT id, descripcion FROM tprueba "Set oRS = oConexion.Execute(sSQL) ' Sacar datosWhile (not oRS.EOF)

response.write oRS("id") & " - " & oRS("descripcion") & "<BR>"

oRS.MoveNextWend

' Cerrar CursoroRS.CloseSet oRS = Nothing

' Cerrar conexion. OJO-> El proceso ORACLE no muere sino que se libera por si llegan mas peticiones. Muere cuando se ' produce un timeoutoConexion.CloseSet oConexion = Nothing

inicio 

CONEXION ODBC con PHP

$dsn="UNINET10";//Usamos un DSN definido$usuario="prueba";$password="prueba";$cid=odbc_connect($dsn,$usuario,$password);// en este momento se nos a creado un proceso oracle que atender� la peticion

if (!$cid){exit(" error tratando de conectarse con el

origen de datos."); }

$sql="select id, descripcion FROM tprueba_grande "; $result=odbc_exec($cid,$sql) or die(exit("Error en odbc_exec"));

while(odbc_fetch_row($result)){ $wId = odbc_result($result,"id"); $wDes = odbc_result($result,"descripcion"); print (" $wId - $wDes "<BR> "); }

// cuando termina la ejecucion del PHP el proceso ORACLE muere

Page 3: Conexiones Web a ORACLE

inicio 

CONEXION ODBC con JAVA

try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); }catch(Exception e){ System.out.println("No se ha podido cargar el Driver JDBC-ODBC"); }

// Con esto ya tenemos cargado el Driver.

conexion = DriverManager.getConnection( "jdbc:odbc:MiDSN","","" ); Statement stmt = conexion.createStatement();ResultSet rset = stmt.executeQuery("select id, descripcion FROM tprueba");while (rset.next()){ System.out.println (rset.getString(1)); System.out.println (rset.getString(2)); stmt.close(); }}

inicio 

Conexi�n nativa con ASP (oo4o sin pool)

Option Explicit

Dim oo4oSession, OraDatabase, oRs, sSQL, i

' Creamos objeto 0040 Set oo4oSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = oo4oSession.OpenDatabase("UNINET10", "prueba/prueba",0)

' Se acaba de crear un proceso dedicado para atender nuestra peticion sSQL = "SELECT id, descripcion FROM tprueba_grande " set oRs = OraDatabase.CreateDynaset(sSQL,&H4) ' Sacar datos While (not oRS.EOF)

response.write oRS("id") & " - " & oRS("descripcion") & "<BR>"

oRS.MoveNext Wend

Page 4: Conexiones Web a ORACLE

oRs.close set oRs = Nothing set OraDatabase = Nothing' El proceso oracle desaparece

inicio 

Conexi�n nativa con ASP (oo4o con pool) En el global.asa creamos el pool

<OBJECT RUNAT=Server SCOPE=Application ID=oo4oPool PROGID="OracleInProcServer.XOraSession"></OBJECT>

<SCRIPT LANGUAGE=VBScript RUNAT=Server>Sub Application_OnStart

' Creamos, inicialmente 3 procesos hasta un m�ximo de 40 con un timeot de 600 segundos oo4oPool.CreateDatabasePool 3, 40, 600, "UNINET10", "prueba/prueba", 0

End Sub

Sub Application_OnEnd

' tenemos la delicadeza de destruirlo oo4oPool.DestroyDatabasePool

End Sub</SCRIPT>

Desde el ASP usamos el pool

Option Explicit

Dim oo4oSession, OraDatabase, oRs, sSQL, i ' obtenemos proceso del pool. Si hay alguno libre lo asigna, sino lo crea en el pool set OraDatabase = oo4oPool.getDatabaseFromPool(10)

' Hacer consulta, lo repetimos varias veces para que de tiempo a ver el prceso dedicado

sSQL = "SELECT id, descripcion FROM tprueba_grande "set oRs = OraDatabase.CreateDynaset(sSQL,&H4) ' Sacar datosWhile (not oRS.EOF) response.write oRS("id") & " - " & oRS("descripcion") & "<BR>"

Page 5: Conexiones Web a ORACLE

oRS.MoveNextWend oRs.closeset oRs = Nothing

' libero el proceso. Ahora estara en el pool disponible para otroset OraDatabase = Nothing

inicio 

Conexi�n nativa con PHP (OCI)

$usuario="prueba"; $password="prueba";

$cn = oci_connect($usuario, $password, 'UNINET10') or die( "No me puedo conectar");

// Como usamon oci_connect se crear� un proceso oracle que morira al terminar el php.// Podr�amos usar oci_pconnect que har�a que la conexion y por tanto el proceso ORACLE no muriera al terminar la ejecucion del php// por si el hilo apeche atiende otra peticion php que requiere acceso a oracle// El numero m�ximo de conexiones persistentes se definie con la variable oci8.max_persistent=num del php.ini// El time-out de la conexion persistente se define en oci8.persistent_timeout=seg

$SQL="select id, descripcion FROM tprueba"; $stmt = ociparse($cn, SQL);OCIExecute($stmt);

// indicamos que el resultado lo queremos en un array asociativo donde cada fila del array // es una fila de la query (que a su vez es un array). Por defecto lo devuelve por columnas,$iNumFilas = oci_fetch_all($stmt,$results,0, -1, OCI_FETCHSTATEMENT_BY_ROW + OCI_ASSOC);for ($i = 0; $i < $iNumFilas; $i++) { echo $results[$i]["ID"] ."-".$results[$i]["DESCRIPCION"]."" ; }

OCIFreeStatement($stmt);OCILogoff($conn);

Page 6: Conexiones Web a ORACLE

inicio

Conexi�n nativa con Java (OCI)

import java.sql.*;class dbAccess { public static void main (String args []) throws SQLException { try { Class.forName ("oracle.jdbc.driver.OracleDriver"); } catch (ClassNotFoundException e) { e.printStackTrace(); }

Connection conn = DriverManager.getConnection ("jdbc:oracle:oci8:UNINET10.CAMPUS.UA.ES", "prueba", "prueba"); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("select id, descripcion FROM tprueba"); while (rset.next()) System.out.println (rset.getString(1)); System.out.println (rset.getString(2)); stmt.close(); }}

inicio CONEXION .NET con ODP

using Oracle.DataAccess.Client;

var conexion = new OracleConnection(); var cmd = new OracleCommand(); OracleDataReader reader = null;

// podemos hacer la conexion usando el WebConfig o directamente el string de conexio. MEjor el Web Config // Conexion.ConnectionString = "Data Source=SERVIDOR.ORACLE.UA.ES;Persist Security Info=True;User ID=userORACLE;Password=xxxxxx;Min Pool Size=2;Max Pool Size=50;Unicode=True"; conexion.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MiConexionOracle"].ConnectionString; conexion.Open(); cmd.Connection = conexion;

Page 7: Conexiones Web a ORACLE

try { string sSql = "select codtipo, orden, desctipo from vista_estudios order by orden"; cmd.CommandText = sSql;

reader = cmd.ExecuteReader();

if (reader.HasRows) { GV_ELEMENTOS.DataSource = reader;

// CABECERA GV_ELEMENTOS.Columns[0].HeaderText = "ORDEN"; GV_ELEMENTOS.Columns[1].HeaderText = "NOMBRE"; GV_ELEMENTOS.Columns[2].HeaderText = "DESCRIPCI�N";

GV_ELEMENTOS.DataBind(); }

} catch (Exception ex) { LabelInfo.Text = "ERROR AL RECUPERAR LOS ELEMENTOS - " + ex.ToString(); } finally { if (reader != null) reader.Close(); conexion.Close(); }

inicio