conexiones web a oracle
DESCRIPTION
Conexiones Web a ORACLETRANSCRIPT
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
' 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
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
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>"
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);
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;
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