ejemplos oracle

29
 Requisitos En la lista siguiente se describe el hardware, el software, la infraestructura de red y los Service Pack recomendados que necesitará:  Microsoft Visual Studio .NET  Servicios de Microsoft Internet Information Server (IIS) 5.0 o posterior  Microsoft SQL Server Volver al principio  Crear una aplicación ASP.NET utilizando C# .NET 1. Abra Visual Studio .NET. 2. Cree una nueva aplicación Web ASP.NET, y especifique el nombre y la ubicación. Volver al principio  Configurar la seguridad en el archivo Web.config En esta sección se muestra cómo agregar y modificar las secciones de configuración<authentication> y <authorization> para configurar la aplicación ASP.NET de manera que utilice autenticación basada en formularios. 1. En el Explorador de soluciones, abra el archivo Web.config. 2. Cambie el modo de autenticación a Forms. 3. Inserte la etiqueta <Forms> y rellene los atributos adecuados. (Para obtener más información acerca de estos atributos, consulte la documentación de MSDN o la documentación del Tutorial rápido que se muestra en la sección REFERENCIAS .) Copie el código siguiente y haga clic en Pegar como HTML en el menú Edición para pegar el código en la sección <authentication> del archivo: 4. <authentication mode="Forms "> 5. <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 6. protection="All" path="/" timeout="30" /> 7. </authentication> 8. Deniegue el acceso al usuario anónimo en la sección <authorization> de la manera siguiente: 9. <authorization> 10. <deny users ="?" /> 11. <allow users = "*" />

Upload: cesar-noa

Post on 17-Jul-2015

956 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 129

Requisitos

En la lista siguiente se describe el hardware el software la infraestructura de red y los Service Pack recomendados

que necesitaraacute

Microsoft Visual Studio NET

Servicios de Microsoft Internet Information Server (IIS) 50 o posterior

Microsoft SQL Server

Volver al principio

Crear una aplicacioacuten ASPNET utilizando C NET

1 Abra Visual Studio NET

2 Cree una nueva aplicacioacuten Web ASPNET y especifique el nombre y la ubicacioacuten

Volver al principio

Configurar la seguridad en el archivo Webconfig

En esta seccioacuten se muestra coacutemo agregar y modificar las secciones de configuracioacuten ltauthenticationgt y

ltauthorizationgt para configurar la aplicacioacuten ASPNET de manera que utilice autenticacioacuten basada en formularios

1 En el Explorador de soluciones abra el archivo Webconfig

2 Cambie el modo de autenticacioacuten a Forms

3 Inserte la etiqueta ltFormsgt y rellene los atributos adecuados (Para obtener maacutes informacioacuten acerca de

estos atributos consulte la documentacioacuten de MSDN o la documentacioacuten del Tutorial raacutepido que se

muestra en la seccioacuten REFERENCIAS) Copie el coacutedigo siguiente y haga clic en Pegar como HTML en el

menuacute Edicioacuten para pegar el coacutedigo en la seccioacuten ltauthenticationgt del archivo

4 ltauthentication mode=Formsgt5 ltforms name=ASPXFORMSDEMO loginUrl=logonaspx

6 protection=All path= timeout=30 gt

7 ltauthenticationgt

8 Deniegue el acceso al usuario anoacutenimo en la seccioacuten ltauthorizationgt de la manera siguiente

9 ltauthorizationgt10 ltdeny users = gt

11 ltallow users = gt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 229

12 ltauthorizationgt

Volver al principio

Crear una tabla de base de datos de ejemplo para almacenar detalles de los usuarios

En esta seccioacuten se muestra coacutemo crear una base de datos de ejemplo para almacenar el nombre de usuario la

contrasentildea y la funcioacuten para los usuarios Necesitaraacute la columna de funcioacuten si desea almacenar las funciones de

usuario en la base de datos e implementar la seguridad basada en funciones

1 En el menuacute Inicio haga clic en Ejecutar y escriba notepad para abrir el Bloc de notas

2 Resalte el coacutedigo de secuencia de comandos SQL siguiente haga clic con el botoacuten secundario del

mouse (ratoacuten) en el mismo y a continuacioacuten haga clic en Copiar En el Bloc de notas haga clic en

Pegar en el menuacute Edicioacuten para pegar el coacutedigo siguiente3 if exists (select from sysobjects where id =4 object_id(N[dbo][Users]) and OBJECTPROPERTY(id NIsUserTable) = 1)5 drop table [dbo][Users]6 GO7 CREATE TABLE [dbo][Users] (8 [uname] [varchar] (15) NOT NULL

9 [Pwd] [varchar] (25) NOT NULL

10 [userRole] [varchar] (25) NOT NULL

11 ) ON [PRIMARY]12 GO13 ALTER TABLE [dbo][Users] WITH NOCHECK ADD14 CONSTRAINT [PK_Users] PRIMARY KEY NONCLUSTERED

15 (

16 [uname]

17 ) ON [PRIMARY]

18 GO19

20 INSERT INTO Users values(user1user1Manager)21 INSERT INTO Users values(user2user2Admin)22 INSERT INTO Users values(user3user3User)23 GO

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 329

24 Guarde el archivo como Userssql

25 En el equipo con Microsoft SQL Server abra Userssql en el Analizador de consultas En la lista de bases

de datos haga clic en pubs y ejecute la secuencia de comandos Esto crearaacute una tabla de usuarios de

ejemplo y llenaraacute la tabla de la base de datos Pubs que se utilizaraacute con esta aplicacioacuten de ejemplo

Volver al principio

Crear una paacutegina Logonaspx

1 Agregue un nuevo formulario Web Forms al proyecto denominado Logonaspx

2 Abra la paacutegina Logonaspx en el editor y cambie a la vista HTML

3 Copie el coacutedigo siguiente y utilice la opcioacuten Pegar como HTML del menuacute Edicioacuten para insertar el

coacutedigo entre las etiquetas ltformgt

4 lth3gt5 ltfont face=VerdanagtLogon Pageltfontgt

6 lth3gt7 lttablegt8 lttrgt

9 lttdgtEmaillttdgt

10 lttdgtltinput id=txtUserName type=text runat=servergtlttdgt

11 lttdgtltASPRequiredFieldValidator ControlToValidate=txtUserName

12 Display=Static ErrorMessage= runat=server

13 ID=vUserName gtlttdgt

14 lttrgt

15 lttrgt

16 lttdgtPasswordlttdgt

17 lttdgtltinput id=txtUserPass type=password runat=servergtlttdgt

18 lttdgtltASPRequiredFieldValidator ControlToValidate=txtUserPass

19 Display=Static ErrorMessage= runat=server

20 ID=vUserPass gt

21 lttdgt22 lttrgt

23 lttrgt

24 lttdgtPersistent Cookielttdgt

25 lttdgtltASPCheckBox id=chkPersistCookie runat=server

autopostback=false gtlttdgt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 429

26 lttdgtlttdgt

27 lttrgt

28 lttablegt29 ltinput type=submit Value=Logon runat=server

ID=cmdLogingtltpgtltpgt

30 ltaspLabel id=lblMsg ForeColor=red Font-Name=Verdana Font-Size=10 runat=server gt

Este formulario Web Forms se utiliza para presentar un formulario de inicio de sesioacuten a los usuarios de

manera que puedan proporcionar su nombre de usuario y su contrasentildea para iniciar sesioacuten en la

aplicacioacuten

31 Cambie a la vista Disentildeo y guarde la paacutegina

Volver al principio

Codificar el controlador de eventos para que valide las credenciales de usuario

En esta seccioacuten se presenta el coacutedigo que se coloca en la paacutegina de coacutedigo subyacente (Logonaspxcs)

1 Haga doble clic en Logon para abrir el archivo Logonaspxcs

2 Importe los espacios de nombres necesarios al archivo de coacutedigo subyacente

3 using SystemDataSqlClient4 using SystemWebSecurity

5 Cree una funcioacuten ValidateUser para validar las credenciales de usuario examinando la base de datos

(Aseguacuterese de que cambia la cadena de conexioacuten para sentildealar a su base de datos)

6 private bool ValidateUser( string userName string passWord )7 8 SqlConnection conn9 SqlCommand cmd10 string lookupPassword = null

11 12 Check for invalid userName

13 userName must not be null and must be between 1 and 15

characters

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 529

14 if ( ( null == userName ) || ( 0 == userNameLength ) || (

userNameLength gt 15 ) )

15

16 SystemDiagnosticsTraceWriteLine( [ValidateUser]

Input validation of userName failed )

17 return false

18

19 20 Check for invalid passWord

21 passWord must not be null and must be between 1 and 25

characters

22 if ( ( null == passWord ) || ( 0 == passWordLength ) || (

passWordLength gt 25 ) )

23

24 SystemDiagnosticsTraceWriteLine( [ValidateUser]

Input validation of passWord failed )

25 return false

26

27 28 try

29

30 Consult with your SQL Server administrator for an

appropriate connection

31 string to use to connect to your local SQL Server

32 conn = new SqlConnection( server=localhostIntegrated

Security=SSPIdatabase=pubs )

33 connOpen()

34 35 Create SqlCommand to select pwd field from users

table given supplied userName36 cmd = new SqlCommand( Select pwd from users where

uname=userName conn )

37 cmdParametersAdd( userName SqlDbTypeVarChar 25

)

38 cmdParameters[userName]Value = userName

39

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 629

40 Execute command and fetch pwd field into

lookupPassword string

41 lookupPassword = (string) cmdExecuteScalar()

42 43 Cleanup command and connection objects

44 cmdDispose()

45 connDispose()

46

47 catch ( Exception ex )

48

49 Add error handling here for debugging

50 This error message should not be sent back to the

caller

51 SystemDiagnosticsTraceWriteLine( [ValidateUser]

Exception + exMessage )

52

53 54 If no password found return false

55 if ( null == lookupPassword )

56

57 You could write failed login attempts here to event

log for additional security

58 return false

59

60 61 Compare lookupPassword and input passWord using a case-

sensitive comparison

62 return ( 0 == stringCompare( lookupPassword passWord false )

)

63

64

65 Puede utilizar uno de dos meacutetodos posibles para generar la cookie de autenticacioacuten de formularios y

redirigir al usuario a una paacutegina apropiada en el evento cmdLogin_ServerClick Se proporciona el

coacutedigo de ejemplo para ambos escenarios Utilice cualquiera de ellos seguacuten sea necesario

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 729

o Llame al meacutetodo RedirectFromLoginPage para generar automaacuteticamente la cookie de

autenticacioacuten de formularios y redirigir al usuario a una paacutegina apropiada en el evento

cmdLogin_ServerClick

o private void cmdLogin_ServerClick(object sender

SystemEventArgs e)

o

o if (ValidateUser(txtUserNameValuetxtUserPassValue) )

o FormsAuthenticationRedirectFromLoginPage(txtUserNameValue

o chkPersistCookieChecked)

o else

o ResponseRedirect(logonaspx true)

o

o Genere el vale de autenticacioacuten ciacutefrelo cree una cookie agreacuteguela a la respuesta y redirija al

usuario Esto le ofrece maacutes control sobre coacutemo crear la cookie Tambieacuten puede incluir datos

personalizados junto con FormsAuthenticationTicket en este caso

o private void cmdLogin_ServerClick(object sender

SystemEventArgs e)

o

o if (ValidateUser(txtUserNameValuetxtUserPassValue) )

o

o FormsAuthenticationTicket tkt

o string cookiestr

o HttpCookie ck

o tkt = new FormsAuthenticationTicket(1 txtUserNameValue

DateTimeNow

o DateTimeNowAddMinutes(30) chkPersistCookieChecked your

custom data)

o cookiestr = FormsAuthenticationEncrypt(tkt)

o ck = new HttpCookie(FormsAuthenticationFormsCookieName

cookiestr)

o if (chkPersistCookieChecked)

o ckExpires=tktExpiration

o ckPath = FormsAuthenticationFormsCookiePath

o ResponseCookiesAdd(ck)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 829

o o string strRedirect

o strRedirect = Request[ReturnUrl]

o if (strRedirect==null)

o strRedirect = defaultaspx

o ResponseRedirect(strRedirect true)

o

o else

o ResponseRedirect(logonaspx true)

o

66 Aseguacuterese de que el coacutedigo siguiente se agrega al meacutetodo InitializeComponent en el coacutedigo

generado por el Disentildeador de Web Forms

67 thiscmdLoginServerClick += newSystemEventHandler(thiscmdLogin_ServerClick)

Volver al principio

Crear una paacutegina Defaultaspx

En esta seccioacuten se crea una paacutegina de prueba a la que se redirige a los usuarios despueacutes de autenticarse Si los

usuarios van a esta paacutegina sin iniciar sesioacuten primero en la aplicacioacuten se les redirige a la paacutegina de inicio de sesioacuten

1 Cambie el nombre de la paacutegina WebForm1aspx existente como Defaultaspx y aacutebrala en el editor

2 Cambie a la vista HTML y copie el coacutedigo siguiente entre las etiquetas ltformgt

3 ltinput type=submit Value=SignOut runat=server id=cmdSignOutgt

Este botoacuten se utiliza para cerrar la sesioacuten de autenticacioacuten de formularios

4 Cambie a la vista Disentildeo y guarde la paacutegina

5 Importe los espacios de nombres necesarios al archivo de coacutedigo subyacente

6 using SystemWebSecurity

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 929

7 Haga doble clic en SignOut para abrir la paacutegina de coacutedigo subyacente (Defaultaspxcs) y copie el

coacutedigo siguiente al controlador de eventos cmdSignOut_ServerClick

8 private void cmdSignOut_ServerClick(object sender SystemEventArgs e)9 10 FormsAuthenticationSignOut()

11 ResponseRedirect(logonaspx true)

12

13 Aseguacuterese de que el coacutedigo siguiente se agrega al meacutetodo InitializeComponent en el coacutedigo

generado por el Disentildeador de Web Forms

14 thiscmdSignOutServerClick += newSystemEventHandler(thiscmdSignOut_ServerClick)

15 Guarde y compile el proyecto Ahora puede utilizar la aplicacioacuten

Volver al principio

Notas adicionales

Quizaacutes desee almacenar las contrasentildeas de manera segura en una base de datos Puede emplear la

funcioacuten de utilidad de la clase FormsAuthentication denominada

HashPasswordForStoringInConfigFile para cifrar las contrasentildeas antes de almacenarlas en la base de

datos o en el archivo de configuracioacuten

Quizaacutes desee almacenar la informacioacuten de conexioacuten de SQL en el archivo de configuracioacuten (Webconfig)

de forma que pueda modificarla faacutecilmente si es necesario

Quizaacutes desee considerar la posibilidad de agregar coacutedigo para impedir el inicio de sesioacuten de los piratas

informaacuteticos que intentan utilizar diferentes combinaciones de contrasentildeas Por ejemplo puede incluir

loacutegica que soacutelo acepte dos o tres intentos de inicio de sesioacuten Si el usuario no puede iniciar sesioacuten en un

cierto nuacutemero de intentos quizaacutes desee establecer un indicador en la base de datos para no permitir

que ese usuario inicie sesioacuten hasta que no vuelva a habilitar su cuenta visitando una paacutegina diferente o

llamando a su liacutenea de soporte teacutecnico Ademaacutes debe agregar un control de errores apropiado donde

sea necesario

Puesto que el usuario se identifica seguacuten la cookie de autenticacioacuten quizaacutes desee utilizar Capa de

sockets seguros (SSL) en esta aplicacioacuten para que nadie pueda interceptar la cookie de autenticacioacuten y

cualquier otra informacioacuten valiosa que se transmita

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1029

La autenticacioacuten basada en formularios requiere que su cliente acepte o habilite las cookies en su

explorador

El paraacutemetro timeout de la seccioacuten de configuracioacuten ltauthenticationgt controla el intervalo en el que

se vuelve a generar la cookie de autenticacioacuten Puede elegir un valor que proporcione mejor

rendimiento y seguridad

Algunos servidores proxy y memorias cacheacute intermedios de Internet pueden almacenar en cacheacute

respuestas del servidor Web que contienen encabezados Set-Cookie que se devuelven a un usuario

diferente Puesto que la autenticacioacuten basada en formularios utiliza una cookie para autenticar a los

usuarios esto puede hacer que los usuarios suplanten accidentalmente (o intencionadamente) a otro

usuario recibiendo una cookie de un servidor proxy o una memoria cacheacute intermedios que no estaba

dirigida originalmente a ellos

Volver al principio

Referencias

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten simple basada en formularios que utiliza

la seccioacuten ltcredentialsgt para almacenar usuarios y contrasentildeas consulte el ejemplo del Tutorial raacutepido de ASPNET

GotDotNet siguiente

Forms-Based Authentication (Autenticacioacuten basada en formularios)

httpsamplesgotdotnetcomquickstartaspplusdefaultaspxurl=quickstartaspplusdocformsauthaspx

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten basada en formularios que utiliza un

archivo XML para almacenar usuarios y contrasentildeas consulte el tema siguiente en la documentacioacuten del Kit de

desarrollo de software (SDK) de NET Framework

Forms Authentication Using An XML Users File (Autenticacioacuten de formularios utilizando un archivo XML Users)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-

uscpguidehtmlcpconcookieauthenticationusinganxmlusersfileasp

Para obtener maacutes informacioacuten acerca de la seguridad de las aplicaciones Web ASPNET consulte la siguiente

documentacioacuten de la Guiacutea del desarrollador de Microsoft NET Framework

ASPNET Web Application Security (Seguridad de aplicaciones Web ASPNET)

httpmsdn2microsoftcomen-uslibrary330a99hc(vs71)aspx

Para obtener maacutes informacioacuten acerca del espacio de nombres SystemWebSecurity consulte la siguiente

documentacioacuten de referencia de Microsoft NET Framework

SystemWebSecurity Namespace (Espacio de nombres SystemWebSecurity)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscprefhtmlfrlrfSystemWebSecurityasp

Para obtener maacutes informacioacuten acerca de la configuracioacuten de ASPNET consulte los siguientes artiacuteculos de la Guiacutea del

desarrollador de Microsoft NET Framework

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1129

ASPNET Configuration (Configuracioacuten de ASPNET)

httpmsdn2microsoftcomen-uslibraryaa719558(VS71)aspx

ASPNET Configuration Sections (Secciones de configuracioacuten de ASPNET)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscpguidehtmlcpgrfaspnetconfigurationsectionsasp

Para obtener informacioacuten acerca de las directrices de seguridad de ASPNET consulte la siguiente nota de producto

de MSDN

Authentication in ASPNET NET Security Guidance (Autenticacioacuten en ASPNET consejos sobre seguridad de NET)

httpmsdn2microsoftcomen-uslibraryms978378aspx

Para obtener maacutes informacioacuten general acerca de ASPNET visite el siguiente grupo de noticias de MSDN

httpwwwmicrosoftcomspanishmsdngruposnoticiasasp

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1229

En esta primera etapa solo considerareacute la creacioacuten del coacutedigo para accesar a una paacutegina donde seraacute necesario

utilizar un nombre de usuario y un password No hareacute ninguna modificacioacuten al WebConfig maacutes adelante lo

ocupareacute en otro ejemplo

Comencemoshelliphelliphellip

Vamos a crear la siguiente paacutegina Abriendo un proyecto nuevo para WebSite

Debe incluir dos etiquetas dos cajas de texto y un botoacuten Voy a crear una tabla que se llame usuarios que

cuente con dos campos usr y pwd los cuales seraacute de tipo nvarchar dentro de una Base de Datos que llamare

EST una vez que cree la Base de Datos la tabla los campos y agregue algunos registros voy a proceder a crear

un prodecimiento almacenado que seraacute capaz de poder identificar por mi si el usuario y el password son

correctos la manera es muy sencilla solo ldquocontemosrdquo mediante una consulta de S QL si existe un registros con

el usuario y el password que ingresamos si devuelve 1 el usuario podra entrar si no habra que indicarle que

algo escribio mal

El procedimiento almacenado se llama verifica y queda de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1329

Podemos probar el procedimiento almacenado que acabamos de crear dandole un click derecho sobre el y

seleccionando la opcioacuten Execute

Vamos a crear ahora el coacutedigo para el botoacuten para este paso vamos a utlizar SQLConnection y SQLCommand

ambos pertenecen a la coleccioacuten de nombres de SQLCLient para ellos es necesario agregarla en el encabezado

del programa de la siguiente manera

using SystemDataSqlClient

El coacutedigo del botoacuten quedariacutea de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1429

Oberven en el coacutedigo que utilizo dos WEBform maacutes si el valor que devuelve la consulta hecha a traeacutes del

proceimiento almacenado es 1 se iraacute a la paacutegina de Bienvenidaaspx en caso contrario le indicaraacute en

Erroraspx que se escribio incorrectamente el nombre usuario y contrasentildea para ello se debe agregar estod

dos WebForm maacutes

NOTA Para poder logar que se enmascare con (asteriscos) el t ipeo del

password es necesario que selecciones la caja de texto a utilizar y

posteriormente en propiedades en la opcioacuten TextMode elegir Password

Espero que les haya sido de mucha utilidad a todos un saludo

desde Meacutexico a todos los que han posteado sus comentarios

desde el resto de nuestro precioso paiacutes eso motiva mucho Un

fuerte abrazo a mis lectores de America Latina y Espantildea la

verdad sus comentarios alienta a seguir trabajando con maacutes

enfasis y a todos aquellos que han usado este medio para ponercosas ofensivas la verdad mejor busquen otro sitio no me

gustan esos comentarios ponganse a trabajar y utilicen mejor

el Espantildeol que es una lengua preciosa en lugar de escribir

puras tonterias aqui tratamos de compartir conocimiento

desarrollemos un planeta mejor

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1529

Un Stored Procedure o procedimiento almacenado es algo asi como una sentencia SQL que

se crea dentro de la base de datos Pero creo que si estaacuten leyendo esto es porque ya saben

lo que es un Stored Procedure y simplemente quieren saber como ejecutarlo desde una

paacutegina WEB

Los que no sepan que es un Stored Procedure les recomiendo buscar por otro lado

Bueno los Stored Procedure tienen un nombre y es lo que utilizaremos para llamarlos Esmuy simple y facil

Ejecucion de un Stored Procedure sin ningun paraacutemetro y sin RecordSet (poco usual

pero posible)

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Aqui llamamos al ST en este caso llamado procedimiento

oConnExecute EXEC procedimiento

oConnCloseSet oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Separar los paraacutemetros con coma ()

oConnExecute EXEC procedimiento param1 param2oConnClose

Set oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros recibiendo los datos en un Objeto

RecordSet

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexionSet RS = ServerCreateObject(ADODBRecordSet)

Separar los paraacutemetros con coma ()

RSOpen EXEC procedimiento param1 param2 oConn

Trabajamos con el RS

RSClose

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1629

Set RS = Nothing

oConnClose

Set oConn = Nothing

gt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1729

En este artiacuteculo paso a paso se usa el objeto DataReader para recuperar datos de un procedimiento almacenado de

Oracle Puede usar el objeto DataReader para recuperar una secuencia de datos de avance de soacutelo lectura de una

base de datos Al usar el objeto DataReader puede aumentar el rendimiento de la aplicacioacuten y reducir la carga del

sistema ya que soacutelo se guarda una fila en memoria

Volver al principio

Requisitos

En la lista siguiente se describe el hardware el software la infraestructura de red y los Service Pack recomendados

que se necesitaraacuten

Microsoft Windows 2000 Professional Windows 2000 Server Windows 2000 Advanced Server o

Windows NT 40 Server

Microsoft Visual Studio NET

En el presente artiacuteculo se da por supuesto que estaacute familiarizado con los temas siguientes

Visual C NET

Fundamentos y sintaxis de ADONET

Volver al principio

Crear las tablas de Oracle

En este ejemplo se usan tablas definidas en el esquema ScottTiger de Oracle El esquema ScottTiger de Oracle se

incluye con la instalacioacuten predeterminada de Oracle

Si este esquema no existe tiene que ejecutar la tabla siguiente e insertar secuencias de comandos para las tablas

CREATE TABLE DEPT

(DEPTNO NUMBER(20) NOT NULL

DNAME VARCHAR2(14) NULL

LOC VARCHAR2(13) NULL

PRIMARY KEY (DEPTNO)

)

INSERT INTO Dept VALUES(11SalesTexas)

INSERT INTO Dept VALUES(22AccountingWashington)

INSERT INTO Dept VALUES(33FinanceMaine)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1829

CREATE TABLE EMP

(EMPNO NUMBER(40) NOT NULL

ENAME VARCHAR2(10) NULL

JOB VARCHAR2(9) NULL

MGR NUMBER(40) NULL

SAL NUMBER(72) NULL

COMM NUMBER(72) NULL

DEPTNO NUMBER(20) NULL

FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)

PRIMARY KEY (EMPNO)

)

INSERT INTO Emp VALUES(123BobSales555350001211)

INSERT INTO Emp VALUES(321SueFinance555420001233)

INSERT INTO Emp VALUES(234MaryAccount555330001222)

Volver al principio

Crear los paquetes de Oracle

Cree el paquete de Oracle siguiente en el servidor Oracle

CREATE OR REPLACE PACKAGE curspkg_join AS

TYPE t_cursor IS REF CURSOR

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT

t_cursor)

END curspkg_join

Cree el siguiente cuerpo de paquete de Oracle en el servidor Oracle

CREATE OR REPLACE PACKAGE BODY curspkg_join AS

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT t_cursor)

IS

v_cursor t_cursor

BEGIN

IF n_EMPNO ltgt 0

THEN

OPEN v_cursor FOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1929

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = n_EMPNO

ELSE

OPEN v_cursor FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

io_cursor = v_cursor

END open_join_cursor1

END curspkg_join

Volver al principio

Crear la aplicacioacuten de Visual C NET

1 Cree un nuevo proyecto de aplicacioacuten para Windows de Visual C Se agregaraacute Form1 al proyecto de

manera predeterminada

2 Agregue el siguiente coacutedigo al principio de la ventana de coacutedigo

using SystemDataOleDb

3 Agregue el coacutedigo siguiente al evento Form_Load de Form1

4 OleDbConnection Oraclecon = newOleDbConnection(Provider=MSDAORA1Password=tiger

5 + User ID=scottData Source=OracleServerPersist Security

Info=True)

6 OracleconOpen()7 OleDbCommand myCMD = new OleDbCommand8 (call curspkg_joinopen_join_cursor1( resultset 0 io_cursor)

Oraclecon)

9 myCMDParametersAdd(ID OleDbTypeNumeric 4)Value = 0

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 2: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 229

12 ltauthorizationgt

Volver al principio

Crear una tabla de base de datos de ejemplo para almacenar detalles de los usuarios

En esta seccioacuten se muestra coacutemo crear una base de datos de ejemplo para almacenar el nombre de usuario la

contrasentildea y la funcioacuten para los usuarios Necesitaraacute la columna de funcioacuten si desea almacenar las funciones de

usuario en la base de datos e implementar la seguridad basada en funciones

1 En el menuacute Inicio haga clic en Ejecutar y escriba notepad para abrir el Bloc de notas

2 Resalte el coacutedigo de secuencia de comandos SQL siguiente haga clic con el botoacuten secundario del

mouse (ratoacuten) en el mismo y a continuacioacuten haga clic en Copiar En el Bloc de notas haga clic en

Pegar en el menuacute Edicioacuten para pegar el coacutedigo siguiente3 if exists (select from sysobjects where id =4 object_id(N[dbo][Users]) and OBJECTPROPERTY(id NIsUserTable) = 1)5 drop table [dbo][Users]6 GO7 CREATE TABLE [dbo][Users] (8 [uname] [varchar] (15) NOT NULL

9 [Pwd] [varchar] (25) NOT NULL

10 [userRole] [varchar] (25) NOT NULL

11 ) ON [PRIMARY]12 GO13 ALTER TABLE [dbo][Users] WITH NOCHECK ADD14 CONSTRAINT [PK_Users] PRIMARY KEY NONCLUSTERED

15 (

16 [uname]

17 ) ON [PRIMARY]

18 GO19

20 INSERT INTO Users values(user1user1Manager)21 INSERT INTO Users values(user2user2Admin)22 INSERT INTO Users values(user3user3User)23 GO

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 329

24 Guarde el archivo como Userssql

25 En el equipo con Microsoft SQL Server abra Userssql en el Analizador de consultas En la lista de bases

de datos haga clic en pubs y ejecute la secuencia de comandos Esto crearaacute una tabla de usuarios de

ejemplo y llenaraacute la tabla de la base de datos Pubs que se utilizaraacute con esta aplicacioacuten de ejemplo

Volver al principio

Crear una paacutegina Logonaspx

1 Agregue un nuevo formulario Web Forms al proyecto denominado Logonaspx

2 Abra la paacutegina Logonaspx en el editor y cambie a la vista HTML

3 Copie el coacutedigo siguiente y utilice la opcioacuten Pegar como HTML del menuacute Edicioacuten para insertar el

coacutedigo entre las etiquetas ltformgt

4 lth3gt5 ltfont face=VerdanagtLogon Pageltfontgt

6 lth3gt7 lttablegt8 lttrgt

9 lttdgtEmaillttdgt

10 lttdgtltinput id=txtUserName type=text runat=servergtlttdgt

11 lttdgtltASPRequiredFieldValidator ControlToValidate=txtUserName

12 Display=Static ErrorMessage= runat=server

13 ID=vUserName gtlttdgt

14 lttrgt

15 lttrgt

16 lttdgtPasswordlttdgt

17 lttdgtltinput id=txtUserPass type=password runat=servergtlttdgt

18 lttdgtltASPRequiredFieldValidator ControlToValidate=txtUserPass

19 Display=Static ErrorMessage= runat=server

20 ID=vUserPass gt

21 lttdgt22 lttrgt

23 lttrgt

24 lttdgtPersistent Cookielttdgt

25 lttdgtltASPCheckBox id=chkPersistCookie runat=server

autopostback=false gtlttdgt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 429

26 lttdgtlttdgt

27 lttrgt

28 lttablegt29 ltinput type=submit Value=Logon runat=server

ID=cmdLogingtltpgtltpgt

30 ltaspLabel id=lblMsg ForeColor=red Font-Name=Verdana Font-Size=10 runat=server gt

Este formulario Web Forms se utiliza para presentar un formulario de inicio de sesioacuten a los usuarios de

manera que puedan proporcionar su nombre de usuario y su contrasentildea para iniciar sesioacuten en la

aplicacioacuten

31 Cambie a la vista Disentildeo y guarde la paacutegina

Volver al principio

Codificar el controlador de eventos para que valide las credenciales de usuario

En esta seccioacuten se presenta el coacutedigo que se coloca en la paacutegina de coacutedigo subyacente (Logonaspxcs)

1 Haga doble clic en Logon para abrir el archivo Logonaspxcs

2 Importe los espacios de nombres necesarios al archivo de coacutedigo subyacente

3 using SystemDataSqlClient4 using SystemWebSecurity

5 Cree una funcioacuten ValidateUser para validar las credenciales de usuario examinando la base de datos

(Aseguacuterese de que cambia la cadena de conexioacuten para sentildealar a su base de datos)

6 private bool ValidateUser( string userName string passWord )7 8 SqlConnection conn9 SqlCommand cmd10 string lookupPassword = null

11 12 Check for invalid userName

13 userName must not be null and must be between 1 and 15

characters

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 529

14 if ( ( null == userName ) || ( 0 == userNameLength ) || (

userNameLength gt 15 ) )

15

16 SystemDiagnosticsTraceWriteLine( [ValidateUser]

Input validation of userName failed )

17 return false

18

19 20 Check for invalid passWord

21 passWord must not be null and must be between 1 and 25

characters

22 if ( ( null == passWord ) || ( 0 == passWordLength ) || (

passWordLength gt 25 ) )

23

24 SystemDiagnosticsTraceWriteLine( [ValidateUser]

Input validation of passWord failed )

25 return false

26

27 28 try

29

30 Consult with your SQL Server administrator for an

appropriate connection

31 string to use to connect to your local SQL Server

32 conn = new SqlConnection( server=localhostIntegrated

Security=SSPIdatabase=pubs )

33 connOpen()

34 35 Create SqlCommand to select pwd field from users

table given supplied userName36 cmd = new SqlCommand( Select pwd from users where

uname=userName conn )

37 cmdParametersAdd( userName SqlDbTypeVarChar 25

)

38 cmdParameters[userName]Value = userName

39

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 629

40 Execute command and fetch pwd field into

lookupPassword string

41 lookupPassword = (string) cmdExecuteScalar()

42 43 Cleanup command and connection objects

44 cmdDispose()

45 connDispose()

46

47 catch ( Exception ex )

48

49 Add error handling here for debugging

50 This error message should not be sent back to the

caller

51 SystemDiagnosticsTraceWriteLine( [ValidateUser]

Exception + exMessage )

52

53 54 If no password found return false

55 if ( null == lookupPassword )

56

57 You could write failed login attempts here to event

log for additional security

58 return false

59

60 61 Compare lookupPassword and input passWord using a case-

sensitive comparison

62 return ( 0 == stringCompare( lookupPassword passWord false )

)

63

64

65 Puede utilizar uno de dos meacutetodos posibles para generar la cookie de autenticacioacuten de formularios y

redirigir al usuario a una paacutegina apropiada en el evento cmdLogin_ServerClick Se proporciona el

coacutedigo de ejemplo para ambos escenarios Utilice cualquiera de ellos seguacuten sea necesario

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 729

o Llame al meacutetodo RedirectFromLoginPage para generar automaacuteticamente la cookie de

autenticacioacuten de formularios y redirigir al usuario a una paacutegina apropiada en el evento

cmdLogin_ServerClick

o private void cmdLogin_ServerClick(object sender

SystemEventArgs e)

o

o if (ValidateUser(txtUserNameValuetxtUserPassValue) )

o FormsAuthenticationRedirectFromLoginPage(txtUserNameValue

o chkPersistCookieChecked)

o else

o ResponseRedirect(logonaspx true)

o

o Genere el vale de autenticacioacuten ciacutefrelo cree una cookie agreacuteguela a la respuesta y redirija al

usuario Esto le ofrece maacutes control sobre coacutemo crear la cookie Tambieacuten puede incluir datos

personalizados junto con FormsAuthenticationTicket en este caso

o private void cmdLogin_ServerClick(object sender

SystemEventArgs e)

o

o if (ValidateUser(txtUserNameValuetxtUserPassValue) )

o

o FormsAuthenticationTicket tkt

o string cookiestr

o HttpCookie ck

o tkt = new FormsAuthenticationTicket(1 txtUserNameValue

DateTimeNow

o DateTimeNowAddMinutes(30) chkPersistCookieChecked your

custom data)

o cookiestr = FormsAuthenticationEncrypt(tkt)

o ck = new HttpCookie(FormsAuthenticationFormsCookieName

cookiestr)

o if (chkPersistCookieChecked)

o ckExpires=tktExpiration

o ckPath = FormsAuthenticationFormsCookiePath

o ResponseCookiesAdd(ck)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 829

o o string strRedirect

o strRedirect = Request[ReturnUrl]

o if (strRedirect==null)

o strRedirect = defaultaspx

o ResponseRedirect(strRedirect true)

o

o else

o ResponseRedirect(logonaspx true)

o

66 Aseguacuterese de que el coacutedigo siguiente se agrega al meacutetodo InitializeComponent en el coacutedigo

generado por el Disentildeador de Web Forms

67 thiscmdLoginServerClick += newSystemEventHandler(thiscmdLogin_ServerClick)

Volver al principio

Crear una paacutegina Defaultaspx

En esta seccioacuten se crea una paacutegina de prueba a la que se redirige a los usuarios despueacutes de autenticarse Si los

usuarios van a esta paacutegina sin iniciar sesioacuten primero en la aplicacioacuten se les redirige a la paacutegina de inicio de sesioacuten

1 Cambie el nombre de la paacutegina WebForm1aspx existente como Defaultaspx y aacutebrala en el editor

2 Cambie a la vista HTML y copie el coacutedigo siguiente entre las etiquetas ltformgt

3 ltinput type=submit Value=SignOut runat=server id=cmdSignOutgt

Este botoacuten se utiliza para cerrar la sesioacuten de autenticacioacuten de formularios

4 Cambie a la vista Disentildeo y guarde la paacutegina

5 Importe los espacios de nombres necesarios al archivo de coacutedigo subyacente

6 using SystemWebSecurity

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 929

7 Haga doble clic en SignOut para abrir la paacutegina de coacutedigo subyacente (Defaultaspxcs) y copie el

coacutedigo siguiente al controlador de eventos cmdSignOut_ServerClick

8 private void cmdSignOut_ServerClick(object sender SystemEventArgs e)9 10 FormsAuthenticationSignOut()

11 ResponseRedirect(logonaspx true)

12

13 Aseguacuterese de que el coacutedigo siguiente se agrega al meacutetodo InitializeComponent en el coacutedigo

generado por el Disentildeador de Web Forms

14 thiscmdSignOutServerClick += newSystemEventHandler(thiscmdSignOut_ServerClick)

15 Guarde y compile el proyecto Ahora puede utilizar la aplicacioacuten

Volver al principio

Notas adicionales

Quizaacutes desee almacenar las contrasentildeas de manera segura en una base de datos Puede emplear la

funcioacuten de utilidad de la clase FormsAuthentication denominada

HashPasswordForStoringInConfigFile para cifrar las contrasentildeas antes de almacenarlas en la base de

datos o en el archivo de configuracioacuten

Quizaacutes desee almacenar la informacioacuten de conexioacuten de SQL en el archivo de configuracioacuten (Webconfig)

de forma que pueda modificarla faacutecilmente si es necesario

Quizaacutes desee considerar la posibilidad de agregar coacutedigo para impedir el inicio de sesioacuten de los piratas

informaacuteticos que intentan utilizar diferentes combinaciones de contrasentildeas Por ejemplo puede incluir

loacutegica que soacutelo acepte dos o tres intentos de inicio de sesioacuten Si el usuario no puede iniciar sesioacuten en un

cierto nuacutemero de intentos quizaacutes desee establecer un indicador en la base de datos para no permitir

que ese usuario inicie sesioacuten hasta que no vuelva a habilitar su cuenta visitando una paacutegina diferente o

llamando a su liacutenea de soporte teacutecnico Ademaacutes debe agregar un control de errores apropiado donde

sea necesario

Puesto que el usuario se identifica seguacuten la cookie de autenticacioacuten quizaacutes desee utilizar Capa de

sockets seguros (SSL) en esta aplicacioacuten para que nadie pueda interceptar la cookie de autenticacioacuten y

cualquier otra informacioacuten valiosa que se transmita

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1029

La autenticacioacuten basada en formularios requiere que su cliente acepte o habilite las cookies en su

explorador

El paraacutemetro timeout de la seccioacuten de configuracioacuten ltauthenticationgt controla el intervalo en el que

se vuelve a generar la cookie de autenticacioacuten Puede elegir un valor que proporcione mejor

rendimiento y seguridad

Algunos servidores proxy y memorias cacheacute intermedios de Internet pueden almacenar en cacheacute

respuestas del servidor Web que contienen encabezados Set-Cookie que se devuelven a un usuario

diferente Puesto que la autenticacioacuten basada en formularios utiliza una cookie para autenticar a los

usuarios esto puede hacer que los usuarios suplanten accidentalmente (o intencionadamente) a otro

usuario recibiendo una cookie de un servidor proxy o una memoria cacheacute intermedios que no estaba

dirigida originalmente a ellos

Volver al principio

Referencias

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten simple basada en formularios que utiliza

la seccioacuten ltcredentialsgt para almacenar usuarios y contrasentildeas consulte el ejemplo del Tutorial raacutepido de ASPNET

GotDotNet siguiente

Forms-Based Authentication (Autenticacioacuten basada en formularios)

httpsamplesgotdotnetcomquickstartaspplusdefaultaspxurl=quickstartaspplusdocformsauthaspx

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten basada en formularios que utiliza un

archivo XML para almacenar usuarios y contrasentildeas consulte el tema siguiente en la documentacioacuten del Kit de

desarrollo de software (SDK) de NET Framework

Forms Authentication Using An XML Users File (Autenticacioacuten de formularios utilizando un archivo XML Users)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-

uscpguidehtmlcpconcookieauthenticationusinganxmlusersfileasp

Para obtener maacutes informacioacuten acerca de la seguridad de las aplicaciones Web ASPNET consulte la siguiente

documentacioacuten de la Guiacutea del desarrollador de Microsoft NET Framework

ASPNET Web Application Security (Seguridad de aplicaciones Web ASPNET)

httpmsdn2microsoftcomen-uslibrary330a99hc(vs71)aspx

Para obtener maacutes informacioacuten acerca del espacio de nombres SystemWebSecurity consulte la siguiente

documentacioacuten de referencia de Microsoft NET Framework

SystemWebSecurity Namespace (Espacio de nombres SystemWebSecurity)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscprefhtmlfrlrfSystemWebSecurityasp

Para obtener maacutes informacioacuten acerca de la configuracioacuten de ASPNET consulte los siguientes artiacuteculos de la Guiacutea del

desarrollador de Microsoft NET Framework

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1129

ASPNET Configuration (Configuracioacuten de ASPNET)

httpmsdn2microsoftcomen-uslibraryaa719558(VS71)aspx

ASPNET Configuration Sections (Secciones de configuracioacuten de ASPNET)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscpguidehtmlcpgrfaspnetconfigurationsectionsasp

Para obtener informacioacuten acerca de las directrices de seguridad de ASPNET consulte la siguiente nota de producto

de MSDN

Authentication in ASPNET NET Security Guidance (Autenticacioacuten en ASPNET consejos sobre seguridad de NET)

httpmsdn2microsoftcomen-uslibraryms978378aspx

Para obtener maacutes informacioacuten general acerca de ASPNET visite el siguiente grupo de noticias de MSDN

httpwwwmicrosoftcomspanishmsdngruposnoticiasasp

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1229

En esta primera etapa solo considerareacute la creacioacuten del coacutedigo para accesar a una paacutegina donde seraacute necesario

utilizar un nombre de usuario y un password No hareacute ninguna modificacioacuten al WebConfig maacutes adelante lo

ocupareacute en otro ejemplo

Comencemoshelliphelliphellip

Vamos a crear la siguiente paacutegina Abriendo un proyecto nuevo para WebSite

Debe incluir dos etiquetas dos cajas de texto y un botoacuten Voy a crear una tabla que se llame usuarios que

cuente con dos campos usr y pwd los cuales seraacute de tipo nvarchar dentro de una Base de Datos que llamare

EST una vez que cree la Base de Datos la tabla los campos y agregue algunos registros voy a proceder a crear

un prodecimiento almacenado que seraacute capaz de poder identificar por mi si el usuario y el password son

correctos la manera es muy sencilla solo ldquocontemosrdquo mediante una consulta de S QL si existe un registros con

el usuario y el password que ingresamos si devuelve 1 el usuario podra entrar si no habra que indicarle que

algo escribio mal

El procedimiento almacenado se llama verifica y queda de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1329

Podemos probar el procedimiento almacenado que acabamos de crear dandole un click derecho sobre el y

seleccionando la opcioacuten Execute

Vamos a crear ahora el coacutedigo para el botoacuten para este paso vamos a utlizar SQLConnection y SQLCommand

ambos pertenecen a la coleccioacuten de nombres de SQLCLient para ellos es necesario agregarla en el encabezado

del programa de la siguiente manera

using SystemDataSqlClient

El coacutedigo del botoacuten quedariacutea de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1429

Oberven en el coacutedigo que utilizo dos WEBform maacutes si el valor que devuelve la consulta hecha a traeacutes del

proceimiento almacenado es 1 se iraacute a la paacutegina de Bienvenidaaspx en caso contrario le indicaraacute en

Erroraspx que se escribio incorrectamente el nombre usuario y contrasentildea para ello se debe agregar estod

dos WebForm maacutes

NOTA Para poder logar que se enmascare con (asteriscos) el t ipeo del

password es necesario que selecciones la caja de texto a utilizar y

posteriormente en propiedades en la opcioacuten TextMode elegir Password

Espero que les haya sido de mucha utilidad a todos un saludo

desde Meacutexico a todos los que han posteado sus comentarios

desde el resto de nuestro precioso paiacutes eso motiva mucho Un

fuerte abrazo a mis lectores de America Latina y Espantildea la

verdad sus comentarios alienta a seguir trabajando con maacutes

enfasis y a todos aquellos que han usado este medio para ponercosas ofensivas la verdad mejor busquen otro sitio no me

gustan esos comentarios ponganse a trabajar y utilicen mejor

el Espantildeol que es una lengua preciosa en lugar de escribir

puras tonterias aqui tratamos de compartir conocimiento

desarrollemos un planeta mejor

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1529

Un Stored Procedure o procedimiento almacenado es algo asi como una sentencia SQL que

se crea dentro de la base de datos Pero creo que si estaacuten leyendo esto es porque ya saben

lo que es un Stored Procedure y simplemente quieren saber como ejecutarlo desde una

paacutegina WEB

Los que no sepan que es un Stored Procedure les recomiendo buscar por otro lado

Bueno los Stored Procedure tienen un nombre y es lo que utilizaremos para llamarlos Esmuy simple y facil

Ejecucion de un Stored Procedure sin ningun paraacutemetro y sin RecordSet (poco usual

pero posible)

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Aqui llamamos al ST en este caso llamado procedimiento

oConnExecute EXEC procedimiento

oConnCloseSet oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Separar los paraacutemetros con coma ()

oConnExecute EXEC procedimiento param1 param2oConnClose

Set oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros recibiendo los datos en un Objeto

RecordSet

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexionSet RS = ServerCreateObject(ADODBRecordSet)

Separar los paraacutemetros con coma ()

RSOpen EXEC procedimiento param1 param2 oConn

Trabajamos con el RS

RSClose

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1629

Set RS = Nothing

oConnClose

Set oConn = Nothing

gt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1729

En este artiacuteculo paso a paso se usa el objeto DataReader para recuperar datos de un procedimiento almacenado de

Oracle Puede usar el objeto DataReader para recuperar una secuencia de datos de avance de soacutelo lectura de una

base de datos Al usar el objeto DataReader puede aumentar el rendimiento de la aplicacioacuten y reducir la carga del

sistema ya que soacutelo se guarda una fila en memoria

Volver al principio

Requisitos

En la lista siguiente se describe el hardware el software la infraestructura de red y los Service Pack recomendados

que se necesitaraacuten

Microsoft Windows 2000 Professional Windows 2000 Server Windows 2000 Advanced Server o

Windows NT 40 Server

Microsoft Visual Studio NET

En el presente artiacuteculo se da por supuesto que estaacute familiarizado con los temas siguientes

Visual C NET

Fundamentos y sintaxis de ADONET

Volver al principio

Crear las tablas de Oracle

En este ejemplo se usan tablas definidas en el esquema ScottTiger de Oracle El esquema ScottTiger de Oracle se

incluye con la instalacioacuten predeterminada de Oracle

Si este esquema no existe tiene que ejecutar la tabla siguiente e insertar secuencias de comandos para las tablas

CREATE TABLE DEPT

(DEPTNO NUMBER(20) NOT NULL

DNAME VARCHAR2(14) NULL

LOC VARCHAR2(13) NULL

PRIMARY KEY (DEPTNO)

)

INSERT INTO Dept VALUES(11SalesTexas)

INSERT INTO Dept VALUES(22AccountingWashington)

INSERT INTO Dept VALUES(33FinanceMaine)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1829

CREATE TABLE EMP

(EMPNO NUMBER(40) NOT NULL

ENAME VARCHAR2(10) NULL

JOB VARCHAR2(9) NULL

MGR NUMBER(40) NULL

SAL NUMBER(72) NULL

COMM NUMBER(72) NULL

DEPTNO NUMBER(20) NULL

FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)

PRIMARY KEY (EMPNO)

)

INSERT INTO Emp VALUES(123BobSales555350001211)

INSERT INTO Emp VALUES(321SueFinance555420001233)

INSERT INTO Emp VALUES(234MaryAccount555330001222)

Volver al principio

Crear los paquetes de Oracle

Cree el paquete de Oracle siguiente en el servidor Oracle

CREATE OR REPLACE PACKAGE curspkg_join AS

TYPE t_cursor IS REF CURSOR

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT

t_cursor)

END curspkg_join

Cree el siguiente cuerpo de paquete de Oracle en el servidor Oracle

CREATE OR REPLACE PACKAGE BODY curspkg_join AS

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT t_cursor)

IS

v_cursor t_cursor

BEGIN

IF n_EMPNO ltgt 0

THEN

OPEN v_cursor FOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1929

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = n_EMPNO

ELSE

OPEN v_cursor FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

io_cursor = v_cursor

END open_join_cursor1

END curspkg_join

Volver al principio

Crear la aplicacioacuten de Visual C NET

1 Cree un nuevo proyecto de aplicacioacuten para Windows de Visual C Se agregaraacute Form1 al proyecto de

manera predeterminada

2 Agregue el siguiente coacutedigo al principio de la ventana de coacutedigo

using SystemDataOleDb

3 Agregue el coacutedigo siguiente al evento Form_Load de Form1

4 OleDbConnection Oraclecon = newOleDbConnection(Provider=MSDAORA1Password=tiger

5 + User ID=scottData Source=OracleServerPersist Security

Info=True)

6 OracleconOpen()7 OleDbCommand myCMD = new OleDbCommand8 (call curspkg_joinopen_join_cursor1( resultset 0 io_cursor)

Oraclecon)

9 myCMDParametersAdd(ID OleDbTypeNumeric 4)Value = 0

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 3: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 329

24 Guarde el archivo como Userssql

25 En el equipo con Microsoft SQL Server abra Userssql en el Analizador de consultas En la lista de bases

de datos haga clic en pubs y ejecute la secuencia de comandos Esto crearaacute una tabla de usuarios de

ejemplo y llenaraacute la tabla de la base de datos Pubs que se utilizaraacute con esta aplicacioacuten de ejemplo

Volver al principio

Crear una paacutegina Logonaspx

1 Agregue un nuevo formulario Web Forms al proyecto denominado Logonaspx

2 Abra la paacutegina Logonaspx en el editor y cambie a la vista HTML

3 Copie el coacutedigo siguiente y utilice la opcioacuten Pegar como HTML del menuacute Edicioacuten para insertar el

coacutedigo entre las etiquetas ltformgt

4 lth3gt5 ltfont face=VerdanagtLogon Pageltfontgt

6 lth3gt7 lttablegt8 lttrgt

9 lttdgtEmaillttdgt

10 lttdgtltinput id=txtUserName type=text runat=servergtlttdgt

11 lttdgtltASPRequiredFieldValidator ControlToValidate=txtUserName

12 Display=Static ErrorMessage= runat=server

13 ID=vUserName gtlttdgt

14 lttrgt

15 lttrgt

16 lttdgtPasswordlttdgt

17 lttdgtltinput id=txtUserPass type=password runat=servergtlttdgt

18 lttdgtltASPRequiredFieldValidator ControlToValidate=txtUserPass

19 Display=Static ErrorMessage= runat=server

20 ID=vUserPass gt

21 lttdgt22 lttrgt

23 lttrgt

24 lttdgtPersistent Cookielttdgt

25 lttdgtltASPCheckBox id=chkPersistCookie runat=server

autopostback=false gtlttdgt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 429

26 lttdgtlttdgt

27 lttrgt

28 lttablegt29 ltinput type=submit Value=Logon runat=server

ID=cmdLogingtltpgtltpgt

30 ltaspLabel id=lblMsg ForeColor=red Font-Name=Verdana Font-Size=10 runat=server gt

Este formulario Web Forms se utiliza para presentar un formulario de inicio de sesioacuten a los usuarios de

manera que puedan proporcionar su nombre de usuario y su contrasentildea para iniciar sesioacuten en la

aplicacioacuten

31 Cambie a la vista Disentildeo y guarde la paacutegina

Volver al principio

Codificar el controlador de eventos para que valide las credenciales de usuario

En esta seccioacuten se presenta el coacutedigo que se coloca en la paacutegina de coacutedigo subyacente (Logonaspxcs)

1 Haga doble clic en Logon para abrir el archivo Logonaspxcs

2 Importe los espacios de nombres necesarios al archivo de coacutedigo subyacente

3 using SystemDataSqlClient4 using SystemWebSecurity

5 Cree una funcioacuten ValidateUser para validar las credenciales de usuario examinando la base de datos

(Aseguacuterese de que cambia la cadena de conexioacuten para sentildealar a su base de datos)

6 private bool ValidateUser( string userName string passWord )7 8 SqlConnection conn9 SqlCommand cmd10 string lookupPassword = null

11 12 Check for invalid userName

13 userName must not be null and must be between 1 and 15

characters

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 529

14 if ( ( null == userName ) || ( 0 == userNameLength ) || (

userNameLength gt 15 ) )

15

16 SystemDiagnosticsTraceWriteLine( [ValidateUser]

Input validation of userName failed )

17 return false

18

19 20 Check for invalid passWord

21 passWord must not be null and must be between 1 and 25

characters

22 if ( ( null == passWord ) || ( 0 == passWordLength ) || (

passWordLength gt 25 ) )

23

24 SystemDiagnosticsTraceWriteLine( [ValidateUser]

Input validation of passWord failed )

25 return false

26

27 28 try

29

30 Consult with your SQL Server administrator for an

appropriate connection

31 string to use to connect to your local SQL Server

32 conn = new SqlConnection( server=localhostIntegrated

Security=SSPIdatabase=pubs )

33 connOpen()

34 35 Create SqlCommand to select pwd field from users

table given supplied userName36 cmd = new SqlCommand( Select pwd from users where

uname=userName conn )

37 cmdParametersAdd( userName SqlDbTypeVarChar 25

)

38 cmdParameters[userName]Value = userName

39

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 629

40 Execute command and fetch pwd field into

lookupPassword string

41 lookupPassword = (string) cmdExecuteScalar()

42 43 Cleanup command and connection objects

44 cmdDispose()

45 connDispose()

46

47 catch ( Exception ex )

48

49 Add error handling here for debugging

50 This error message should not be sent back to the

caller

51 SystemDiagnosticsTraceWriteLine( [ValidateUser]

Exception + exMessage )

52

53 54 If no password found return false

55 if ( null == lookupPassword )

56

57 You could write failed login attempts here to event

log for additional security

58 return false

59

60 61 Compare lookupPassword and input passWord using a case-

sensitive comparison

62 return ( 0 == stringCompare( lookupPassword passWord false )

)

63

64

65 Puede utilizar uno de dos meacutetodos posibles para generar la cookie de autenticacioacuten de formularios y

redirigir al usuario a una paacutegina apropiada en el evento cmdLogin_ServerClick Se proporciona el

coacutedigo de ejemplo para ambos escenarios Utilice cualquiera de ellos seguacuten sea necesario

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 729

o Llame al meacutetodo RedirectFromLoginPage para generar automaacuteticamente la cookie de

autenticacioacuten de formularios y redirigir al usuario a una paacutegina apropiada en el evento

cmdLogin_ServerClick

o private void cmdLogin_ServerClick(object sender

SystemEventArgs e)

o

o if (ValidateUser(txtUserNameValuetxtUserPassValue) )

o FormsAuthenticationRedirectFromLoginPage(txtUserNameValue

o chkPersistCookieChecked)

o else

o ResponseRedirect(logonaspx true)

o

o Genere el vale de autenticacioacuten ciacutefrelo cree una cookie agreacuteguela a la respuesta y redirija al

usuario Esto le ofrece maacutes control sobre coacutemo crear la cookie Tambieacuten puede incluir datos

personalizados junto con FormsAuthenticationTicket en este caso

o private void cmdLogin_ServerClick(object sender

SystemEventArgs e)

o

o if (ValidateUser(txtUserNameValuetxtUserPassValue) )

o

o FormsAuthenticationTicket tkt

o string cookiestr

o HttpCookie ck

o tkt = new FormsAuthenticationTicket(1 txtUserNameValue

DateTimeNow

o DateTimeNowAddMinutes(30) chkPersistCookieChecked your

custom data)

o cookiestr = FormsAuthenticationEncrypt(tkt)

o ck = new HttpCookie(FormsAuthenticationFormsCookieName

cookiestr)

o if (chkPersistCookieChecked)

o ckExpires=tktExpiration

o ckPath = FormsAuthenticationFormsCookiePath

o ResponseCookiesAdd(ck)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 829

o o string strRedirect

o strRedirect = Request[ReturnUrl]

o if (strRedirect==null)

o strRedirect = defaultaspx

o ResponseRedirect(strRedirect true)

o

o else

o ResponseRedirect(logonaspx true)

o

66 Aseguacuterese de que el coacutedigo siguiente se agrega al meacutetodo InitializeComponent en el coacutedigo

generado por el Disentildeador de Web Forms

67 thiscmdLoginServerClick += newSystemEventHandler(thiscmdLogin_ServerClick)

Volver al principio

Crear una paacutegina Defaultaspx

En esta seccioacuten se crea una paacutegina de prueba a la que se redirige a los usuarios despueacutes de autenticarse Si los

usuarios van a esta paacutegina sin iniciar sesioacuten primero en la aplicacioacuten se les redirige a la paacutegina de inicio de sesioacuten

1 Cambie el nombre de la paacutegina WebForm1aspx existente como Defaultaspx y aacutebrala en el editor

2 Cambie a la vista HTML y copie el coacutedigo siguiente entre las etiquetas ltformgt

3 ltinput type=submit Value=SignOut runat=server id=cmdSignOutgt

Este botoacuten se utiliza para cerrar la sesioacuten de autenticacioacuten de formularios

4 Cambie a la vista Disentildeo y guarde la paacutegina

5 Importe los espacios de nombres necesarios al archivo de coacutedigo subyacente

6 using SystemWebSecurity

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 929

7 Haga doble clic en SignOut para abrir la paacutegina de coacutedigo subyacente (Defaultaspxcs) y copie el

coacutedigo siguiente al controlador de eventos cmdSignOut_ServerClick

8 private void cmdSignOut_ServerClick(object sender SystemEventArgs e)9 10 FormsAuthenticationSignOut()

11 ResponseRedirect(logonaspx true)

12

13 Aseguacuterese de que el coacutedigo siguiente se agrega al meacutetodo InitializeComponent en el coacutedigo

generado por el Disentildeador de Web Forms

14 thiscmdSignOutServerClick += newSystemEventHandler(thiscmdSignOut_ServerClick)

15 Guarde y compile el proyecto Ahora puede utilizar la aplicacioacuten

Volver al principio

Notas adicionales

Quizaacutes desee almacenar las contrasentildeas de manera segura en una base de datos Puede emplear la

funcioacuten de utilidad de la clase FormsAuthentication denominada

HashPasswordForStoringInConfigFile para cifrar las contrasentildeas antes de almacenarlas en la base de

datos o en el archivo de configuracioacuten

Quizaacutes desee almacenar la informacioacuten de conexioacuten de SQL en el archivo de configuracioacuten (Webconfig)

de forma que pueda modificarla faacutecilmente si es necesario

Quizaacutes desee considerar la posibilidad de agregar coacutedigo para impedir el inicio de sesioacuten de los piratas

informaacuteticos que intentan utilizar diferentes combinaciones de contrasentildeas Por ejemplo puede incluir

loacutegica que soacutelo acepte dos o tres intentos de inicio de sesioacuten Si el usuario no puede iniciar sesioacuten en un

cierto nuacutemero de intentos quizaacutes desee establecer un indicador en la base de datos para no permitir

que ese usuario inicie sesioacuten hasta que no vuelva a habilitar su cuenta visitando una paacutegina diferente o

llamando a su liacutenea de soporte teacutecnico Ademaacutes debe agregar un control de errores apropiado donde

sea necesario

Puesto que el usuario se identifica seguacuten la cookie de autenticacioacuten quizaacutes desee utilizar Capa de

sockets seguros (SSL) en esta aplicacioacuten para que nadie pueda interceptar la cookie de autenticacioacuten y

cualquier otra informacioacuten valiosa que se transmita

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1029

La autenticacioacuten basada en formularios requiere que su cliente acepte o habilite las cookies en su

explorador

El paraacutemetro timeout de la seccioacuten de configuracioacuten ltauthenticationgt controla el intervalo en el que

se vuelve a generar la cookie de autenticacioacuten Puede elegir un valor que proporcione mejor

rendimiento y seguridad

Algunos servidores proxy y memorias cacheacute intermedios de Internet pueden almacenar en cacheacute

respuestas del servidor Web que contienen encabezados Set-Cookie que se devuelven a un usuario

diferente Puesto que la autenticacioacuten basada en formularios utiliza una cookie para autenticar a los

usuarios esto puede hacer que los usuarios suplanten accidentalmente (o intencionadamente) a otro

usuario recibiendo una cookie de un servidor proxy o una memoria cacheacute intermedios que no estaba

dirigida originalmente a ellos

Volver al principio

Referencias

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten simple basada en formularios que utiliza

la seccioacuten ltcredentialsgt para almacenar usuarios y contrasentildeas consulte el ejemplo del Tutorial raacutepido de ASPNET

GotDotNet siguiente

Forms-Based Authentication (Autenticacioacuten basada en formularios)

httpsamplesgotdotnetcomquickstartaspplusdefaultaspxurl=quickstartaspplusdocformsauthaspx

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten basada en formularios que utiliza un

archivo XML para almacenar usuarios y contrasentildeas consulte el tema siguiente en la documentacioacuten del Kit de

desarrollo de software (SDK) de NET Framework

Forms Authentication Using An XML Users File (Autenticacioacuten de formularios utilizando un archivo XML Users)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-

uscpguidehtmlcpconcookieauthenticationusinganxmlusersfileasp

Para obtener maacutes informacioacuten acerca de la seguridad de las aplicaciones Web ASPNET consulte la siguiente

documentacioacuten de la Guiacutea del desarrollador de Microsoft NET Framework

ASPNET Web Application Security (Seguridad de aplicaciones Web ASPNET)

httpmsdn2microsoftcomen-uslibrary330a99hc(vs71)aspx

Para obtener maacutes informacioacuten acerca del espacio de nombres SystemWebSecurity consulte la siguiente

documentacioacuten de referencia de Microsoft NET Framework

SystemWebSecurity Namespace (Espacio de nombres SystemWebSecurity)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscprefhtmlfrlrfSystemWebSecurityasp

Para obtener maacutes informacioacuten acerca de la configuracioacuten de ASPNET consulte los siguientes artiacuteculos de la Guiacutea del

desarrollador de Microsoft NET Framework

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1129

ASPNET Configuration (Configuracioacuten de ASPNET)

httpmsdn2microsoftcomen-uslibraryaa719558(VS71)aspx

ASPNET Configuration Sections (Secciones de configuracioacuten de ASPNET)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscpguidehtmlcpgrfaspnetconfigurationsectionsasp

Para obtener informacioacuten acerca de las directrices de seguridad de ASPNET consulte la siguiente nota de producto

de MSDN

Authentication in ASPNET NET Security Guidance (Autenticacioacuten en ASPNET consejos sobre seguridad de NET)

httpmsdn2microsoftcomen-uslibraryms978378aspx

Para obtener maacutes informacioacuten general acerca de ASPNET visite el siguiente grupo de noticias de MSDN

httpwwwmicrosoftcomspanishmsdngruposnoticiasasp

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1229

En esta primera etapa solo considerareacute la creacioacuten del coacutedigo para accesar a una paacutegina donde seraacute necesario

utilizar un nombre de usuario y un password No hareacute ninguna modificacioacuten al WebConfig maacutes adelante lo

ocupareacute en otro ejemplo

Comencemoshelliphelliphellip

Vamos a crear la siguiente paacutegina Abriendo un proyecto nuevo para WebSite

Debe incluir dos etiquetas dos cajas de texto y un botoacuten Voy a crear una tabla que se llame usuarios que

cuente con dos campos usr y pwd los cuales seraacute de tipo nvarchar dentro de una Base de Datos que llamare

EST una vez que cree la Base de Datos la tabla los campos y agregue algunos registros voy a proceder a crear

un prodecimiento almacenado que seraacute capaz de poder identificar por mi si el usuario y el password son

correctos la manera es muy sencilla solo ldquocontemosrdquo mediante una consulta de S QL si existe un registros con

el usuario y el password que ingresamos si devuelve 1 el usuario podra entrar si no habra que indicarle que

algo escribio mal

El procedimiento almacenado se llama verifica y queda de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1329

Podemos probar el procedimiento almacenado que acabamos de crear dandole un click derecho sobre el y

seleccionando la opcioacuten Execute

Vamos a crear ahora el coacutedigo para el botoacuten para este paso vamos a utlizar SQLConnection y SQLCommand

ambos pertenecen a la coleccioacuten de nombres de SQLCLient para ellos es necesario agregarla en el encabezado

del programa de la siguiente manera

using SystemDataSqlClient

El coacutedigo del botoacuten quedariacutea de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1429

Oberven en el coacutedigo que utilizo dos WEBform maacutes si el valor que devuelve la consulta hecha a traeacutes del

proceimiento almacenado es 1 se iraacute a la paacutegina de Bienvenidaaspx en caso contrario le indicaraacute en

Erroraspx que se escribio incorrectamente el nombre usuario y contrasentildea para ello se debe agregar estod

dos WebForm maacutes

NOTA Para poder logar que se enmascare con (asteriscos) el t ipeo del

password es necesario que selecciones la caja de texto a utilizar y

posteriormente en propiedades en la opcioacuten TextMode elegir Password

Espero que les haya sido de mucha utilidad a todos un saludo

desde Meacutexico a todos los que han posteado sus comentarios

desde el resto de nuestro precioso paiacutes eso motiva mucho Un

fuerte abrazo a mis lectores de America Latina y Espantildea la

verdad sus comentarios alienta a seguir trabajando con maacutes

enfasis y a todos aquellos que han usado este medio para ponercosas ofensivas la verdad mejor busquen otro sitio no me

gustan esos comentarios ponganse a trabajar y utilicen mejor

el Espantildeol que es una lengua preciosa en lugar de escribir

puras tonterias aqui tratamos de compartir conocimiento

desarrollemos un planeta mejor

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1529

Un Stored Procedure o procedimiento almacenado es algo asi como una sentencia SQL que

se crea dentro de la base de datos Pero creo que si estaacuten leyendo esto es porque ya saben

lo que es un Stored Procedure y simplemente quieren saber como ejecutarlo desde una

paacutegina WEB

Los que no sepan que es un Stored Procedure les recomiendo buscar por otro lado

Bueno los Stored Procedure tienen un nombre y es lo que utilizaremos para llamarlos Esmuy simple y facil

Ejecucion de un Stored Procedure sin ningun paraacutemetro y sin RecordSet (poco usual

pero posible)

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Aqui llamamos al ST en este caso llamado procedimiento

oConnExecute EXEC procedimiento

oConnCloseSet oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Separar los paraacutemetros con coma ()

oConnExecute EXEC procedimiento param1 param2oConnClose

Set oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros recibiendo los datos en un Objeto

RecordSet

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexionSet RS = ServerCreateObject(ADODBRecordSet)

Separar los paraacutemetros con coma ()

RSOpen EXEC procedimiento param1 param2 oConn

Trabajamos con el RS

RSClose

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1629

Set RS = Nothing

oConnClose

Set oConn = Nothing

gt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1729

En este artiacuteculo paso a paso se usa el objeto DataReader para recuperar datos de un procedimiento almacenado de

Oracle Puede usar el objeto DataReader para recuperar una secuencia de datos de avance de soacutelo lectura de una

base de datos Al usar el objeto DataReader puede aumentar el rendimiento de la aplicacioacuten y reducir la carga del

sistema ya que soacutelo se guarda una fila en memoria

Volver al principio

Requisitos

En la lista siguiente se describe el hardware el software la infraestructura de red y los Service Pack recomendados

que se necesitaraacuten

Microsoft Windows 2000 Professional Windows 2000 Server Windows 2000 Advanced Server o

Windows NT 40 Server

Microsoft Visual Studio NET

En el presente artiacuteculo se da por supuesto que estaacute familiarizado con los temas siguientes

Visual C NET

Fundamentos y sintaxis de ADONET

Volver al principio

Crear las tablas de Oracle

En este ejemplo se usan tablas definidas en el esquema ScottTiger de Oracle El esquema ScottTiger de Oracle se

incluye con la instalacioacuten predeterminada de Oracle

Si este esquema no existe tiene que ejecutar la tabla siguiente e insertar secuencias de comandos para las tablas

CREATE TABLE DEPT

(DEPTNO NUMBER(20) NOT NULL

DNAME VARCHAR2(14) NULL

LOC VARCHAR2(13) NULL

PRIMARY KEY (DEPTNO)

)

INSERT INTO Dept VALUES(11SalesTexas)

INSERT INTO Dept VALUES(22AccountingWashington)

INSERT INTO Dept VALUES(33FinanceMaine)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1829

CREATE TABLE EMP

(EMPNO NUMBER(40) NOT NULL

ENAME VARCHAR2(10) NULL

JOB VARCHAR2(9) NULL

MGR NUMBER(40) NULL

SAL NUMBER(72) NULL

COMM NUMBER(72) NULL

DEPTNO NUMBER(20) NULL

FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)

PRIMARY KEY (EMPNO)

)

INSERT INTO Emp VALUES(123BobSales555350001211)

INSERT INTO Emp VALUES(321SueFinance555420001233)

INSERT INTO Emp VALUES(234MaryAccount555330001222)

Volver al principio

Crear los paquetes de Oracle

Cree el paquete de Oracle siguiente en el servidor Oracle

CREATE OR REPLACE PACKAGE curspkg_join AS

TYPE t_cursor IS REF CURSOR

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT

t_cursor)

END curspkg_join

Cree el siguiente cuerpo de paquete de Oracle en el servidor Oracle

CREATE OR REPLACE PACKAGE BODY curspkg_join AS

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT t_cursor)

IS

v_cursor t_cursor

BEGIN

IF n_EMPNO ltgt 0

THEN

OPEN v_cursor FOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1929

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = n_EMPNO

ELSE

OPEN v_cursor FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

io_cursor = v_cursor

END open_join_cursor1

END curspkg_join

Volver al principio

Crear la aplicacioacuten de Visual C NET

1 Cree un nuevo proyecto de aplicacioacuten para Windows de Visual C Se agregaraacute Form1 al proyecto de

manera predeterminada

2 Agregue el siguiente coacutedigo al principio de la ventana de coacutedigo

using SystemDataOleDb

3 Agregue el coacutedigo siguiente al evento Form_Load de Form1

4 OleDbConnection Oraclecon = newOleDbConnection(Provider=MSDAORA1Password=tiger

5 + User ID=scottData Source=OracleServerPersist Security

Info=True)

6 OracleconOpen()7 OleDbCommand myCMD = new OleDbCommand8 (call curspkg_joinopen_join_cursor1( resultset 0 io_cursor)

Oraclecon)

9 myCMDParametersAdd(ID OleDbTypeNumeric 4)Value = 0

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 4: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 429

26 lttdgtlttdgt

27 lttrgt

28 lttablegt29 ltinput type=submit Value=Logon runat=server

ID=cmdLogingtltpgtltpgt

30 ltaspLabel id=lblMsg ForeColor=red Font-Name=Verdana Font-Size=10 runat=server gt

Este formulario Web Forms se utiliza para presentar un formulario de inicio de sesioacuten a los usuarios de

manera que puedan proporcionar su nombre de usuario y su contrasentildea para iniciar sesioacuten en la

aplicacioacuten

31 Cambie a la vista Disentildeo y guarde la paacutegina

Volver al principio

Codificar el controlador de eventos para que valide las credenciales de usuario

En esta seccioacuten se presenta el coacutedigo que se coloca en la paacutegina de coacutedigo subyacente (Logonaspxcs)

1 Haga doble clic en Logon para abrir el archivo Logonaspxcs

2 Importe los espacios de nombres necesarios al archivo de coacutedigo subyacente

3 using SystemDataSqlClient4 using SystemWebSecurity

5 Cree una funcioacuten ValidateUser para validar las credenciales de usuario examinando la base de datos

(Aseguacuterese de que cambia la cadena de conexioacuten para sentildealar a su base de datos)

6 private bool ValidateUser( string userName string passWord )7 8 SqlConnection conn9 SqlCommand cmd10 string lookupPassword = null

11 12 Check for invalid userName

13 userName must not be null and must be between 1 and 15

characters

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 529

14 if ( ( null == userName ) || ( 0 == userNameLength ) || (

userNameLength gt 15 ) )

15

16 SystemDiagnosticsTraceWriteLine( [ValidateUser]

Input validation of userName failed )

17 return false

18

19 20 Check for invalid passWord

21 passWord must not be null and must be between 1 and 25

characters

22 if ( ( null == passWord ) || ( 0 == passWordLength ) || (

passWordLength gt 25 ) )

23

24 SystemDiagnosticsTraceWriteLine( [ValidateUser]

Input validation of passWord failed )

25 return false

26

27 28 try

29

30 Consult with your SQL Server administrator for an

appropriate connection

31 string to use to connect to your local SQL Server

32 conn = new SqlConnection( server=localhostIntegrated

Security=SSPIdatabase=pubs )

33 connOpen()

34 35 Create SqlCommand to select pwd field from users

table given supplied userName36 cmd = new SqlCommand( Select pwd from users where

uname=userName conn )

37 cmdParametersAdd( userName SqlDbTypeVarChar 25

)

38 cmdParameters[userName]Value = userName

39

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 629

40 Execute command and fetch pwd field into

lookupPassword string

41 lookupPassword = (string) cmdExecuteScalar()

42 43 Cleanup command and connection objects

44 cmdDispose()

45 connDispose()

46

47 catch ( Exception ex )

48

49 Add error handling here for debugging

50 This error message should not be sent back to the

caller

51 SystemDiagnosticsTraceWriteLine( [ValidateUser]

Exception + exMessage )

52

53 54 If no password found return false

55 if ( null == lookupPassword )

56

57 You could write failed login attempts here to event

log for additional security

58 return false

59

60 61 Compare lookupPassword and input passWord using a case-

sensitive comparison

62 return ( 0 == stringCompare( lookupPassword passWord false )

)

63

64

65 Puede utilizar uno de dos meacutetodos posibles para generar la cookie de autenticacioacuten de formularios y

redirigir al usuario a una paacutegina apropiada en el evento cmdLogin_ServerClick Se proporciona el

coacutedigo de ejemplo para ambos escenarios Utilice cualquiera de ellos seguacuten sea necesario

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 729

o Llame al meacutetodo RedirectFromLoginPage para generar automaacuteticamente la cookie de

autenticacioacuten de formularios y redirigir al usuario a una paacutegina apropiada en el evento

cmdLogin_ServerClick

o private void cmdLogin_ServerClick(object sender

SystemEventArgs e)

o

o if (ValidateUser(txtUserNameValuetxtUserPassValue) )

o FormsAuthenticationRedirectFromLoginPage(txtUserNameValue

o chkPersistCookieChecked)

o else

o ResponseRedirect(logonaspx true)

o

o Genere el vale de autenticacioacuten ciacutefrelo cree una cookie agreacuteguela a la respuesta y redirija al

usuario Esto le ofrece maacutes control sobre coacutemo crear la cookie Tambieacuten puede incluir datos

personalizados junto con FormsAuthenticationTicket en este caso

o private void cmdLogin_ServerClick(object sender

SystemEventArgs e)

o

o if (ValidateUser(txtUserNameValuetxtUserPassValue) )

o

o FormsAuthenticationTicket tkt

o string cookiestr

o HttpCookie ck

o tkt = new FormsAuthenticationTicket(1 txtUserNameValue

DateTimeNow

o DateTimeNowAddMinutes(30) chkPersistCookieChecked your

custom data)

o cookiestr = FormsAuthenticationEncrypt(tkt)

o ck = new HttpCookie(FormsAuthenticationFormsCookieName

cookiestr)

o if (chkPersistCookieChecked)

o ckExpires=tktExpiration

o ckPath = FormsAuthenticationFormsCookiePath

o ResponseCookiesAdd(ck)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 829

o o string strRedirect

o strRedirect = Request[ReturnUrl]

o if (strRedirect==null)

o strRedirect = defaultaspx

o ResponseRedirect(strRedirect true)

o

o else

o ResponseRedirect(logonaspx true)

o

66 Aseguacuterese de que el coacutedigo siguiente se agrega al meacutetodo InitializeComponent en el coacutedigo

generado por el Disentildeador de Web Forms

67 thiscmdLoginServerClick += newSystemEventHandler(thiscmdLogin_ServerClick)

Volver al principio

Crear una paacutegina Defaultaspx

En esta seccioacuten se crea una paacutegina de prueba a la que se redirige a los usuarios despueacutes de autenticarse Si los

usuarios van a esta paacutegina sin iniciar sesioacuten primero en la aplicacioacuten se les redirige a la paacutegina de inicio de sesioacuten

1 Cambie el nombre de la paacutegina WebForm1aspx existente como Defaultaspx y aacutebrala en el editor

2 Cambie a la vista HTML y copie el coacutedigo siguiente entre las etiquetas ltformgt

3 ltinput type=submit Value=SignOut runat=server id=cmdSignOutgt

Este botoacuten se utiliza para cerrar la sesioacuten de autenticacioacuten de formularios

4 Cambie a la vista Disentildeo y guarde la paacutegina

5 Importe los espacios de nombres necesarios al archivo de coacutedigo subyacente

6 using SystemWebSecurity

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 929

7 Haga doble clic en SignOut para abrir la paacutegina de coacutedigo subyacente (Defaultaspxcs) y copie el

coacutedigo siguiente al controlador de eventos cmdSignOut_ServerClick

8 private void cmdSignOut_ServerClick(object sender SystemEventArgs e)9 10 FormsAuthenticationSignOut()

11 ResponseRedirect(logonaspx true)

12

13 Aseguacuterese de que el coacutedigo siguiente se agrega al meacutetodo InitializeComponent en el coacutedigo

generado por el Disentildeador de Web Forms

14 thiscmdSignOutServerClick += newSystemEventHandler(thiscmdSignOut_ServerClick)

15 Guarde y compile el proyecto Ahora puede utilizar la aplicacioacuten

Volver al principio

Notas adicionales

Quizaacutes desee almacenar las contrasentildeas de manera segura en una base de datos Puede emplear la

funcioacuten de utilidad de la clase FormsAuthentication denominada

HashPasswordForStoringInConfigFile para cifrar las contrasentildeas antes de almacenarlas en la base de

datos o en el archivo de configuracioacuten

Quizaacutes desee almacenar la informacioacuten de conexioacuten de SQL en el archivo de configuracioacuten (Webconfig)

de forma que pueda modificarla faacutecilmente si es necesario

Quizaacutes desee considerar la posibilidad de agregar coacutedigo para impedir el inicio de sesioacuten de los piratas

informaacuteticos que intentan utilizar diferentes combinaciones de contrasentildeas Por ejemplo puede incluir

loacutegica que soacutelo acepte dos o tres intentos de inicio de sesioacuten Si el usuario no puede iniciar sesioacuten en un

cierto nuacutemero de intentos quizaacutes desee establecer un indicador en la base de datos para no permitir

que ese usuario inicie sesioacuten hasta que no vuelva a habilitar su cuenta visitando una paacutegina diferente o

llamando a su liacutenea de soporte teacutecnico Ademaacutes debe agregar un control de errores apropiado donde

sea necesario

Puesto que el usuario se identifica seguacuten la cookie de autenticacioacuten quizaacutes desee utilizar Capa de

sockets seguros (SSL) en esta aplicacioacuten para que nadie pueda interceptar la cookie de autenticacioacuten y

cualquier otra informacioacuten valiosa que se transmita

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1029

La autenticacioacuten basada en formularios requiere que su cliente acepte o habilite las cookies en su

explorador

El paraacutemetro timeout de la seccioacuten de configuracioacuten ltauthenticationgt controla el intervalo en el que

se vuelve a generar la cookie de autenticacioacuten Puede elegir un valor que proporcione mejor

rendimiento y seguridad

Algunos servidores proxy y memorias cacheacute intermedios de Internet pueden almacenar en cacheacute

respuestas del servidor Web que contienen encabezados Set-Cookie que se devuelven a un usuario

diferente Puesto que la autenticacioacuten basada en formularios utiliza una cookie para autenticar a los

usuarios esto puede hacer que los usuarios suplanten accidentalmente (o intencionadamente) a otro

usuario recibiendo una cookie de un servidor proxy o una memoria cacheacute intermedios que no estaba

dirigida originalmente a ellos

Volver al principio

Referencias

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten simple basada en formularios que utiliza

la seccioacuten ltcredentialsgt para almacenar usuarios y contrasentildeas consulte el ejemplo del Tutorial raacutepido de ASPNET

GotDotNet siguiente

Forms-Based Authentication (Autenticacioacuten basada en formularios)

httpsamplesgotdotnetcomquickstartaspplusdefaultaspxurl=quickstartaspplusdocformsauthaspx

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten basada en formularios que utiliza un

archivo XML para almacenar usuarios y contrasentildeas consulte el tema siguiente en la documentacioacuten del Kit de

desarrollo de software (SDK) de NET Framework

Forms Authentication Using An XML Users File (Autenticacioacuten de formularios utilizando un archivo XML Users)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-

uscpguidehtmlcpconcookieauthenticationusinganxmlusersfileasp

Para obtener maacutes informacioacuten acerca de la seguridad de las aplicaciones Web ASPNET consulte la siguiente

documentacioacuten de la Guiacutea del desarrollador de Microsoft NET Framework

ASPNET Web Application Security (Seguridad de aplicaciones Web ASPNET)

httpmsdn2microsoftcomen-uslibrary330a99hc(vs71)aspx

Para obtener maacutes informacioacuten acerca del espacio de nombres SystemWebSecurity consulte la siguiente

documentacioacuten de referencia de Microsoft NET Framework

SystemWebSecurity Namespace (Espacio de nombres SystemWebSecurity)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscprefhtmlfrlrfSystemWebSecurityasp

Para obtener maacutes informacioacuten acerca de la configuracioacuten de ASPNET consulte los siguientes artiacuteculos de la Guiacutea del

desarrollador de Microsoft NET Framework

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1129

ASPNET Configuration (Configuracioacuten de ASPNET)

httpmsdn2microsoftcomen-uslibraryaa719558(VS71)aspx

ASPNET Configuration Sections (Secciones de configuracioacuten de ASPNET)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscpguidehtmlcpgrfaspnetconfigurationsectionsasp

Para obtener informacioacuten acerca de las directrices de seguridad de ASPNET consulte la siguiente nota de producto

de MSDN

Authentication in ASPNET NET Security Guidance (Autenticacioacuten en ASPNET consejos sobre seguridad de NET)

httpmsdn2microsoftcomen-uslibraryms978378aspx

Para obtener maacutes informacioacuten general acerca de ASPNET visite el siguiente grupo de noticias de MSDN

httpwwwmicrosoftcomspanishmsdngruposnoticiasasp

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1229

En esta primera etapa solo considerareacute la creacioacuten del coacutedigo para accesar a una paacutegina donde seraacute necesario

utilizar un nombre de usuario y un password No hareacute ninguna modificacioacuten al WebConfig maacutes adelante lo

ocupareacute en otro ejemplo

Comencemoshelliphelliphellip

Vamos a crear la siguiente paacutegina Abriendo un proyecto nuevo para WebSite

Debe incluir dos etiquetas dos cajas de texto y un botoacuten Voy a crear una tabla que se llame usuarios que

cuente con dos campos usr y pwd los cuales seraacute de tipo nvarchar dentro de una Base de Datos que llamare

EST una vez que cree la Base de Datos la tabla los campos y agregue algunos registros voy a proceder a crear

un prodecimiento almacenado que seraacute capaz de poder identificar por mi si el usuario y el password son

correctos la manera es muy sencilla solo ldquocontemosrdquo mediante una consulta de S QL si existe un registros con

el usuario y el password que ingresamos si devuelve 1 el usuario podra entrar si no habra que indicarle que

algo escribio mal

El procedimiento almacenado se llama verifica y queda de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1329

Podemos probar el procedimiento almacenado que acabamos de crear dandole un click derecho sobre el y

seleccionando la opcioacuten Execute

Vamos a crear ahora el coacutedigo para el botoacuten para este paso vamos a utlizar SQLConnection y SQLCommand

ambos pertenecen a la coleccioacuten de nombres de SQLCLient para ellos es necesario agregarla en el encabezado

del programa de la siguiente manera

using SystemDataSqlClient

El coacutedigo del botoacuten quedariacutea de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1429

Oberven en el coacutedigo que utilizo dos WEBform maacutes si el valor que devuelve la consulta hecha a traeacutes del

proceimiento almacenado es 1 se iraacute a la paacutegina de Bienvenidaaspx en caso contrario le indicaraacute en

Erroraspx que se escribio incorrectamente el nombre usuario y contrasentildea para ello se debe agregar estod

dos WebForm maacutes

NOTA Para poder logar que se enmascare con (asteriscos) el t ipeo del

password es necesario que selecciones la caja de texto a utilizar y

posteriormente en propiedades en la opcioacuten TextMode elegir Password

Espero que les haya sido de mucha utilidad a todos un saludo

desde Meacutexico a todos los que han posteado sus comentarios

desde el resto de nuestro precioso paiacutes eso motiva mucho Un

fuerte abrazo a mis lectores de America Latina y Espantildea la

verdad sus comentarios alienta a seguir trabajando con maacutes

enfasis y a todos aquellos que han usado este medio para ponercosas ofensivas la verdad mejor busquen otro sitio no me

gustan esos comentarios ponganse a trabajar y utilicen mejor

el Espantildeol que es una lengua preciosa en lugar de escribir

puras tonterias aqui tratamos de compartir conocimiento

desarrollemos un planeta mejor

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1529

Un Stored Procedure o procedimiento almacenado es algo asi como una sentencia SQL que

se crea dentro de la base de datos Pero creo que si estaacuten leyendo esto es porque ya saben

lo que es un Stored Procedure y simplemente quieren saber como ejecutarlo desde una

paacutegina WEB

Los que no sepan que es un Stored Procedure les recomiendo buscar por otro lado

Bueno los Stored Procedure tienen un nombre y es lo que utilizaremos para llamarlos Esmuy simple y facil

Ejecucion de un Stored Procedure sin ningun paraacutemetro y sin RecordSet (poco usual

pero posible)

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Aqui llamamos al ST en este caso llamado procedimiento

oConnExecute EXEC procedimiento

oConnCloseSet oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Separar los paraacutemetros con coma ()

oConnExecute EXEC procedimiento param1 param2oConnClose

Set oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros recibiendo los datos en un Objeto

RecordSet

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexionSet RS = ServerCreateObject(ADODBRecordSet)

Separar los paraacutemetros con coma ()

RSOpen EXEC procedimiento param1 param2 oConn

Trabajamos con el RS

RSClose

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1629

Set RS = Nothing

oConnClose

Set oConn = Nothing

gt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1729

En este artiacuteculo paso a paso se usa el objeto DataReader para recuperar datos de un procedimiento almacenado de

Oracle Puede usar el objeto DataReader para recuperar una secuencia de datos de avance de soacutelo lectura de una

base de datos Al usar el objeto DataReader puede aumentar el rendimiento de la aplicacioacuten y reducir la carga del

sistema ya que soacutelo se guarda una fila en memoria

Volver al principio

Requisitos

En la lista siguiente se describe el hardware el software la infraestructura de red y los Service Pack recomendados

que se necesitaraacuten

Microsoft Windows 2000 Professional Windows 2000 Server Windows 2000 Advanced Server o

Windows NT 40 Server

Microsoft Visual Studio NET

En el presente artiacuteculo se da por supuesto que estaacute familiarizado con los temas siguientes

Visual C NET

Fundamentos y sintaxis de ADONET

Volver al principio

Crear las tablas de Oracle

En este ejemplo se usan tablas definidas en el esquema ScottTiger de Oracle El esquema ScottTiger de Oracle se

incluye con la instalacioacuten predeterminada de Oracle

Si este esquema no existe tiene que ejecutar la tabla siguiente e insertar secuencias de comandos para las tablas

CREATE TABLE DEPT

(DEPTNO NUMBER(20) NOT NULL

DNAME VARCHAR2(14) NULL

LOC VARCHAR2(13) NULL

PRIMARY KEY (DEPTNO)

)

INSERT INTO Dept VALUES(11SalesTexas)

INSERT INTO Dept VALUES(22AccountingWashington)

INSERT INTO Dept VALUES(33FinanceMaine)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1829

CREATE TABLE EMP

(EMPNO NUMBER(40) NOT NULL

ENAME VARCHAR2(10) NULL

JOB VARCHAR2(9) NULL

MGR NUMBER(40) NULL

SAL NUMBER(72) NULL

COMM NUMBER(72) NULL

DEPTNO NUMBER(20) NULL

FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)

PRIMARY KEY (EMPNO)

)

INSERT INTO Emp VALUES(123BobSales555350001211)

INSERT INTO Emp VALUES(321SueFinance555420001233)

INSERT INTO Emp VALUES(234MaryAccount555330001222)

Volver al principio

Crear los paquetes de Oracle

Cree el paquete de Oracle siguiente en el servidor Oracle

CREATE OR REPLACE PACKAGE curspkg_join AS

TYPE t_cursor IS REF CURSOR

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT

t_cursor)

END curspkg_join

Cree el siguiente cuerpo de paquete de Oracle en el servidor Oracle

CREATE OR REPLACE PACKAGE BODY curspkg_join AS

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT t_cursor)

IS

v_cursor t_cursor

BEGIN

IF n_EMPNO ltgt 0

THEN

OPEN v_cursor FOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1929

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = n_EMPNO

ELSE

OPEN v_cursor FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

io_cursor = v_cursor

END open_join_cursor1

END curspkg_join

Volver al principio

Crear la aplicacioacuten de Visual C NET

1 Cree un nuevo proyecto de aplicacioacuten para Windows de Visual C Se agregaraacute Form1 al proyecto de

manera predeterminada

2 Agregue el siguiente coacutedigo al principio de la ventana de coacutedigo

using SystemDataOleDb

3 Agregue el coacutedigo siguiente al evento Form_Load de Form1

4 OleDbConnection Oraclecon = newOleDbConnection(Provider=MSDAORA1Password=tiger

5 + User ID=scottData Source=OracleServerPersist Security

Info=True)

6 OracleconOpen()7 OleDbCommand myCMD = new OleDbCommand8 (call curspkg_joinopen_join_cursor1( resultset 0 io_cursor)

Oraclecon)

9 myCMDParametersAdd(ID OleDbTypeNumeric 4)Value = 0

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 5: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 529

14 if ( ( null == userName ) || ( 0 == userNameLength ) || (

userNameLength gt 15 ) )

15

16 SystemDiagnosticsTraceWriteLine( [ValidateUser]

Input validation of userName failed )

17 return false

18

19 20 Check for invalid passWord

21 passWord must not be null and must be between 1 and 25

characters

22 if ( ( null == passWord ) || ( 0 == passWordLength ) || (

passWordLength gt 25 ) )

23

24 SystemDiagnosticsTraceWriteLine( [ValidateUser]

Input validation of passWord failed )

25 return false

26

27 28 try

29

30 Consult with your SQL Server administrator for an

appropriate connection

31 string to use to connect to your local SQL Server

32 conn = new SqlConnection( server=localhostIntegrated

Security=SSPIdatabase=pubs )

33 connOpen()

34 35 Create SqlCommand to select pwd field from users

table given supplied userName36 cmd = new SqlCommand( Select pwd from users where

uname=userName conn )

37 cmdParametersAdd( userName SqlDbTypeVarChar 25

)

38 cmdParameters[userName]Value = userName

39

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 629

40 Execute command and fetch pwd field into

lookupPassword string

41 lookupPassword = (string) cmdExecuteScalar()

42 43 Cleanup command and connection objects

44 cmdDispose()

45 connDispose()

46

47 catch ( Exception ex )

48

49 Add error handling here for debugging

50 This error message should not be sent back to the

caller

51 SystemDiagnosticsTraceWriteLine( [ValidateUser]

Exception + exMessage )

52

53 54 If no password found return false

55 if ( null == lookupPassword )

56

57 You could write failed login attempts here to event

log for additional security

58 return false

59

60 61 Compare lookupPassword and input passWord using a case-

sensitive comparison

62 return ( 0 == stringCompare( lookupPassword passWord false )

)

63

64

65 Puede utilizar uno de dos meacutetodos posibles para generar la cookie de autenticacioacuten de formularios y

redirigir al usuario a una paacutegina apropiada en el evento cmdLogin_ServerClick Se proporciona el

coacutedigo de ejemplo para ambos escenarios Utilice cualquiera de ellos seguacuten sea necesario

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 729

o Llame al meacutetodo RedirectFromLoginPage para generar automaacuteticamente la cookie de

autenticacioacuten de formularios y redirigir al usuario a una paacutegina apropiada en el evento

cmdLogin_ServerClick

o private void cmdLogin_ServerClick(object sender

SystemEventArgs e)

o

o if (ValidateUser(txtUserNameValuetxtUserPassValue) )

o FormsAuthenticationRedirectFromLoginPage(txtUserNameValue

o chkPersistCookieChecked)

o else

o ResponseRedirect(logonaspx true)

o

o Genere el vale de autenticacioacuten ciacutefrelo cree una cookie agreacuteguela a la respuesta y redirija al

usuario Esto le ofrece maacutes control sobre coacutemo crear la cookie Tambieacuten puede incluir datos

personalizados junto con FormsAuthenticationTicket en este caso

o private void cmdLogin_ServerClick(object sender

SystemEventArgs e)

o

o if (ValidateUser(txtUserNameValuetxtUserPassValue) )

o

o FormsAuthenticationTicket tkt

o string cookiestr

o HttpCookie ck

o tkt = new FormsAuthenticationTicket(1 txtUserNameValue

DateTimeNow

o DateTimeNowAddMinutes(30) chkPersistCookieChecked your

custom data)

o cookiestr = FormsAuthenticationEncrypt(tkt)

o ck = new HttpCookie(FormsAuthenticationFormsCookieName

cookiestr)

o if (chkPersistCookieChecked)

o ckExpires=tktExpiration

o ckPath = FormsAuthenticationFormsCookiePath

o ResponseCookiesAdd(ck)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 829

o o string strRedirect

o strRedirect = Request[ReturnUrl]

o if (strRedirect==null)

o strRedirect = defaultaspx

o ResponseRedirect(strRedirect true)

o

o else

o ResponseRedirect(logonaspx true)

o

66 Aseguacuterese de que el coacutedigo siguiente se agrega al meacutetodo InitializeComponent en el coacutedigo

generado por el Disentildeador de Web Forms

67 thiscmdLoginServerClick += newSystemEventHandler(thiscmdLogin_ServerClick)

Volver al principio

Crear una paacutegina Defaultaspx

En esta seccioacuten se crea una paacutegina de prueba a la que se redirige a los usuarios despueacutes de autenticarse Si los

usuarios van a esta paacutegina sin iniciar sesioacuten primero en la aplicacioacuten se les redirige a la paacutegina de inicio de sesioacuten

1 Cambie el nombre de la paacutegina WebForm1aspx existente como Defaultaspx y aacutebrala en el editor

2 Cambie a la vista HTML y copie el coacutedigo siguiente entre las etiquetas ltformgt

3 ltinput type=submit Value=SignOut runat=server id=cmdSignOutgt

Este botoacuten se utiliza para cerrar la sesioacuten de autenticacioacuten de formularios

4 Cambie a la vista Disentildeo y guarde la paacutegina

5 Importe los espacios de nombres necesarios al archivo de coacutedigo subyacente

6 using SystemWebSecurity

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 929

7 Haga doble clic en SignOut para abrir la paacutegina de coacutedigo subyacente (Defaultaspxcs) y copie el

coacutedigo siguiente al controlador de eventos cmdSignOut_ServerClick

8 private void cmdSignOut_ServerClick(object sender SystemEventArgs e)9 10 FormsAuthenticationSignOut()

11 ResponseRedirect(logonaspx true)

12

13 Aseguacuterese de que el coacutedigo siguiente se agrega al meacutetodo InitializeComponent en el coacutedigo

generado por el Disentildeador de Web Forms

14 thiscmdSignOutServerClick += newSystemEventHandler(thiscmdSignOut_ServerClick)

15 Guarde y compile el proyecto Ahora puede utilizar la aplicacioacuten

Volver al principio

Notas adicionales

Quizaacutes desee almacenar las contrasentildeas de manera segura en una base de datos Puede emplear la

funcioacuten de utilidad de la clase FormsAuthentication denominada

HashPasswordForStoringInConfigFile para cifrar las contrasentildeas antes de almacenarlas en la base de

datos o en el archivo de configuracioacuten

Quizaacutes desee almacenar la informacioacuten de conexioacuten de SQL en el archivo de configuracioacuten (Webconfig)

de forma que pueda modificarla faacutecilmente si es necesario

Quizaacutes desee considerar la posibilidad de agregar coacutedigo para impedir el inicio de sesioacuten de los piratas

informaacuteticos que intentan utilizar diferentes combinaciones de contrasentildeas Por ejemplo puede incluir

loacutegica que soacutelo acepte dos o tres intentos de inicio de sesioacuten Si el usuario no puede iniciar sesioacuten en un

cierto nuacutemero de intentos quizaacutes desee establecer un indicador en la base de datos para no permitir

que ese usuario inicie sesioacuten hasta que no vuelva a habilitar su cuenta visitando una paacutegina diferente o

llamando a su liacutenea de soporte teacutecnico Ademaacutes debe agregar un control de errores apropiado donde

sea necesario

Puesto que el usuario se identifica seguacuten la cookie de autenticacioacuten quizaacutes desee utilizar Capa de

sockets seguros (SSL) en esta aplicacioacuten para que nadie pueda interceptar la cookie de autenticacioacuten y

cualquier otra informacioacuten valiosa que se transmita

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1029

La autenticacioacuten basada en formularios requiere que su cliente acepte o habilite las cookies en su

explorador

El paraacutemetro timeout de la seccioacuten de configuracioacuten ltauthenticationgt controla el intervalo en el que

se vuelve a generar la cookie de autenticacioacuten Puede elegir un valor que proporcione mejor

rendimiento y seguridad

Algunos servidores proxy y memorias cacheacute intermedios de Internet pueden almacenar en cacheacute

respuestas del servidor Web que contienen encabezados Set-Cookie que se devuelven a un usuario

diferente Puesto que la autenticacioacuten basada en formularios utiliza una cookie para autenticar a los

usuarios esto puede hacer que los usuarios suplanten accidentalmente (o intencionadamente) a otro

usuario recibiendo una cookie de un servidor proxy o una memoria cacheacute intermedios que no estaba

dirigida originalmente a ellos

Volver al principio

Referencias

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten simple basada en formularios que utiliza

la seccioacuten ltcredentialsgt para almacenar usuarios y contrasentildeas consulte el ejemplo del Tutorial raacutepido de ASPNET

GotDotNet siguiente

Forms-Based Authentication (Autenticacioacuten basada en formularios)

httpsamplesgotdotnetcomquickstartaspplusdefaultaspxurl=quickstartaspplusdocformsauthaspx

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten basada en formularios que utiliza un

archivo XML para almacenar usuarios y contrasentildeas consulte el tema siguiente en la documentacioacuten del Kit de

desarrollo de software (SDK) de NET Framework

Forms Authentication Using An XML Users File (Autenticacioacuten de formularios utilizando un archivo XML Users)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-

uscpguidehtmlcpconcookieauthenticationusinganxmlusersfileasp

Para obtener maacutes informacioacuten acerca de la seguridad de las aplicaciones Web ASPNET consulte la siguiente

documentacioacuten de la Guiacutea del desarrollador de Microsoft NET Framework

ASPNET Web Application Security (Seguridad de aplicaciones Web ASPNET)

httpmsdn2microsoftcomen-uslibrary330a99hc(vs71)aspx

Para obtener maacutes informacioacuten acerca del espacio de nombres SystemWebSecurity consulte la siguiente

documentacioacuten de referencia de Microsoft NET Framework

SystemWebSecurity Namespace (Espacio de nombres SystemWebSecurity)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscprefhtmlfrlrfSystemWebSecurityasp

Para obtener maacutes informacioacuten acerca de la configuracioacuten de ASPNET consulte los siguientes artiacuteculos de la Guiacutea del

desarrollador de Microsoft NET Framework

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1129

ASPNET Configuration (Configuracioacuten de ASPNET)

httpmsdn2microsoftcomen-uslibraryaa719558(VS71)aspx

ASPNET Configuration Sections (Secciones de configuracioacuten de ASPNET)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscpguidehtmlcpgrfaspnetconfigurationsectionsasp

Para obtener informacioacuten acerca de las directrices de seguridad de ASPNET consulte la siguiente nota de producto

de MSDN

Authentication in ASPNET NET Security Guidance (Autenticacioacuten en ASPNET consejos sobre seguridad de NET)

httpmsdn2microsoftcomen-uslibraryms978378aspx

Para obtener maacutes informacioacuten general acerca de ASPNET visite el siguiente grupo de noticias de MSDN

httpwwwmicrosoftcomspanishmsdngruposnoticiasasp

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1229

En esta primera etapa solo considerareacute la creacioacuten del coacutedigo para accesar a una paacutegina donde seraacute necesario

utilizar un nombre de usuario y un password No hareacute ninguna modificacioacuten al WebConfig maacutes adelante lo

ocupareacute en otro ejemplo

Comencemoshelliphelliphellip

Vamos a crear la siguiente paacutegina Abriendo un proyecto nuevo para WebSite

Debe incluir dos etiquetas dos cajas de texto y un botoacuten Voy a crear una tabla que se llame usuarios que

cuente con dos campos usr y pwd los cuales seraacute de tipo nvarchar dentro de una Base de Datos que llamare

EST una vez que cree la Base de Datos la tabla los campos y agregue algunos registros voy a proceder a crear

un prodecimiento almacenado que seraacute capaz de poder identificar por mi si el usuario y el password son

correctos la manera es muy sencilla solo ldquocontemosrdquo mediante una consulta de S QL si existe un registros con

el usuario y el password que ingresamos si devuelve 1 el usuario podra entrar si no habra que indicarle que

algo escribio mal

El procedimiento almacenado se llama verifica y queda de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1329

Podemos probar el procedimiento almacenado que acabamos de crear dandole un click derecho sobre el y

seleccionando la opcioacuten Execute

Vamos a crear ahora el coacutedigo para el botoacuten para este paso vamos a utlizar SQLConnection y SQLCommand

ambos pertenecen a la coleccioacuten de nombres de SQLCLient para ellos es necesario agregarla en el encabezado

del programa de la siguiente manera

using SystemDataSqlClient

El coacutedigo del botoacuten quedariacutea de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1429

Oberven en el coacutedigo que utilizo dos WEBform maacutes si el valor que devuelve la consulta hecha a traeacutes del

proceimiento almacenado es 1 se iraacute a la paacutegina de Bienvenidaaspx en caso contrario le indicaraacute en

Erroraspx que se escribio incorrectamente el nombre usuario y contrasentildea para ello se debe agregar estod

dos WebForm maacutes

NOTA Para poder logar que se enmascare con (asteriscos) el t ipeo del

password es necesario que selecciones la caja de texto a utilizar y

posteriormente en propiedades en la opcioacuten TextMode elegir Password

Espero que les haya sido de mucha utilidad a todos un saludo

desde Meacutexico a todos los que han posteado sus comentarios

desde el resto de nuestro precioso paiacutes eso motiva mucho Un

fuerte abrazo a mis lectores de America Latina y Espantildea la

verdad sus comentarios alienta a seguir trabajando con maacutes

enfasis y a todos aquellos que han usado este medio para ponercosas ofensivas la verdad mejor busquen otro sitio no me

gustan esos comentarios ponganse a trabajar y utilicen mejor

el Espantildeol que es una lengua preciosa en lugar de escribir

puras tonterias aqui tratamos de compartir conocimiento

desarrollemos un planeta mejor

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1529

Un Stored Procedure o procedimiento almacenado es algo asi como una sentencia SQL que

se crea dentro de la base de datos Pero creo que si estaacuten leyendo esto es porque ya saben

lo que es un Stored Procedure y simplemente quieren saber como ejecutarlo desde una

paacutegina WEB

Los que no sepan que es un Stored Procedure les recomiendo buscar por otro lado

Bueno los Stored Procedure tienen un nombre y es lo que utilizaremos para llamarlos Esmuy simple y facil

Ejecucion de un Stored Procedure sin ningun paraacutemetro y sin RecordSet (poco usual

pero posible)

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Aqui llamamos al ST en este caso llamado procedimiento

oConnExecute EXEC procedimiento

oConnCloseSet oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Separar los paraacutemetros con coma ()

oConnExecute EXEC procedimiento param1 param2oConnClose

Set oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros recibiendo los datos en un Objeto

RecordSet

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexionSet RS = ServerCreateObject(ADODBRecordSet)

Separar los paraacutemetros con coma ()

RSOpen EXEC procedimiento param1 param2 oConn

Trabajamos con el RS

RSClose

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1629

Set RS = Nothing

oConnClose

Set oConn = Nothing

gt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1729

En este artiacuteculo paso a paso se usa el objeto DataReader para recuperar datos de un procedimiento almacenado de

Oracle Puede usar el objeto DataReader para recuperar una secuencia de datos de avance de soacutelo lectura de una

base de datos Al usar el objeto DataReader puede aumentar el rendimiento de la aplicacioacuten y reducir la carga del

sistema ya que soacutelo se guarda una fila en memoria

Volver al principio

Requisitos

En la lista siguiente se describe el hardware el software la infraestructura de red y los Service Pack recomendados

que se necesitaraacuten

Microsoft Windows 2000 Professional Windows 2000 Server Windows 2000 Advanced Server o

Windows NT 40 Server

Microsoft Visual Studio NET

En el presente artiacuteculo se da por supuesto que estaacute familiarizado con los temas siguientes

Visual C NET

Fundamentos y sintaxis de ADONET

Volver al principio

Crear las tablas de Oracle

En este ejemplo se usan tablas definidas en el esquema ScottTiger de Oracle El esquema ScottTiger de Oracle se

incluye con la instalacioacuten predeterminada de Oracle

Si este esquema no existe tiene que ejecutar la tabla siguiente e insertar secuencias de comandos para las tablas

CREATE TABLE DEPT

(DEPTNO NUMBER(20) NOT NULL

DNAME VARCHAR2(14) NULL

LOC VARCHAR2(13) NULL

PRIMARY KEY (DEPTNO)

)

INSERT INTO Dept VALUES(11SalesTexas)

INSERT INTO Dept VALUES(22AccountingWashington)

INSERT INTO Dept VALUES(33FinanceMaine)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1829

CREATE TABLE EMP

(EMPNO NUMBER(40) NOT NULL

ENAME VARCHAR2(10) NULL

JOB VARCHAR2(9) NULL

MGR NUMBER(40) NULL

SAL NUMBER(72) NULL

COMM NUMBER(72) NULL

DEPTNO NUMBER(20) NULL

FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)

PRIMARY KEY (EMPNO)

)

INSERT INTO Emp VALUES(123BobSales555350001211)

INSERT INTO Emp VALUES(321SueFinance555420001233)

INSERT INTO Emp VALUES(234MaryAccount555330001222)

Volver al principio

Crear los paquetes de Oracle

Cree el paquete de Oracle siguiente en el servidor Oracle

CREATE OR REPLACE PACKAGE curspkg_join AS

TYPE t_cursor IS REF CURSOR

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT

t_cursor)

END curspkg_join

Cree el siguiente cuerpo de paquete de Oracle en el servidor Oracle

CREATE OR REPLACE PACKAGE BODY curspkg_join AS

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT t_cursor)

IS

v_cursor t_cursor

BEGIN

IF n_EMPNO ltgt 0

THEN

OPEN v_cursor FOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1929

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = n_EMPNO

ELSE

OPEN v_cursor FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

io_cursor = v_cursor

END open_join_cursor1

END curspkg_join

Volver al principio

Crear la aplicacioacuten de Visual C NET

1 Cree un nuevo proyecto de aplicacioacuten para Windows de Visual C Se agregaraacute Form1 al proyecto de

manera predeterminada

2 Agregue el siguiente coacutedigo al principio de la ventana de coacutedigo

using SystemDataOleDb

3 Agregue el coacutedigo siguiente al evento Form_Load de Form1

4 OleDbConnection Oraclecon = newOleDbConnection(Provider=MSDAORA1Password=tiger

5 + User ID=scottData Source=OracleServerPersist Security

Info=True)

6 OracleconOpen()7 OleDbCommand myCMD = new OleDbCommand8 (call curspkg_joinopen_join_cursor1( resultset 0 io_cursor)

Oraclecon)

9 myCMDParametersAdd(ID OleDbTypeNumeric 4)Value = 0

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 6: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 629

40 Execute command and fetch pwd field into

lookupPassword string

41 lookupPassword = (string) cmdExecuteScalar()

42 43 Cleanup command and connection objects

44 cmdDispose()

45 connDispose()

46

47 catch ( Exception ex )

48

49 Add error handling here for debugging

50 This error message should not be sent back to the

caller

51 SystemDiagnosticsTraceWriteLine( [ValidateUser]

Exception + exMessage )

52

53 54 If no password found return false

55 if ( null == lookupPassword )

56

57 You could write failed login attempts here to event

log for additional security

58 return false

59

60 61 Compare lookupPassword and input passWord using a case-

sensitive comparison

62 return ( 0 == stringCompare( lookupPassword passWord false )

)

63

64

65 Puede utilizar uno de dos meacutetodos posibles para generar la cookie de autenticacioacuten de formularios y

redirigir al usuario a una paacutegina apropiada en el evento cmdLogin_ServerClick Se proporciona el

coacutedigo de ejemplo para ambos escenarios Utilice cualquiera de ellos seguacuten sea necesario

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 729

o Llame al meacutetodo RedirectFromLoginPage para generar automaacuteticamente la cookie de

autenticacioacuten de formularios y redirigir al usuario a una paacutegina apropiada en el evento

cmdLogin_ServerClick

o private void cmdLogin_ServerClick(object sender

SystemEventArgs e)

o

o if (ValidateUser(txtUserNameValuetxtUserPassValue) )

o FormsAuthenticationRedirectFromLoginPage(txtUserNameValue

o chkPersistCookieChecked)

o else

o ResponseRedirect(logonaspx true)

o

o Genere el vale de autenticacioacuten ciacutefrelo cree una cookie agreacuteguela a la respuesta y redirija al

usuario Esto le ofrece maacutes control sobre coacutemo crear la cookie Tambieacuten puede incluir datos

personalizados junto con FormsAuthenticationTicket en este caso

o private void cmdLogin_ServerClick(object sender

SystemEventArgs e)

o

o if (ValidateUser(txtUserNameValuetxtUserPassValue) )

o

o FormsAuthenticationTicket tkt

o string cookiestr

o HttpCookie ck

o tkt = new FormsAuthenticationTicket(1 txtUserNameValue

DateTimeNow

o DateTimeNowAddMinutes(30) chkPersistCookieChecked your

custom data)

o cookiestr = FormsAuthenticationEncrypt(tkt)

o ck = new HttpCookie(FormsAuthenticationFormsCookieName

cookiestr)

o if (chkPersistCookieChecked)

o ckExpires=tktExpiration

o ckPath = FormsAuthenticationFormsCookiePath

o ResponseCookiesAdd(ck)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 829

o o string strRedirect

o strRedirect = Request[ReturnUrl]

o if (strRedirect==null)

o strRedirect = defaultaspx

o ResponseRedirect(strRedirect true)

o

o else

o ResponseRedirect(logonaspx true)

o

66 Aseguacuterese de que el coacutedigo siguiente se agrega al meacutetodo InitializeComponent en el coacutedigo

generado por el Disentildeador de Web Forms

67 thiscmdLoginServerClick += newSystemEventHandler(thiscmdLogin_ServerClick)

Volver al principio

Crear una paacutegina Defaultaspx

En esta seccioacuten se crea una paacutegina de prueba a la que se redirige a los usuarios despueacutes de autenticarse Si los

usuarios van a esta paacutegina sin iniciar sesioacuten primero en la aplicacioacuten se les redirige a la paacutegina de inicio de sesioacuten

1 Cambie el nombre de la paacutegina WebForm1aspx existente como Defaultaspx y aacutebrala en el editor

2 Cambie a la vista HTML y copie el coacutedigo siguiente entre las etiquetas ltformgt

3 ltinput type=submit Value=SignOut runat=server id=cmdSignOutgt

Este botoacuten se utiliza para cerrar la sesioacuten de autenticacioacuten de formularios

4 Cambie a la vista Disentildeo y guarde la paacutegina

5 Importe los espacios de nombres necesarios al archivo de coacutedigo subyacente

6 using SystemWebSecurity

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 929

7 Haga doble clic en SignOut para abrir la paacutegina de coacutedigo subyacente (Defaultaspxcs) y copie el

coacutedigo siguiente al controlador de eventos cmdSignOut_ServerClick

8 private void cmdSignOut_ServerClick(object sender SystemEventArgs e)9 10 FormsAuthenticationSignOut()

11 ResponseRedirect(logonaspx true)

12

13 Aseguacuterese de que el coacutedigo siguiente se agrega al meacutetodo InitializeComponent en el coacutedigo

generado por el Disentildeador de Web Forms

14 thiscmdSignOutServerClick += newSystemEventHandler(thiscmdSignOut_ServerClick)

15 Guarde y compile el proyecto Ahora puede utilizar la aplicacioacuten

Volver al principio

Notas adicionales

Quizaacutes desee almacenar las contrasentildeas de manera segura en una base de datos Puede emplear la

funcioacuten de utilidad de la clase FormsAuthentication denominada

HashPasswordForStoringInConfigFile para cifrar las contrasentildeas antes de almacenarlas en la base de

datos o en el archivo de configuracioacuten

Quizaacutes desee almacenar la informacioacuten de conexioacuten de SQL en el archivo de configuracioacuten (Webconfig)

de forma que pueda modificarla faacutecilmente si es necesario

Quizaacutes desee considerar la posibilidad de agregar coacutedigo para impedir el inicio de sesioacuten de los piratas

informaacuteticos que intentan utilizar diferentes combinaciones de contrasentildeas Por ejemplo puede incluir

loacutegica que soacutelo acepte dos o tres intentos de inicio de sesioacuten Si el usuario no puede iniciar sesioacuten en un

cierto nuacutemero de intentos quizaacutes desee establecer un indicador en la base de datos para no permitir

que ese usuario inicie sesioacuten hasta que no vuelva a habilitar su cuenta visitando una paacutegina diferente o

llamando a su liacutenea de soporte teacutecnico Ademaacutes debe agregar un control de errores apropiado donde

sea necesario

Puesto que el usuario se identifica seguacuten la cookie de autenticacioacuten quizaacutes desee utilizar Capa de

sockets seguros (SSL) en esta aplicacioacuten para que nadie pueda interceptar la cookie de autenticacioacuten y

cualquier otra informacioacuten valiosa que se transmita

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1029

La autenticacioacuten basada en formularios requiere que su cliente acepte o habilite las cookies en su

explorador

El paraacutemetro timeout de la seccioacuten de configuracioacuten ltauthenticationgt controla el intervalo en el que

se vuelve a generar la cookie de autenticacioacuten Puede elegir un valor que proporcione mejor

rendimiento y seguridad

Algunos servidores proxy y memorias cacheacute intermedios de Internet pueden almacenar en cacheacute

respuestas del servidor Web que contienen encabezados Set-Cookie que se devuelven a un usuario

diferente Puesto que la autenticacioacuten basada en formularios utiliza una cookie para autenticar a los

usuarios esto puede hacer que los usuarios suplanten accidentalmente (o intencionadamente) a otro

usuario recibiendo una cookie de un servidor proxy o una memoria cacheacute intermedios que no estaba

dirigida originalmente a ellos

Volver al principio

Referencias

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten simple basada en formularios que utiliza

la seccioacuten ltcredentialsgt para almacenar usuarios y contrasentildeas consulte el ejemplo del Tutorial raacutepido de ASPNET

GotDotNet siguiente

Forms-Based Authentication (Autenticacioacuten basada en formularios)

httpsamplesgotdotnetcomquickstartaspplusdefaultaspxurl=quickstartaspplusdocformsauthaspx

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten basada en formularios que utiliza un

archivo XML para almacenar usuarios y contrasentildeas consulte el tema siguiente en la documentacioacuten del Kit de

desarrollo de software (SDK) de NET Framework

Forms Authentication Using An XML Users File (Autenticacioacuten de formularios utilizando un archivo XML Users)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-

uscpguidehtmlcpconcookieauthenticationusinganxmlusersfileasp

Para obtener maacutes informacioacuten acerca de la seguridad de las aplicaciones Web ASPNET consulte la siguiente

documentacioacuten de la Guiacutea del desarrollador de Microsoft NET Framework

ASPNET Web Application Security (Seguridad de aplicaciones Web ASPNET)

httpmsdn2microsoftcomen-uslibrary330a99hc(vs71)aspx

Para obtener maacutes informacioacuten acerca del espacio de nombres SystemWebSecurity consulte la siguiente

documentacioacuten de referencia de Microsoft NET Framework

SystemWebSecurity Namespace (Espacio de nombres SystemWebSecurity)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscprefhtmlfrlrfSystemWebSecurityasp

Para obtener maacutes informacioacuten acerca de la configuracioacuten de ASPNET consulte los siguientes artiacuteculos de la Guiacutea del

desarrollador de Microsoft NET Framework

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1129

ASPNET Configuration (Configuracioacuten de ASPNET)

httpmsdn2microsoftcomen-uslibraryaa719558(VS71)aspx

ASPNET Configuration Sections (Secciones de configuracioacuten de ASPNET)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscpguidehtmlcpgrfaspnetconfigurationsectionsasp

Para obtener informacioacuten acerca de las directrices de seguridad de ASPNET consulte la siguiente nota de producto

de MSDN

Authentication in ASPNET NET Security Guidance (Autenticacioacuten en ASPNET consejos sobre seguridad de NET)

httpmsdn2microsoftcomen-uslibraryms978378aspx

Para obtener maacutes informacioacuten general acerca de ASPNET visite el siguiente grupo de noticias de MSDN

httpwwwmicrosoftcomspanishmsdngruposnoticiasasp

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1229

En esta primera etapa solo considerareacute la creacioacuten del coacutedigo para accesar a una paacutegina donde seraacute necesario

utilizar un nombre de usuario y un password No hareacute ninguna modificacioacuten al WebConfig maacutes adelante lo

ocupareacute en otro ejemplo

Comencemoshelliphelliphellip

Vamos a crear la siguiente paacutegina Abriendo un proyecto nuevo para WebSite

Debe incluir dos etiquetas dos cajas de texto y un botoacuten Voy a crear una tabla que se llame usuarios que

cuente con dos campos usr y pwd los cuales seraacute de tipo nvarchar dentro de una Base de Datos que llamare

EST una vez que cree la Base de Datos la tabla los campos y agregue algunos registros voy a proceder a crear

un prodecimiento almacenado que seraacute capaz de poder identificar por mi si el usuario y el password son

correctos la manera es muy sencilla solo ldquocontemosrdquo mediante una consulta de S QL si existe un registros con

el usuario y el password que ingresamos si devuelve 1 el usuario podra entrar si no habra que indicarle que

algo escribio mal

El procedimiento almacenado se llama verifica y queda de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1329

Podemos probar el procedimiento almacenado que acabamos de crear dandole un click derecho sobre el y

seleccionando la opcioacuten Execute

Vamos a crear ahora el coacutedigo para el botoacuten para este paso vamos a utlizar SQLConnection y SQLCommand

ambos pertenecen a la coleccioacuten de nombres de SQLCLient para ellos es necesario agregarla en el encabezado

del programa de la siguiente manera

using SystemDataSqlClient

El coacutedigo del botoacuten quedariacutea de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1429

Oberven en el coacutedigo que utilizo dos WEBform maacutes si el valor que devuelve la consulta hecha a traeacutes del

proceimiento almacenado es 1 se iraacute a la paacutegina de Bienvenidaaspx en caso contrario le indicaraacute en

Erroraspx que se escribio incorrectamente el nombre usuario y contrasentildea para ello se debe agregar estod

dos WebForm maacutes

NOTA Para poder logar que se enmascare con (asteriscos) el t ipeo del

password es necesario que selecciones la caja de texto a utilizar y

posteriormente en propiedades en la opcioacuten TextMode elegir Password

Espero que les haya sido de mucha utilidad a todos un saludo

desde Meacutexico a todos los que han posteado sus comentarios

desde el resto de nuestro precioso paiacutes eso motiva mucho Un

fuerte abrazo a mis lectores de America Latina y Espantildea la

verdad sus comentarios alienta a seguir trabajando con maacutes

enfasis y a todos aquellos que han usado este medio para ponercosas ofensivas la verdad mejor busquen otro sitio no me

gustan esos comentarios ponganse a trabajar y utilicen mejor

el Espantildeol que es una lengua preciosa en lugar de escribir

puras tonterias aqui tratamos de compartir conocimiento

desarrollemos un planeta mejor

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1529

Un Stored Procedure o procedimiento almacenado es algo asi como una sentencia SQL que

se crea dentro de la base de datos Pero creo que si estaacuten leyendo esto es porque ya saben

lo que es un Stored Procedure y simplemente quieren saber como ejecutarlo desde una

paacutegina WEB

Los que no sepan que es un Stored Procedure les recomiendo buscar por otro lado

Bueno los Stored Procedure tienen un nombre y es lo que utilizaremos para llamarlos Esmuy simple y facil

Ejecucion de un Stored Procedure sin ningun paraacutemetro y sin RecordSet (poco usual

pero posible)

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Aqui llamamos al ST en este caso llamado procedimiento

oConnExecute EXEC procedimiento

oConnCloseSet oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Separar los paraacutemetros con coma ()

oConnExecute EXEC procedimiento param1 param2oConnClose

Set oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros recibiendo los datos en un Objeto

RecordSet

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexionSet RS = ServerCreateObject(ADODBRecordSet)

Separar los paraacutemetros con coma ()

RSOpen EXEC procedimiento param1 param2 oConn

Trabajamos con el RS

RSClose

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1629

Set RS = Nothing

oConnClose

Set oConn = Nothing

gt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1729

En este artiacuteculo paso a paso se usa el objeto DataReader para recuperar datos de un procedimiento almacenado de

Oracle Puede usar el objeto DataReader para recuperar una secuencia de datos de avance de soacutelo lectura de una

base de datos Al usar el objeto DataReader puede aumentar el rendimiento de la aplicacioacuten y reducir la carga del

sistema ya que soacutelo se guarda una fila en memoria

Volver al principio

Requisitos

En la lista siguiente se describe el hardware el software la infraestructura de red y los Service Pack recomendados

que se necesitaraacuten

Microsoft Windows 2000 Professional Windows 2000 Server Windows 2000 Advanced Server o

Windows NT 40 Server

Microsoft Visual Studio NET

En el presente artiacuteculo se da por supuesto que estaacute familiarizado con los temas siguientes

Visual C NET

Fundamentos y sintaxis de ADONET

Volver al principio

Crear las tablas de Oracle

En este ejemplo se usan tablas definidas en el esquema ScottTiger de Oracle El esquema ScottTiger de Oracle se

incluye con la instalacioacuten predeterminada de Oracle

Si este esquema no existe tiene que ejecutar la tabla siguiente e insertar secuencias de comandos para las tablas

CREATE TABLE DEPT

(DEPTNO NUMBER(20) NOT NULL

DNAME VARCHAR2(14) NULL

LOC VARCHAR2(13) NULL

PRIMARY KEY (DEPTNO)

)

INSERT INTO Dept VALUES(11SalesTexas)

INSERT INTO Dept VALUES(22AccountingWashington)

INSERT INTO Dept VALUES(33FinanceMaine)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1829

CREATE TABLE EMP

(EMPNO NUMBER(40) NOT NULL

ENAME VARCHAR2(10) NULL

JOB VARCHAR2(9) NULL

MGR NUMBER(40) NULL

SAL NUMBER(72) NULL

COMM NUMBER(72) NULL

DEPTNO NUMBER(20) NULL

FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)

PRIMARY KEY (EMPNO)

)

INSERT INTO Emp VALUES(123BobSales555350001211)

INSERT INTO Emp VALUES(321SueFinance555420001233)

INSERT INTO Emp VALUES(234MaryAccount555330001222)

Volver al principio

Crear los paquetes de Oracle

Cree el paquete de Oracle siguiente en el servidor Oracle

CREATE OR REPLACE PACKAGE curspkg_join AS

TYPE t_cursor IS REF CURSOR

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT

t_cursor)

END curspkg_join

Cree el siguiente cuerpo de paquete de Oracle en el servidor Oracle

CREATE OR REPLACE PACKAGE BODY curspkg_join AS

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT t_cursor)

IS

v_cursor t_cursor

BEGIN

IF n_EMPNO ltgt 0

THEN

OPEN v_cursor FOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1929

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = n_EMPNO

ELSE

OPEN v_cursor FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

io_cursor = v_cursor

END open_join_cursor1

END curspkg_join

Volver al principio

Crear la aplicacioacuten de Visual C NET

1 Cree un nuevo proyecto de aplicacioacuten para Windows de Visual C Se agregaraacute Form1 al proyecto de

manera predeterminada

2 Agregue el siguiente coacutedigo al principio de la ventana de coacutedigo

using SystemDataOleDb

3 Agregue el coacutedigo siguiente al evento Form_Load de Form1

4 OleDbConnection Oraclecon = newOleDbConnection(Provider=MSDAORA1Password=tiger

5 + User ID=scottData Source=OracleServerPersist Security

Info=True)

6 OracleconOpen()7 OleDbCommand myCMD = new OleDbCommand8 (call curspkg_joinopen_join_cursor1( resultset 0 io_cursor)

Oraclecon)

9 myCMDParametersAdd(ID OleDbTypeNumeric 4)Value = 0

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 7: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 729

o Llame al meacutetodo RedirectFromLoginPage para generar automaacuteticamente la cookie de

autenticacioacuten de formularios y redirigir al usuario a una paacutegina apropiada en el evento

cmdLogin_ServerClick

o private void cmdLogin_ServerClick(object sender

SystemEventArgs e)

o

o if (ValidateUser(txtUserNameValuetxtUserPassValue) )

o FormsAuthenticationRedirectFromLoginPage(txtUserNameValue

o chkPersistCookieChecked)

o else

o ResponseRedirect(logonaspx true)

o

o Genere el vale de autenticacioacuten ciacutefrelo cree una cookie agreacuteguela a la respuesta y redirija al

usuario Esto le ofrece maacutes control sobre coacutemo crear la cookie Tambieacuten puede incluir datos

personalizados junto con FormsAuthenticationTicket en este caso

o private void cmdLogin_ServerClick(object sender

SystemEventArgs e)

o

o if (ValidateUser(txtUserNameValuetxtUserPassValue) )

o

o FormsAuthenticationTicket tkt

o string cookiestr

o HttpCookie ck

o tkt = new FormsAuthenticationTicket(1 txtUserNameValue

DateTimeNow

o DateTimeNowAddMinutes(30) chkPersistCookieChecked your

custom data)

o cookiestr = FormsAuthenticationEncrypt(tkt)

o ck = new HttpCookie(FormsAuthenticationFormsCookieName

cookiestr)

o if (chkPersistCookieChecked)

o ckExpires=tktExpiration

o ckPath = FormsAuthenticationFormsCookiePath

o ResponseCookiesAdd(ck)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 829

o o string strRedirect

o strRedirect = Request[ReturnUrl]

o if (strRedirect==null)

o strRedirect = defaultaspx

o ResponseRedirect(strRedirect true)

o

o else

o ResponseRedirect(logonaspx true)

o

66 Aseguacuterese de que el coacutedigo siguiente se agrega al meacutetodo InitializeComponent en el coacutedigo

generado por el Disentildeador de Web Forms

67 thiscmdLoginServerClick += newSystemEventHandler(thiscmdLogin_ServerClick)

Volver al principio

Crear una paacutegina Defaultaspx

En esta seccioacuten se crea una paacutegina de prueba a la que se redirige a los usuarios despueacutes de autenticarse Si los

usuarios van a esta paacutegina sin iniciar sesioacuten primero en la aplicacioacuten se les redirige a la paacutegina de inicio de sesioacuten

1 Cambie el nombre de la paacutegina WebForm1aspx existente como Defaultaspx y aacutebrala en el editor

2 Cambie a la vista HTML y copie el coacutedigo siguiente entre las etiquetas ltformgt

3 ltinput type=submit Value=SignOut runat=server id=cmdSignOutgt

Este botoacuten se utiliza para cerrar la sesioacuten de autenticacioacuten de formularios

4 Cambie a la vista Disentildeo y guarde la paacutegina

5 Importe los espacios de nombres necesarios al archivo de coacutedigo subyacente

6 using SystemWebSecurity

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 929

7 Haga doble clic en SignOut para abrir la paacutegina de coacutedigo subyacente (Defaultaspxcs) y copie el

coacutedigo siguiente al controlador de eventos cmdSignOut_ServerClick

8 private void cmdSignOut_ServerClick(object sender SystemEventArgs e)9 10 FormsAuthenticationSignOut()

11 ResponseRedirect(logonaspx true)

12

13 Aseguacuterese de que el coacutedigo siguiente se agrega al meacutetodo InitializeComponent en el coacutedigo

generado por el Disentildeador de Web Forms

14 thiscmdSignOutServerClick += newSystemEventHandler(thiscmdSignOut_ServerClick)

15 Guarde y compile el proyecto Ahora puede utilizar la aplicacioacuten

Volver al principio

Notas adicionales

Quizaacutes desee almacenar las contrasentildeas de manera segura en una base de datos Puede emplear la

funcioacuten de utilidad de la clase FormsAuthentication denominada

HashPasswordForStoringInConfigFile para cifrar las contrasentildeas antes de almacenarlas en la base de

datos o en el archivo de configuracioacuten

Quizaacutes desee almacenar la informacioacuten de conexioacuten de SQL en el archivo de configuracioacuten (Webconfig)

de forma que pueda modificarla faacutecilmente si es necesario

Quizaacutes desee considerar la posibilidad de agregar coacutedigo para impedir el inicio de sesioacuten de los piratas

informaacuteticos que intentan utilizar diferentes combinaciones de contrasentildeas Por ejemplo puede incluir

loacutegica que soacutelo acepte dos o tres intentos de inicio de sesioacuten Si el usuario no puede iniciar sesioacuten en un

cierto nuacutemero de intentos quizaacutes desee establecer un indicador en la base de datos para no permitir

que ese usuario inicie sesioacuten hasta que no vuelva a habilitar su cuenta visitando una paacutegina diferente o

llamando a su liacutenea de soporte teacutecnico Ademaacutes debe agregar un control de errores apropiado donde

sea necesario

Puesto que el usuario se identifica seguacuten la cookie de autenticacioacuten quizaacutes desee utilizar Capa de

sockets seguros (SSL) en esta aplicacioacuten para que nadie pueda interceptar la cookie de autenticacioacuten y

cualquier otra informacioacuten valiosa que se transmita

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1029

La autenticacioacuten basada en formularios requiere que su cliente acepte o habilite las cookies en su

explorador

El paraacutemetro timeout de la seccioacuten de configuracioacuten ltauthenticationgt controla el intervalo en el que

se vuelve a generar la cookie de autenticacioacuten Puede elegir un valor que proporcione mejor

rendimiento y seguridad

Algunos servidores proxy y memorias cacheacute intermedios de Internet pueden almacenar en cacheacute

respuestas del servidor Web que contienen encabezados Set-Cookie que se devuelven a un usuario

diferente Puesto que la autenticacioacuten basada en formularios utiliza una cookie para autenticar a los

usuarios esto puede hacer que los usuarios suplanten accidentalmente (o intencionadamente) a otro

usuario recibiendo una cookie de un servidor proxy o una memoria cacheacute intermedios que no estaba

dirigida originalmente a ellos

Volver al principio

Referencias

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten simple basada en formularios que utiliza

la seccioacuten ltcredentialsgt para almacenar usuarios y contrasentildeas consulte el ejemplo del Tutorial raacutepido de ASPNET

GotDotNet siguiente

Forms-Based Authentication (Autenticacioacuten basada en formularios)

httpsamplesgotdotnetcomquickstartaspplusdefaultaspxurl=quickstartaspplusdocformsauthaspx

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten basada en formularios que utiliza un

archivo XML para almacenar usuarios y contrasentildeas consulte el tema siguiente en la documentacioacuten del Kit de

desarrollo de software (SDK) de NET Framework

Forms Authentication Using An XML Users File (Autenticacioacuten de formularios utilizando un archivo XML Users)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-

uscpguidehtmlcpconcookieauthenticationusinganxmlusersfileasp

Para obtener maacutes informacioacuten acerca de la seguridad de las aplicaciones Web ASPNET consulte la siguiente

documentacioacuten de la Guiacutea del desarrollador de Microsoft NET Framework

ASPNET Web Application Security (Seguridad de aplicaciones Web ASPNET)

httpmsdn2microsoftcomen-uslibrary330a99hc(vs71)aspx

Para obtener maacutes informacioacuten acerca del espacio de nombres SystemWebSecurity consulte la siguiente

documentacioacuten de referencia de Microsoft NET Framework

SystemWebSecurity Namespace (Espacio de nombres SystemWebSecurity)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscprefhtmlfrlrfSystemWebSecurityasp

Para obtener maacutes informacioacuten acerca de la configuracioacuten de ASPNET consulte los siguientes artiacuteculos de la Guiacutea del

desarrollador de Microsoft NET Framework

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1129

ASPNET Configuration (Configuracioacuten de ASPNET)

httpmsdn2microsoftcomen-uslibraryaa719558(VS71)aspx

ASPNET Configuration Sections (Secciones de configuracioacuten de ASPNET)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscpguidehtmlcpgrfaspnetconfigurationsectionsasp

Para obtener informacioacuten acerca de las directrices de seguridad de ASPNET consulte la siguiente nota de producto

de MSDN

Authentication in ASPNET NET Security Guidance (Autenticacioacuten en ASPNET consejos sobre seguridad de NET)

httpmsdn2microsoftcomen-uslibraryms978378aspx

Para obtener maacutes informacioacuten general acerca de ASPNET visite el siguiente grupo de noticias de MSDN

httpwwwmicrosoftcomspanishmsdngruposnoticiasasp

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1229

En esta primera etapa solo considerareacute la creacioacuten del coacutedigo para accesar a una paacutegina donde seraacute necesario

utilizar un nombre de usuario y un password No hareacute ninguna modificacioacuten al WebConfig maacutes adelante lo

ocupareacute en otro ejemplo

Comencemoshelliphelliphellip

Vamos a crear la siguiente paacutegina Abriendo un proyecto nuevo para WebSite

Debe incluir dos etiquetas dos cajas de texto y un botoacuten Voy a crear una tabla que se llame usuarios que

cuente con dos campos usr y pwd los cuales seraacute de tipo nvarchar dentro de una Base de Datos que llamare

EST una vez que cree la Base de Datos la tabla los campos y agregue algunos registros voy a proceder a crear

un prodecimiento almacenado que seraacute capaz de poder identificar por mi si el usuario y el password son

correctos la manera es muy sencilla solo ldquocontemosrdquo mediante una consulta de S QL si existe un registros con

el usuario y el password que ingresamos si devuelve 1 el usuario podra entrar si no habra que indicarle que

algo escribio mal

El procedimiento almacenado se llama verifica y queda de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1329

Podemos probar el procedimiento almacenado que acabamos de crear dandole un click derecho sobre el y

seleccionando la opcioacuten Execute

Vamos a crear ahora el coacutedigo para el botoacuten para este paso vamos a utlizar SQLConnection y SQLCommand

ambos pertenecen a la coleccioacuten de nombres de SQLCLient para ellos es necesario agregarla en el encabezado

del programa de la siguiente manera

using SystemDataSqlClient

El coacutedigo del botoacuten quedariacutea de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1429

Oberven en el coacutedigo que utilizo dos WEBform maacutes si el valor que devuelve la consulta hecha a traeacutes del

proceimiento almacenado es 1 se iraacute a la paacutegina de Bienvenidaaspx en caso contrario le indicaraacute en

Erroraspx que se escribio incorrectamente el nombre usuario y contrasentildea para ello se debe agregar estod

dos WebForm maacutes

NOTA Para poder logar que se enmascare con (asteriscos) el t ipeo del

password es necesario que selecciones la caja de texto a utilizar y

posteriormente en propiedades en la opcioacuten TextMode elegir Password

Espero que les haya sido de mucha utilidad a todos un saludo

desde Meacutexico a todos los que han posteado sus comentarios

desde el resto de nuestro precioso paiacutes eso motiva mucho Un

fuerte abrazo a mis lectores de America Latina y Espantildea la

verdad sus comentarios alienta a seguir trabajando con maacutes

enfasis y a todos aquellos que han usado este medio para ponercosas ofensivas la verdad mejor busquen otro sitio no me

gustan esos comentarios ponganse a trabajar y utilicen mejor

el Espantildeol que es una lengua preciosa en lugar de escribir

puras tonterias aqui tratamos de compartir conocimiento

desarrollemos un planeta mejor

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1529

Un Stored Procedure o procedimiento almacenado es algo asi como una sentencia SQL que

se crea dentro de la base de datos Pero creo que si estaacuten leyendo esto es porque ya saben

lo que es un Stored Procedure y simplemente quieren saber como ejecutarlo desde una

paacutegina WEB

Los que no sepan que es un Stored Procedure les recomiendo buscar por otro lado

Bueno los Stored Procedure tienen un nombre y es lo que utilizaremos para llamarlos Esmuy simple y facil

Ejecucion de un Stored Procedure sin ningun paraacutemetro y sin RecordSet (poco usual

pero posible)

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Aqui llamamos al ST en este caso llamado procedimiento

oConnExecute EXEC procedimiento

oConnCloseSet oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Separar los paraacutemetros con coma ()

oConnExecute EXEC procedimiento param1 param2oConnClose

Set oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros recibiendo los datos en un Objeto

RecordSet

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexionSet RS = ServerCreateObject(ADODBRecordSet)

Separar los paraacutemetros con coma ()

RSOpen EXEC procedimiento param1 param2 oConn

Trabajamos con el RS

RSClose

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1629

Set RS = Nothing

oConnClose

Set oConn = Nothing

gt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1729

En este artiacuteculo paso a paso se usa el objeto DataReader para recuperar datos de un procedimiento almacenado de

Oracle Puede usar el objeto DataReader para recuperar una secuencia de datos de avance de soacutelo lectura de una

base de datos Al usar el objeto DataReader puede aumentar el rendimiento de la aplicacioacuten y reducir la carga del

sistema ya que soacutelo se guarda una fila en memoria

Volver al principio

Requisitos

En la lista siguiente se describe el hardware el software la infraestructura de red y los Service Pack recomendados

que se necesitaraacuten

Microsoft Windows 2000 Professional Windows 2000 Server Windows 2000 Advanced Server o

Windows NT 40 Server

Microsoft Visual Studio NET

En el presente artiacuteculo se da por supuesto que estaacute familiarizado con los temas siguientes

Visual C NET

Fundamentos y sintaxis de ADONET

Volver al principio

Crear las tablas de Oracle

En este ejemplo se usan tablas definidas en el esquema ScottTiger de Oracle El esquema ScottTiger de Oracle se

incluye con la instalacioacuten predeterminada de Oracle

Si este esquema no existe tiene que ejecutar la tabla siguiente e insertar secuencias de comandos para las tablas

CREATE TABLE DEPT

(DEPTNO NUMBER(20) NOT NULL

DNAME VARCHAR2(14) NULL

LOC VARCHAR2(13) NULL

PRIMARY KEY (DEPTNO)

)

INSERT INTO Dept VALUES(11SalesTexas)

INSERT INTO Dept VALUES(22AccountingWashington)

INSERT INTO Dept VALUES(33FinanceMaine)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1829

CREATE TABLE EMP

(EMPNO NUMBER(40) NOT NULL

ENAME VARCHAR2(10) NULL

JOB VARCHAR2(9) NULL

MGR NUMBER(40) NULL

SAL NUMBER(72) NULL

COMM NUMBER(72) NULL

DEPTNO NUMBER(20) NULL

FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)

PRIMARY KEY (EMPNO)

)

INSERT INTO Emp VALUES(123BobSales555350001211)

INSERT INTO Emp VALUES(321SueFinance555420001233)

INSERT INTO Emp VALUES(234MaryAccount555330001222)

Volver al principio

Crear los paquetes de Oracle

Cree el paquete de Oracle siguiente en el servidor Oracle

CREATE OR REPLACE PACKAGE curspkg_join AS

TYPE t_cursor IS REF CURSOR

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT

t_cursor)

END curspkg_join

Cree el siguiente cuerpo de paquete de Oracle en el servidor Oracle

CREATE OR REPLACE PACKAGE BODY curspkg_join AS

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT t_cursor)

IS

v_cursor t_cursor

BEGIN

IF n_EMPNO ltgt 0

THEN

OPEN v_cursor FOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1929

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = n_EMPNO

ELSE

OPEN v_cursor FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

io_cursor = v_cursor

END open_join_cursor1

END curspkg_join

Volver al principio

Crear la aplicacioacuten de Visual C NET

1 Cree un nuevo proyecto de aplicacioacuten para Windows de Visual C Se agregaraacute Form1 al proyecto de

manera predeterminada

2 Agregue el siguiente coacutedigo al principio de la ventana de coacutedigo

using SystemDataOleDb

3 Agregue el coacutedigo siguiente al evento Form_Load de Form1

4 OleDbConnection Oraclecon = newOleDbConnection(Provider=MSDAORA1Password=tiger

5 + User ID=scottData Source=OracleServerPersist Security

Info=True)

6 OracleconOpen()7 OleDbCommand myCMD = new OleDbCommand8 (call curspkg_joinopen_join_cursor1( resultset 0 io_cursor)

Oraclecon)

9 myCMDParametersAdd(ID OleDbTypeNumeric 4)Value = 0

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 8: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 829

o o string strRedirect

o strRedirect = Request[ReturnUrl]

o if (strRedirect==null)

o strRedirect = defaultaspx

o ResponseRedirect(strRedirect true)

o

o else

o ResponseRedirect(logonaspx true)

o

66 Aseguacuterese de que el coacutedigo siguiente se agrega al meacutetodo InitializeComponent en el coacutedigo

generado por el Disentildeador de Web Forms

67 thiscmdLoginServerClick += newSystemEventHandler(thiscmdLogin_ServerClick)

Volver al principio

Crear una paacutegina Defaultaspx

En esta seccioacuten se crea una paacutegina de prueba a la que se redirige a los usuarios despueacutes de autenticarse Si los

usuarios van a esta paacutegina sin iniciar sesioacuten primero en la aplicacioacuten se les redirige a la paacutegina de inicio de sesioacuten

1 Cambie el nombre de la paacutegina WebForm1aspx existente como Defaultaspx y aacutebrala en el editor

2 Cambie a la vista HTML y copie el coacutedigo siguiente entre las etiquetas ltformgt

3 ltinput type=submit Value=SignOut runat=server id=cmdSignOutgt

Este botoacuten se utiliza para cerrar la sesioacuten de autenticacioacuten de formularios

4 Cambie a la vista Disentildeo y guarde la paacutegina

5 Importe los espacios de nombres necesarios al archivo de coacutedigo subyacente

6 using SystemWebSecurity

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 929

7 Haga doble clic en SignOut para abrir la paacutegina de coacutedigo subyacente (Defaultaspxcs) y copie el

coacutedigo siguiente al controlador de eventos cmdSignOut_ServerClick

8 private void cmdSignOut_ServerClick(object sender SystemEventArgs e)9 10 FormsAuthenticationSignOut()

11 ResponseRedirect(logonaspx true)

12

13 Aseguacuterese de que el coacutedigo siguiente se agrega al meacutetodo InitializeComponent en el coacutedigo

generado por el Disentildeador de Web Forms

14 thiscmdSignOutServerClick += newSystemEventHandler(thiscmdSignOut_ServerClick)

15 Guarde y compile el proyecto Ahora puede utilizar la aplicacioacuten

Volver al principio

Notas adicionales

Quizaacutes desee almacenar las contrasentildeas de manera segura en una base de datos Puede emplear la

funcioacuten de utilidad de la clase FormsAuthentication denominada

HashPasswordForStoringInConfigFile para cifrar las contrasentildeas antes de almacenarlas en la base de

datos o en el archivo de configuracioacuten

Quizaacutes desee almacenar la informacioacuten de conexioacuten de SQL en el archivo de configuracioacuten (Webconfig)

de forma que pueda modificarla faacutecilmente si es necesario

Quizaacutes desee considerar la posibilidad de agregar coacutedigo para impedir el inicio de sesioacuten de los piratas

informaacuteticos que intentan utilizar diferentes combinaciones de contrasentildeas Por ejemplo puede incluir

loacutegica que soacutelo acepte dos o tres intentos de inicio de sesioacuten Si el usuario no puede iniciar sesioacuten en un

cierto nuacutemero de intentos quizaacutes desee establecer un indicador en la base de datos para no permitir

que ese usuario inicie sesioacuten hasta que no vuelva a habilitar su cuenta visitando una paacutegina diferente o

llamando a su liacutenea de soporte teacutecnico Ademaacutes debe agregar un control de errores apropiado donde

sea necesario

Puesto que el usuario se identifica seguacuten la cookie de autenticacioacuten quizaacutes desee utilizar Capa de

sockets seguros (SSL) en esta aplicacioacuten para que nadie pueda interceptar la cookie de autenticacioacuten y

cualquier otra informacioacuten valiosa que se transmita

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1029

La autenticacioacuten basada en formularios requiere que su cliente acepte o habilite las cookies en su

explorador

El paraacutemetro timeout de la seccioacuten de configuracioacuten ltauthenticationgt controla el intervalo en el que

se vuelve a generar la cookie de autenticacioacuten Puede elegir un valor que proporcione mejor

rendimiento y seguridad

Algunos servidores proxy y memorias cacheacute intermedios de Internet pueden almacenar en cacheacute

respuestas del servidor Web que contienen encabezados Set-Cookie que se devuelven a un usuario

diferente Puesto que la autenticacioacuten basada en formularios utiliza una cookie para autenticar a los

usuarios esto puede hacer que los usuarios suplanten accidentalmente (o intencionadamente) a otro

usuario recibiendo una cookie de un servidor proxy o una memoria cacheacute intermedios que no estaba

dirigida originalmente a ellos

Volver al principio

Referencias

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten simple basada en formularios que utiliza

la seccioacuten ltcredentialsgt para almacenar usuarios y contrasentildeas consulte el ejemplo del Tutorial raacutepido de ASPNET

GotDotNet siguiente

Forms-Based Authentication (Autenticacioacuten basada en formularios)

httpsamplesgotdotnetcomquickstartaspplusdefaultaspxurl=quickstartaspplusdocformsauthaspx

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten basada en formularios que utiliza un

archivo XML para almacenar usuarios y contrasentildeas consulte el tema siguiente en la documentacioacuten del Kit de

desarrollo de software (SDK) de NET Framework

Forms Authentication Using An XML Users File (Autenticacioacuten de formularios utilizando un archivo XML Users)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-

uscpguidehtmlcpconcookieauthenticationusinganxmlusersfileasp

Para obtener maacutes informacioacuten acerca de la seguridad de las aplicaciones Web ASPNET consulte la siguiente

documentacioacuten de la Guiacutea del desarrollador de Microsoft NET Framework

ASPNET Web Application Security (Seguridad de aplicaciones Web ASPNET)

httpmsdn2microsoftcomen-uslibrary330a99hc(vs71)aspx

Para obtener maacutes informacioacuten acerca del espacio de nombres SystemWebSecurity consulte la siguiente

documentacioacuten de referencia de Microsoft NET Framework

SystemWebSecurity Namespace (Espacio de nombres SystemWebSecurity)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscprefhtmlfrlrfSystemWebSecurityasp

Para obtener maacutes informacioacuten acerca de la configuracioacuten de ASPNET consulte los siguientes artiacuteculos de la Guiacutea del

desarrollador de Microsoft NET Framework

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1129

ASPNET Configuration (Configuracioacuten de ASPNET)

httpmsdn2microsoftcomen-uslibraryaa719558(VS71)aspx

ASPNET Configuration Sections (Secciones de configuracioacuten de ASPNET)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscpguidehtmlcpgrfaspnetconfigurationsectionsasp

Para obtener informacioacuten acerca de las directrices de seguridad de ASPNET consulte la siguiente nota de producto

de MSDN

Authentication in ASPNET NET Security Guidance (Autenticacioacuten en ASPNET consejos sobre seguridad de NET)

httpmsdn2microsoftcomen-uslibraryms978378aspx

Para obtener maacutes informacioacuten general acerca de ASPNET visite el siguiente grupo de noticias de MSDN

httpwwwmicrosoftcomspanishmsdngruposnoticiasasp

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1229

En esta primera etapa solo considerareacute la creacioacuten del coacutedigo para accesar a una paacutegina donde seraacute necesario

utilizar un nombre de usuario y un password No hareacute ninguna modificacioacuten al WebConfig maacutes adelante lo

ocupareacute en otro ejemplo

Comencemoshelliphelliphellip

Vamos a crear la siguiente paacutegina Abriendo un proyecto nuevo para WebSite

Debe incluir dos etiquetas dos cajas de texto y un botoacuten Voy a crear una tabla que se llame usuarios que

cuente con dos campos usr y pwd los cuales seraacute de tipo nvarchar dentro de una Base de Datos que llamare

EST una vez que cree la Base de Datos la tabla los campos y agregue algunos registros voy a proceder a crear

un prodecimiento almacenado que seraacute capaz de poder identificar por mi si el usuario y el password son

correctos la manera es muy sencilla solo ldquocontemosrdquo mediante una consulta de S QL si existe un registros con

el usuario y el password que ingresamos si devuelve 1 el usuario podra entrar si no habra que indicarle que

algo escribio mal

El procedimiento almacenado se llama verifica y queda de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1329

Podemos probar el procedimiento almacenado que acabamos de crear dandole un click derecho sobre el y

seleccionando la opcioacuten Execute

Vamos a crear ahora el coacutedigo para el botoacuten para este paso vamos a utlizar SQLConnection y SQLCommand

ambos pertenecen a la coleccioacuten de nombres de SQLCLient para ellos es necesario agregarla en el encabezado

del programa de la siguiente manera

using SystemDataSqlClient

El coacutedigo del botoacuten quedariacutea de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1429

Oberven en el coacutedigo que utilizo dos WEBform maacutes si el valor que devuelve la consulta hecha a traeacutes del

proceimiento almacenado es 1 se iraacute a la paacutegina de Bienvenidaaspx en caso contrario le indicaraacute en

Erroraspx que se escribio incorrectamente el nombre usuario y contrasentildea para ello se debe agregar estod

dos WebForm maacutes

NOTA Para poder logar que se enmascare con (asteriscos) el t ipeo del

password es necesario que selecciones la caja de texto a utilizar y

posteriormente en propiedades en la opcioacuten TextMode elegir Password

Espero que les haya sido de mucha utilidad a todos un saludo

desde Meacutexico a todos los que han posteado sus comentarios

desde el resto de nuestro precioso paiacutes eso motiva mucho Un

fuerte abrazo a mis lectores de America Latina y Espantildea la

verdad sus comentarios alienta a seguir trabajando con maacutes

enfasis y a todos aquellos que han usado este medio para ponercosas ofensivas la verdad mejor busquen otro sitio no me

gustan esos comentarios ponganse a trabajar y utilicen mejor

el Espantildeol que es una lengua preciosa en lugar de escribir

puras tonterias aqui tratamos de compartir conocimiento

desarrollemos un planeta mejor

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1529

Un Stored Procedure o procedimiento almacenado es algo asi como una sentencia SQL que

se crea dentro de la base de datos Pero creo que si estaacuten leyendo esto es porque ya saben

lo que es un Stored Procedure y simplemente quieren saber como ejecutarlo desde una

paacutegina WEB

Los que no sepan que es un Stored Procedure les recomiendo buscar por otro lado

Bueno los Stored Procedure tienen un nombre y es lo que utilizaremos para llamarlos Esmuy simple y facil

Ejecucion de un Stored Procedure sin ningun paraacutemetro y sin RecordSet (poco usual

pero posible)

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Aqui llamamos al ST en este caso llamado procedimiento

oConnExecute EXEC procedimiento

oConnCloseSet oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Separar los paraacutemetros con coma ()

oConnExecute EXEC procedimiento param1 param2oConnClose

Set oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros recibiendo los datos en un Objeto

RecordSet

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexionSet RS = ServerCreateObject(ADODBRecordSet)

Separar los paraacutemetros con coma ()

RSOpen EXEC procedimiento param1 param2 oConn

Trabajamos con el RS

RSClose

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1629

Set RS = Nothing

oConnClose

Set oConn = Nothing

gt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1729

En este artiacuteculo paso a paso se usa el objeto DataReader para recuperar datos de un procedimiento almacenado de

Oracle Puede usar el objeto DataReader para recuperar una secuencia de datos de avance de soacutelo lectura de una

base de datos Al usar el objeto DataReader puede aumentar el rendimiento de la aplicacioacuten y reducir la carga del

sistema ya que soacutelo se guarda una fila en memoria

Volver al principio

Requisitos

En la lista siguiente se describe el hardware el software la infraestructura de red y los Service Pack recomendados

que se necesitaraacuten

Microsoft Windows 2000 Professional Windows 2000 Server Windows 2000 Advanced Server o

Windows NT 40 Server

Microsoft Visual Studio NET

En el presente artiacuteculo se da por supuesto que estaacute familiarizado con los temas siguientes

Visual C NET

Fundamentos y sintaxis de ADONET

Volver al principio

Crear las tablas de Oracle

En este ejemplo se usan tablas definidas en el esquema ScottTiger de Oracle El esquema ScottTiger de Oracle se

incluye con la instalacioacuten predeterminada de Oracle

Si este esquema no existe tiene que ejecutar la tabla siguiente e insertar secuencias de comandos para las tablas

CREATE TABLE DEPT

(DEPTNO NUMBER(20) NOT NULL

DNAME VARCHAR2(14) NULL

LOC VARCHAR2(13) NULL

PRIMARY KEY (DEPTNO)

)

INSERT INTO Dept VALUES(11SalesTexas)

INSERT INTO Dept VALUES(22AccountingWashington)

INSERT INTO Dept VALUES(33FinanceMaine)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1829

CREATE TABLE EMP

(EMPNO NUMBER(40) NOT NULL

ENAME VARCHAR2(10) NULL

JOB VARCHAR2(9) NULL

MGR NUMBER(40) NULL

SAL NUMBER(72) NULL

COMM NUMBER(72) NULL

DEPTNO NUMBER(20) NULL

FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)

PRIMARY KEY (EMPNO)

)

INSERT INTO Emp VALUES(123BobSales555350001211)

INSERT INTO Emp VALUES(321SueFinance555420001233)

INSERT INTO Emp VALUES(234MaryAccount555330001222)

Volver al principio

Crear los paquetes de Oracle

Cree el paquete de Oracle siguiente en el servidor Oracle

CREATE OR REPLACE PACKAGE curspkg_join AS

TYPE t_cursor IS REF CURSOR

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT

t_cursor)

END curspkg_join

Cree el siguiente cuerpo de paquete de Oracle en el servidor Oracle

CREATE OR REPLACE PACKAGE BODY curspkg_join AS

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT t_cursor)

IS

v_cursor t_cursor

BEGIN

IF n_EMPNO ltgt 0

THEN

OPEN v_cursor FOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1929

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = n_EMPNO

ELSE

OPEN v_cursor FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

io_cursor = v_cursor

END open_join_cursor1

END curspkg_join

Volver al principio

Crear la aplicacioacuten de Visual C NET

1 Cree un nuevo proyecto de aplicacioacuten para Windows de Visual C Se agregaraacute Form1 al proyecto de

manera predeterminada

2 Agregue el siguiente coacutedigo al principio de la ventana de coacutedigo

using SystemDataOleDb

3 Agregue el coacutedigo siguiente al evento Form_Load de Form1

4 OleDbConnection Oraclecon = newOleDbConnection(Provider=MSDAORA1Password=tiger

5 + User ID=scottData Source=OracleServerPersist Security

Info=True)

6 OracleconOpen()7 OleDbCommand myCMD = new OleDbCommand8 (call curspkg_joinopen_join_cursor1( resultset 0 io_cursor)

Oraclecon)

9 myCMDParametersAdd(ID OleDbTypeNumeric 4)Value = 0

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 9: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 929

7 Haga doble clic en SignOut para abrir la paacutegina de coacutedigo subyacente (Defaultaspxcs) y copie el

coacutedigo siguiente al controlador de eventos cmdSignOut_ServerClick

8 private void cmdSignOut_ServerClick(object sender SystemEventArgs e)9 10 FormsAuthenticationSignOut()

11 ResponseRedirect(logonaspx true)

12

13 Aseguacuterese de que el coacutedigo siguiente se agrega al meacutetodo InitializeComponent en el coacutedigo

generado por el Disentildeador de Web Forms

14 thiscmdSignOutServerClick += newSystemEventHandler(thiscmdSignOut_ServerClick)

15 Guarde y compile el proyecto Ahora puede utilizar la aplicacioacuten

Volver al principio

Notas adicionales

Quizaacutes desee almacenar las contrasentildeas de manera segura en una base de datos Puede emplear la

funcioacuten de utilidad de la clase FormsAuthentication denominada

HashPasswordForStoringInConfigFile para cifrar las contrasentildeas antes de almacenarlas en la base de

datos o en el archivo de configuracioacuten

Quizaacutes desee almacenar la informacioacuten de conexioacuten de SQL en el archivo de configuracioacuten (Webconfig)

de forma que pueda modificarla faacutecilmente si es necesario

Quizaacutes desee considerar la posibilidad de agregar coacutedigo para impedir el inicio de sesioacuten de los piratas

informaacuteticos que intentan utilizar diferentes combinaciones de contrasentildeas Por ejemplo puede incluir

loacutegica que soacutelo acepte dos o tres intentos de inicio de sesioacuten Si el usuario no puede iniciar sesioacuten en un

cierto nuacutemero de intentos quizaacutes desee establecer un indicador en la base de datos para no permitir

que ese usuario inicie sesioacuten hasta que no vuelva a habilitar su cuenta visitando una paacutegina diferente o

llamando a su liacutenea de soporte teacutecnico Ademaacutes debe agregar un control de errores apropiado donde

sea necesario

Puesto que el usuario se identifica seguacuten la cookie de autenticacioacuten quizaacutes desee utilizar Capa de

sockets seguros (SSL) en esta aplicacioacuten para que nadie pueda interceptar la cookie de autenticacioacuten y

cualquier otra informacioacuten valiosa que se transmita

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1029

La autenticacioacuten basada en formularios requiere que su cliente acepte o habilite las cookies en su

explorador

El paraacutemetro timeout de la seccioacuten de configuracioacuten ltauthenticationgt controla el intervalo en el que

se vuelve a generar la cookie de autenticacioacuten Puede elegir un valor que proporcione mejor

rendimiento y seguridad

Algunos servidores proxy y memorias cacheacute intermedios de Internet pueden almacenar en cacheacute

respuestas del servidor Web que contienen encabezados Set-Cookie que se devuelven a un usuario

diferente Puesto que la autenticacioacuten basada en formularios utiliza una cookie para autenticar a los

usuarios esto puede hacer que los usuarios suplanten accidentalmente (o intencionadamente) a otro

usuario recibiendo una cookie de un servidor proxy o una memoria cacheacute intermedios que no estaba

dirigida originalmente a ellos

Volver al principio

Referencias

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten simple basada en formularios que utiliza

la seccioacuten ltcredentialsgt para almacenar usuarios y contrasentildeas consulte el ejemplo del Tutorial raacutepido de ASPNET

GotDotNet siguiente

Forms-Based Authentication (Autenticacioacuten basada en formularios)

httpsamplesgotdotnetcomquickstartaspplusdefaultaspxurl=quickstartaspplusdocformsauthaspx

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten basada en formularios que utiliza un

archivo XML para almacenar usuarios y contrasentildeas consulte el tema siguiente en la documentacioacuten del Kit de

desarrollo de software (SDK) de NET Framework

Forms Authentication Using An XML Users File (Autenticacioacuten de formularios utilizando un archivo XML Users)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-

uscpguidehtmlcpconcookieauthenticationusinganxmlusersfileasp

Para obtener maacutes informacioacuten acerca de la seguridad de las aplicaciones Web ASPNET consulte la siguiente

documentacioacuten de la Guiacutea del desarrollador de Microsoft NET Framework

ASPNET Web Application Security (Seguridad de aplicaciones Web ASPNET)

httpmsdn2microsoftcomen-uslibrary330a99hc(vs71)aspx

Para obtener maacutes informacioacuten acerca del espacio de nombres SystemWebSecurity consulte la siguiente

documentacioacuten de referencia de Microsoft NET Framework

SystemWebSecurity Namespace (Espacio de nombres SystemWebSecurity)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscprefhtmlfrlrfSystemWebSecurityasp

Para obtener maacutes informacioacuten acerca de la configuracioacuten de ASPNET consulte los siguientes artiacuteculos de la Guiacutea del

desarrollador de Microsoft NET Framework

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1129

ASPNET Configuration (Configuracioacuten de ASPNET)

httpmsdn2microsoftcomen-uslibraryaa719558(VS71)aspx

ASPNET Configuration Sections (Secciones de configuracioacuten de ASPNET)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscpguidehtmlcpgrfaspnetconfigurationsectionsasp

Para obtener informacioacuten acerca de las directrices de seguridad de ASPNET consulte la siguiente nota de producto

de MSDN

Authentication in ASPNET NET Security Guidance (Autenticacioacuten en ASPNET consejos sobre seguridad de NET)

httpmsdn2microsoftcomen-uslibraryms978378aspx

Para obtener maacutes informacioacuten general acerca de ASPNET visite el siguiente grupo de noticias de MSDN

httpwwwmicrosoftcomspanishmsdngruposnoticiasasp

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1229

En esta primera etapa solo considerareacute la creacioacuten del coacutedigo para accesar a una paacutegina donde seraacute necesario

utilizar un nombre de usuario y un password No hareacute ninguna modificacioacuten al WebConfig maacutes adelante lo

ocupareacute en otro ejemplo

Comencemoshelliphelliphellip

Vamos a crear la siguiente paacutegina Abriendo un proyecto nuevo para WebSite

Debe incluir dos etiquetas dos cajas de texto y un botoacuten Voy a crear una tabla que se llame usuarios que

cuente con dos campos usr y pwd los cuales seraacute de tipo nvarchar dentro de una Base de Datos que llamare

EST una vez que cree la Base de Datos la tabla los campos y agregue algunos registros voy a proceder a crear

un prodecimiento almacenado que seraacute capaz de poder identificar por mi si el usuario y el password son

correctos la manera es muy sencilla solo ldquocontemosrdquo mediante una consulta de S QL si existe un registros con

el usuario y el password que ingresamos si devuelve 1 el usuario podra entrar si no habra que indicarle que

algo escribio mal

El procedimiento almacenado se llama verifica y queda de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1329

Podemos probar el procedimiento almacenado que acabamos de crear dandole un click derecho sobre el y

seleccionando la opcioacuten Execute

Vamos a crear ahora el coacutedigo para el botoacuten para este paso vamos a utlizar SQLConnection y SQLCommand

ambos pertenecen a la coleccioacuten de nombres de SQLCLient para ellos es necesario agregarla en el encabezado

del programa de la siguiente manera

using SystemDataSqlClient

El coacutedigo del botoacuten quedariacutea de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1429

Oberven en el coacutedigo que utilizo dos WEBform maacutes si el valor que devuelve la consulta hecha a traeacutes del

proceimiento almacenado es 1 se iraacute a la paacutegina de Bienvenidaaspx en caso contrario le indicaraacute en

Erroraspx que se escribio incorrectamente el nombre usuario y contrasentildea para ello se debe agregar estod

dos WebForm maacutes

NOTA Para poder logar que se enmascare con (asteriscos) el t ipeo del

password es necesario que selecciones la caja de texto a utilizar y

posteriormente en propiedades en la opcioacuten TextMode elegir Password

Espero que les haya sido de mucha utilidad a todos un saludo

desde Meacutexico a todos los que han posteado sus comentarios

desde el resto de nuestro precioso paiacutes eso motiva mucho Un

fuerte abrazo a mis lectores de America Latina y Espantildea la

verdad sus comentarios alienta a seguir trabajando con maacutes

enfasis y a todos aquellos que han usado este medio para ponercosas ofensivas la verdad mejor busquen otro sitio no me

gustan esos comentarios ponganse a trabajar y utilicen mejor

el Espantildeol que es una lengua preciosa en lugar de escribir

puras tonterias aqui tratamos de compartir conocimiento

desarrollemos un planeta mejor

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1529

Un Stored Procedure o procedimiento almacenado es algo asi como una sentencia SQL que

se crea dentro de la base de datos Pero creo que si estaacuten leyendo esto es porque ya saben

lo que es un Stored Procedure y simplemente quieren saber como ejecutarlo desde una

paacutegina WEB

Los que no sepan que es un Stored Procedure les recomiendo buscar por otro lado

Bueno los Stored Procedure tienen un nombre y es lo que utilizaremos para llamarlos Esmuy simple y facil

Ejecucion de un Stored Procedure sin ningun paraacutemetro y sin RecordSet (poco usual

pero posible)

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Aqui llamamos al ST en este caso llamado procedimiento

oConnExecute EXEC procedimiento

oConnCloseSet oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Separar los paraacutemetros con coma ()

oConnExecute EXEC procedimiento param1 param2oConnClose

Set oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros recibiendo los datos en un Objeto

RecordSet

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexionSet RS = ServerCreateObject(ADODBRecordSet)

Separar los paraacutemetros con coma ()

RSOpen EXEC procedimiento param1 param2 oConn

Trabajamos con el RS

RSClose

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1629

Set RS = Nothing

oConnClose

Set oConn = Nothing

gt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1729

En este artiacuteculo paso a paso se usa el objeto DataReader para recuperar datos de un procedimiento almacenado de

Oracle Puede usar el objeto DataReader para recuperar una secuencia de datos de avance de soacutelo lectura de una

base de datos Al usar el objeto DataReader puede aumentar el rendimiento de la aplicacioacuten y reducir la carga del

sistema ya que soacutelo se guarda una fila en memoria

Volver al principio

Requisitos

En la lista siguiente se describe el hardware el software la infraestructura de red y los Service Pack recomendados

que se necesitaraacuten

Microsoft Windows 2000 Professional Windows 2000 Server Windows 2000 Advanced Server o

Windows NT 40 Server

Microsoft Visual Studio NET

En el presente artiacuteculo se da por supuesto que estaacute familiarizado con los temas siguientes

Visual C NET

Fundamentos y sintaxis de ADONET

Volver al principio

Crear las tablas de Oracle

En este ejemplo se usan tablas definidas en el esquema ScottTiger de Oracle El esquema ScottTiger de Oracle se

incluye con la instalacioacuten predeterminada de Oracle

Si este esquema no existe tiene que ejecutar la tabla siguiente e insertar secuencias de comandos para las tablas

CREATE TABLE DEPT

(DEPTNO NUMBER(20) NOT NULL

DNAME VARCHAR2(14) NULL

LOC VARCHAR2(13) NULL

PRIMARY KEY (DEPTNO)

)

INSERT INTO Dept VALUES(11SalesTexas)

INSERT INTO Dept VALUES(22AccountingWashington)

INSERT INTO Dept VALUES(33FinanceMaine)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1829

CREATE TABLE EMP

(EMPNO NUMBER(40) NOT NULL

ENAME VARCHAR2(10) NULL

JOB VARCHAR2(9) NULL

MGR NUMBER(40) NULL

SAL NUMBER(72) NULL

COMM NUMBER(72) NULL

DEPTNO NUMBER(20) NULL

FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)

PRIMARY KEY (EMPNO)

)

INSERT INTO Emp VALUES(123BobSales555350001211)

INSERT INTO Emp VALUES(321SueFinance555420001233)

INSERT INTO Emp VALUES(234MaryAccount555330001222)

Volver al principio

Crear los paquetes de Oracle

Cree el paquete de Oracle siguiente en el servidor Oracle

CREATE OR REPLACE PACKAGE curspkg_join AS

TYPE t_cursor IS REF CURSOR

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT

t_cursor)

END curspkg_join

Cree el siguiente cuerpo de paquete de Oracle en el servidor Oracle

CREATE OR REPLACE PACKAGE BODY curspkg_join AS

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT t_cursor)

IS

v_cursor t_cursor

BEGIN

IF n_EMPNO ltgt 0

THEN

OPEN v_cursor FOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1929

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = n_EMPNO

ELSE

OPEN v_cursor FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

io_cursor = v_cursor

END open_join_cursor1

END curspkg_join

Volver al principio

Crear la aplicacioacuten de Visual C NET

1 Cree un nuevo proyecto de aplicacioacuten para Windows de Visual C Se agregaraacute Form1 al proyecto de

manera predeterminada

2 Agregue el siguiente coacutedigo al principio de la ventana de coacutedigo

using SystemDataOleDb

3 Agregue el coacutedigo siguiente al evento Form_Load de Form1

4 OleDbConnection Oraclecon = newOleDbConnection(Provider=MSDAORA1Password=tiger

5 + User ID=scottData Source=OracleServerPersist Security

Info=True)

6 OracleconOpen()7 OleDbCommand myCMD = new OleDbCommand8 (call curspkg_joinopen_join_cursor1( resultset 0 io_cursor)

Oraclecon)

9 myCMDParametersAdd(ID OleDbTypeNumeric 4)Value = 0

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 10: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1029

La autenticacioacuten basada en formularios requiere que su cliente acepte o habilite las cookies en su

explorador

El paraacutemetro timeout de la seccioacuten de configuracioacuten ltauthenticationgt controla el intervalo en el que

se vuelve a generar la cookie de autenticacioacuten Puede elegir un valor que proporcione mejor

rendimiento y seguridad

Algunos servidores proxy y memorias cacheacute intermedios de Internet pueden almacenar en cacheacute

respuestas del servidor Web que contienen encabezados Set-Cookie que se devuelven a un usuario

diferente Puesto que la autenticacioacuten basada en formularios utiliza una cookie para autenticar a los

usuarios esto puede hacer que los usuarios suplanten accidentalmente (o intencionadamente) a otro

usuario recibiendo una cookie de un servidor proxy o una memoria cacheacute intermedios que no estaba

dirigida originalmente a ellos

Volver al principio

Referencias

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten simple basada en formularios que utiliza

la seccioacuten ltcredentialsgt para almacenar usuarios y contrasentildeas consulte el ejemplo del Tutorial raacutepido de ASPNET

GotDotNet siguiente

Forms-Based Authentication (Autenticacioacuten basada en formularios)

httpsamplesgotdotnetcomquickstartaspplusdefaultaspxurl=quickstartaspplusdocformsauthaspx

Para obtener maacutes informacioacuten acerca de coacutemo implementar la autenticacioacuten basada en formularios que utiliza un

archivo XML para almacenar usuarios y contrasentildeas consulte el tema siguiente en la documentacioacuten del Kit de

desarrollo de software (SDK) de NET Framework

Forms Authentication Using An XML Users File (Autenticacioacuten de formularios utilizando un archivo XML Users)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-

uscpguidehtmlcpconcookieauthenticationusinganxmlusersfileasp

Para obtener maacutes informacioacuten acerca de la seguridad de las aplicaciones Web ASPNET consulte la siguiente

documentacioacuten de la Guiacutea del desarrollador de Microsoft NET Framework

ASPNET Web Application Security (Seguridad de aplicaciones Web ASPNET)

httpmsdn2microsoftcomen-uslibrary330a99hc(vs71)aspx

Para obtener maacutes informacioacuten acerca del espacio de nombres SystemWebSecurity consulte la siguiente

documentacioacuten de referencia de Microsoft NET Framework

SystemWebSecurity Namespace (Espacio de nombres SystemWebSecurity)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscprefhtmlfrlrfSystemWebSecurityasp

Para obtener maacutes informacioacuten acerca de la configuracioacuten de ASPNET consulte los siguientes artiacuteculos de la Guiacutea del

desarrollador de Microsoft NET Framework

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1129

ASPNET Configuration (Configuracioacuten de ASPNET)

httpmsdn2microsoftcomen-uslibraryaa719558(VS71)aspx

ASPNET Configuration Sections (Secciones de configuracioacuten de ASPNET)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscpguidehtmlcpgrfaspnetconfigurationsectionsasp

Para obtener informacioacuten acerca de las directrices de seguridad de ASPNET consulte la siguiente nota de producto

de MSDN

Authentication in ASPNET NET Security Guidance (Autenticacioacuten en ASPNET consejos sobre seguridad de NET)

httpmsdn2microsoftcomen-uslibraryms978378aspx

Para obtener maacutes informacioacuten general acerca de ASPNET visite el siguiente grupo de noticias de MSDN

httpwwwmicrosoftcomspanishmsdngruposnoticiasasp

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1229

En esta primera etapa solo considerareacute la creacioacuten del coacutedigo para accesar a una paacutegina donde seraacute necesario

utilizar un nombre de usuario y un password No hareacute ninguna modificacioacuten al WebConfig maacutes adelante lo

ocupareacute en otro ejemplo

Comencemoshelliphelliphellip

Vamos a crear la siguiente paacutegina Abriendo un proyecto nuevo para WebSite

Debe incluir dos etiquetas dos cajas de texto y un botoacuten Voy a crear una tabla que se llame usuarios que

cuente con dos campos usr y pwd los cuales seraacute de tipo nvarchar dentro de una Base de Datos que llamare

EST una vez que cree la Base de Datos la tabla los campos y agregue algunos registros voy a proceder a crear

un prodecimiento almacenado que seraacute capaz de poder identificar por mi si el usuario y el password son

correctos la manera es muy sencilla solo ldquocontemosrdquo mediante una consulta de S QL si existe un registros con

el usuario y el password que ingresamos si devuelve 1 el usuario podra entrar si no habra que indicarle que

algo escribio mal

El procedimiento almacenado se llama verifica y queda de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1329

Podemos probar el procedimiento almacenado que acabamos de crear dandole un click derecho sobre el y

seleccionando la opcioacuten Execute

Vamos a crear ahora el coacutedigo para el botoacuten para este paso vamos a utlizar SQLConnection y SQLCommand

ambos pertenecen a la coleccioacuten de nombres de SQLCLient para ellos es necesario agregarla en el encabezado

del programa de la siguiente manera

using SystemDataSqlClient

El coacutedigo del botoacuten quedariacutea de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1429

Oberven en el coacutedigo que utilizo dos WEBform maacutes si el valor que devuelve la consulta hecha a traeacutes del

proceimiento almacenado es 1 se iraacute a la paacutegina de Bienvenidaaspx en caso contrario le indicaraacute en

Erroraspx que se escribio incorrectamente el nombre usuario y contrasentildea para ello se debe agregar estod

dos WebForm maacutes

NOTA Para poder logar que se enmascare con (asteriscos) el t ipeo del

password es necesario que selecciones la caja de texto a utilizar y

posteriormente en propiedades en la opcioacuten TextMode elegir Password

Espero que les haya sido de mucha utilidad a todos un saludo

desde Meacutexico a todos los que han posteado sus comentarios

desde el resto de nuestro precioso paiacutes eso motiva mucho Un

fuerte abrazo a mis lectores de America Latina y Espantildea la

verdad sus comentarios alienta a seguir trabajando con maacutes

enfasis y a todos aquellos que han usado este medio para ponercosas ofensivas la verdad mejor busquen otro sitio no me

gustan esos comentarios ponganse a trabajar y utilicen mejor

el Espantildeol que es una lengua preciosa en lugar de escribir

puras tonterias aqui tratamos de compartir conocimiento

desarrollemos un planeta mejor

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1529

Un Stored Procedure o procedimiento almacenado es algo asi como una sentencia SQL que

se crea dentro de la base de datos Pero creo que si estaacuten leyendo esto es porque ya saben

lo que es un Stored Procedure y simplemente quieren saber como ejecutarlo desde una

paacutegina WEB

Los que no sepan que es un Stored Procedure les recomiendo buscar por otro lado

Bueno los Stored Procedure tienen un nombre y es lo que utilizaremos para llamarlos Esmuy simple y facil

Ejecucion de un Stored Procedure sin ningun paraacutemetro y sin RecordSet (poco usual

pero posible)

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Aqui llamamos al ST en este caso llamado procedimiento

oConnExecute EXEC procedimiento

oConnCloseSet oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Separar los paraacutemetros con coma ()

oConnExecute EXEC procedimiento param1 param2oConnClose

Set oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros recibiendo los datos en un Objeto

RecordSet

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexionSet RS = ServerCreateObject(ADODBRecordSet)

Separar los paraacutemetros con coma ()

RSOpen EXEC procedimiento param1 param2 oConn

Trabajamos con el RS

RSClose

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1629

Set RS = Nothing

oConnClose

Set oConn = Nothing

gt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1729

En este artiacuteculo paso a paso se usa el objeto DataReader para recuperar datos de un procedimiento almacenado de

Oracle Puede usar el objeto DataReader para recuperar una secuencia de datos de avance de soacutelo lectura de una

base de datos Al usar el objeto DataReader puede aumentar el rendimiento de la aplicacioacuten y reducir la carga del

sistema ya que soacutelo se guarda una fila en memoria

Volver al principio

Requisitos

En la lista siguiente se describe el hardware el software la infraestructura de red y los Service Pack recomendados

que se necesitaraacuten

Microsoft Windows 2000 Professional Windows 2000 Server Windows 2000 Advanced Server o

Windows NT 40 Server

Microsoft Visual Studio NET

En el presente artiacuteculo se da por supuesto que estaacute familiarizado con los temas siguientes

Visual C NET

Fundamentos y sintaxis de ADONET

Volver al principio

Crear las tablas de Oracle

En este ejemplo se usan tablas definidas en el esquema ScottTiger de Oracle El esquema ScottTiger de Oracle se

incluye con la instalacioacuten predeterminada de Oracle

Si este esquema no existe tiene que ejecutar la tabla siguiente e insertar secuencias de comandos para las tablas

CREATE TABLE DEPT

(DEPTNO NUMBER(20) NOT NULL

DNAME VARCHAR2(14) NULL

LOC VARCHAR2(13) NULL

PRIMARY KEY (DEPTNO)

)

INSERT INTO Dept VALUES(11SalesTexas)

INSERT INTO Dept VALUES(22AccountingWashington)

INSERT INTO Dept VALUES(33FinanceMaine)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1829

CREATE TABLE EMP

(EMPNO NUMBER(40) NOT NULL

ENAME VARCHAR2(10) NULL

JOB VARCHAR2(9) NULL

MGR NUMBER(40) NULL

SAL NUMBER(72) NULL

COMM NUMBER(72) NULL

DEPTNO NUMBER(20) NULL

FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)

PRIMARY KEY (EMPNO)

)

INSERT INTO Emp VALUES(123BobSales555350001211)

INSERT INTO Emp VALUES(321SueFinance555420001233)

INSERT INTO Emp VALUES(234MaryAccount555330001222)

Volver al principio

Crear los paquetes de Oracle

Cree el paquete de Oracle siguiente en el servidor Oracle

CREATE OR REPLACE PACKAGE curspkg_join AS

TYPE t_cursor IS REF CURSOR

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT

t_cursor)

END curspkg_join

Cree el siguiente cuerpo de paquete de Oracle en el servidor Oracle

CREATE OR REPLACE PACKAGE BODY curspkg_join AS

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT t_cursor)

IS

v_cursor t_cursor

BEGIN

IF n_EMPNO ltgt 0

THEN

OPEN v_cursor FOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1929

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = n_EMPNO

ELSE

OPEN v_cursor FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

io_cursor = v_cursor

END open_join_cursor1

END curspkg_join

Volver al principio

Crear la aplicacioacuten de Visual C NET

1 Cree un nuevo proyecto de aplicacioacuten para Windows de Visual C Se agregaraacute Form1 al proyecto de

manera predeterminada

2 Agregue el siguiente coacutedigo al principio de la ventana de coacutedigo

using SystemDataOleDb

3 Agregue el coacutedigo siguiente al evento Form_Load de Form1

4 OleDbConnection Oraclecon = newOleDbConnection(Provider=MSDAORA1Password=tiger

5 + User ID=scottData Source=OracleServerPersist Security

Info=True)

6 OracleconOpen()7 OleDbCommand myCMD = new OleDbCommand8 (call curspkg_joinopen_join_cursor1( resultset 0 io_cursor)

Oraclecon)

9 myCMDParametersAdd(ID OleDbTypeNumeric 4)Value = 0

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 11: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1129

ASPNET Configuration (Configuracioacuten de ASPNET)

httpmsdn2microsoftcomen-uslibraryaa719558(VS71)aspx

ASPNET Configuration Sections (Secciones de configuracioacuten de ASPNET)

httpmsdnmicrosoftcomlibrarydefaultaspurl=libraryen-uscpguidehtmlcpgrfaspnetconfigurationsectionsasp

Para obtener informacioacuten acerca de las directrices de seguridad de ASPNET consulte la siguiente nota de producto

de MSDN

Authentication in ASPNET NET Security Guidance (Autenticacioacuten en ASPNET consejos sobre seguridad de NET)

httpmsdn2microsoftcomen-uslibraryms978378aspx

Para obtener maacutes informacioacuten general acerca de ASPNET visite el siguiente grupo de noticias de MSDN

httpwwwmicrosoftcomspanishmsdngruposnoticiasasp

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1229

En esta primera etapa solo considerareacute la creacioacuten del coacutedigo para accesar a una paacutegina donde seraacute necesario

utilizar un nombre de usuario y un password No hareacute ninguna modificacioacuten al WebConfig maacutes adelante lo

ocupareacute en otro ejemplo

Comencemoshelliphelliphellip

Vamos a crear la siguiente paacutegina Abriendo un proyecto nuevo para WebSite

Debe incluir dos etiquetas dos cajas de texto y un botoacuten Voy a crear una tabla que se llame usuarios que

cuente con dos campos usr y pwd los cuales seraacute de tipo nvarchar dentro de una Base de Datos que llamare

EST una vez que cree la Base de Datos la tabla los campos y agregue algunos registros voy a proceder a crear

un prodecimiento almacenado que seraacute capaz de poder identificar por mi si el usuario y el password son

correctos la manera es muy sencilla solo ldquocontemosrdquo mediante una consulta de S QL si existe un registros con

el usuario y el password que ingresamos si devuelve 1 el usuario podra entrar si no habra que indicarle que

algo escribio mal

El procedimiento almacenado se llama verifica y queda de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1329

Podemos probar el procedimiento almacenado que acabamos de crear dandole un click derecho sobre el y

seleccionando la opcioacuten Execute

Vamos a crear ahora el coacutedigo para el botoacuten para este paso vamos a utlizar SQLConnection y SQLCommand

ambos pertenecen a la coleccioacuten de nombres de SQLCLient para ellos es necesario agregarla en el encabezado

del programa de la siguiente manera

using SystemDataSqlClient

El coacutedigo del botoacuten quedariacutea de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1429

Oberven en el coacutedigo que utilizo dos WEBform maacutes si el valor que devuelve la consulta hecha a traeacutes del

proceimiento almacenado es 1 se iraacute a la paacutegina de Bienvenidaaspx en caso contrario le indicaraacute en

Erroraspx que se escribio incorrectamente el nombre usuario y contrasentildea para ello se debe agregar estod

dos WebForm maacutes

NOTA Para poder logar que se enmascare con (asteriscos) el t ipeo del

password es necesario que selecciones la caja de texto a utilizar y

posteriormente en propiedades en la opcioacuten TextMode elegir Password

Espero que les haya sido de mucha utilidad a todos un saludo

desde Meacutexico a todos los que han posteado sus comentarios

desde el resto de nuestro precioso paiacutes eso motiva mucho Un

fuerte abrazo a mis lectores de America Latina y Espantildea la

verdad sus comentarios alienta a seguir trabajando con maacutes

enfasis y a todos aquellos que han usado este medio para ponercosas ofensivas la verdad mejor busquen otro sitio no me

gustan esos comentarios ponganse a trabajar y utilicen mejor

el Espantildeol que es una lengua preciosa en lugar de escribir

puras tonterias aqui tratamos de compartir conocimiento

desarrollemos un planeta mejor

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1529

Un Stored Procedure o procedimiento almacenado es algo asi como una sentencia SQL que

se crea dentro de la base de datos Pero creo que si estaacuten leyendo esto es porque ya saben

lo que es un Stored Procedure y simplemente quieren saber como ejecutarlo desde una

paacutegina WEB

Los que no sepan que es un Stored Procedure les recomiendo buscar por otro lado

Bueno los Stored Procedure tienen un nombre y es lo que utilizaremos para llamarlos Esmuy simple y facil

Ejecucion de un Stored Procedure sin ningun paraacutemetro y sin RecordSet (poco usual

pero posible)

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Aqui llamamos al ST en este caso llamado procedimiento

oConnExecute EXEC procedimiento

oConnCloseSet oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Separar los paraacutemetros con coma ()

oConnExecute EXEC procedimiento param1 param2oConnClose

Set oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros recibiendo los datos en un Objeto

RecordSet

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexionSet RS = ServerCreateObject(ADODBRecordSet)

Separar los paraacutemetros con coma ()

RSOpen EXEC procedimiento param1 param2 oConn

Trabajamos con el RS

RSClose

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1629

Set RS = Nothing

oConnClose

Set oConn = Nothing

gt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1729

En este artiacuteculo paso a paso se usa el objeto DataReader para recuperar datos de un procedimiento almacenado de

Oracle Puede usar el objeto DataReader para recuperar una secuencia de datos de avance de soacutelo lectura de una

base de datos Al usar el objeto DataReader puede aumentar el rendimiento de la aplicacioacuten y reducir la carga del

sistema ya que soacutelo se guarda una fila en memoria

Volver al principio

Requisitos

En la lista siguiente se describe el hardware el software la infraestructura de red y los Service Pack recomendados

que se necesitaraacuten

Microsoft Windows 2000 Professional Windows 2000 Server Windows 2000 Advanced Server o

Windows NT 40 Server

Microsoft Visual Studio NET

En el presente artiacuteculo se da por supuesto que estaacute familiarizado con los temas siguientes

Visual C NET

Fundamentos y sintaxis de ADONET

Volver al principio

Crear las tablas de Oracle

En este ejemplo se usan tablas definidas en el esquema ScottTiger de Oracle El esquema ScottTiger de Oracle se

incluye con la instalacioacuten predeterminada de Oracle

Si este esquema no existe tiene que ejecutar la tabla siguiente e insertar secuencias de comandos para las tablas

CREATE TABLE DEPT

(DEPTNO NUMBER(20) NOT NULL

DNAME VARCHAR2(14) NULL

LOC VARCHAR2(13) NULL

PRIMARY KEY (DEPTNO)

)

INSERT INTO Dept VALUES(11SalesTexas)

INSERT INTO Dept VALUES(22AccountingWashington)

INSERT INTO Dept VALUES(33FinanceMaine)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1829

CREATE TABLE EMP

(EMPNO NUMBER(40) NOT NULL

ENAME VARCHAR2(10) NULL

JOB VARCHAR2(9) NULL

MGR NUMBER(40) NULL

SAL NUMBER(72) NULL

COMM NUMBER(72) NULL

DEPTNO NUMBER(20) NULL

FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)

PRIMARY KEY (EMPNO)

)

INSERT INTO Emp VALUES(123BobSales555350001211)

INSERT INTO Emp VALUES(321SueFinance555420001233)

INSERT INTO Emp VALUES(234MaryAccount555330001222)

Volver al principio

Crear los paquetes de Oracle

Cree el paquete de Oracle siguiente en el servidor Oracle

CREATE OR REPLACE PACKAGE curspkg_join AS

TYPE t_cursor IS REF CURSOR

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT

t_cursor)

END curspkg_join

Cree el siguiente cuerpo de paquete de Oracle en el servidor Oracle

CREATE OR REPLACE PACKAGE BODY curspkg_join AS

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT t_cursor)

IS

v_cursor t_cursor

BEGIN

IF n_EMPNO ltgt 0

THEN

OPEN v_cursor FOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1929

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = n_EMPNO

ELSE

OPEN v_cursor FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

io_cursor = v_cursor

END open_join_cursor1

END curspkg_join

Volver al principio

Crear la aplicacioacuten de Visual C NET

1 Cree un nuevo proyecto de aplicacioacuten para Windows de Visual C Se agregaraacute Form1 al proyecto de

manera predeterminada

2 Agregue el siguiente coacutedigo al principio de la ventana de coacutedigo

using SystemDataOleDb

3 Agregue el coacutedigo siguiente al evento Form_Load de Form1

4 OleDbConnection Oraclecon = newOleDbConnection(Provider=MSDAORA1Password=tiger

5 + User ID=scottData Source=OracleServerPersist Security

Info=True)

6 OracleconOpen()7 OleDbCommand myCMD = new OleDbCommand8 (call curspkg_joinopen_join_cursor1( resultset 0 io_cursor)

Oraclecon)

9 myCMDParametersAdd(ID OleDbTypeNumeric 4)Value = 0

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 12: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1229

En esta primera etapa solo considerareacute la creacioacuten del coacutedigo para accesar a una paacutegina donde seraacute necesario

utilizar un nombre de usuario y un password No hareacute ninguna modificacioacuten al WebConfig maacutes adelante lo

ocupareacute en otro ejemplo

Comencemoshelliphelliphellip

Vamos a crear la siguiente paacutegina Abriendo un proyecto nuevo para WebSite

Debe incluir dos etiquetas dos cajas de texto y un botoacuten Voy a crear una tabla que se llame usuarios que

cuente con dos campos usr y pwd los cuales seraacute de tipo nvarchar dentro de una Base de Datos que llamare

EST una vez que cree la Base de Datos la tabla los campos y agregue algunos registros voy a proceder a crear

un prodecimiento almacenado que seraacute capaz de poder identificar por mi si el usuario y el password son

correctos la manera es muy sencilla solo ldquocontemosrdquo mediante una consulta de S QL si existe un registros con

el usuario y el password que ingresamos si devuelve 1 el usuario podra entrar si no habra que indicarle que

algo escribio mal

El procedimiento almacenado se llama verifica y queda de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1329

Podemos probar el procedimiento almacenado que acabamos de crear dandole un click derecho sobre el y

seleccionando la opcioacuten Execute

Vamos a crear ahora el coacutedigo para el botoacuten para este paso vamos a utlizar SQLConnection y SQLCommand

ambos pertenecen a la coleccioacuten de nombres de SQLCLient para ellos es necesario agregarla en el encabezado

del programa de la siguiente manera

using SystemDataSqlClient

El coacutedigo del botoacuten quedariacutea de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1429

Oberven en el coacutedigo que utilizo dos WEBform maacutes si el valor que devuelve la consulta hecha a traeacutes del

proceimiento almacenado es 1 se iraacute a la paacutegina de Bienvenidaaspx en caso contrario le indicaraacute en

Erroraspx que se escribio incorrectamente el nombre usuario y contrasentildea para ello se debe agregar estod

dos WebForm maacutes

NOTA Para poder logar que se enmascare con (asteriscos) el t ipeo del

password es necesario que selecciones la caja de texto a utilizar y

posteriormente en propiedades en la opcioacuten TextMode elegir Password

Espero que les haya sido de mucha utilidad a todos un saludo

desde Meacutexico a todos los que han posteado sus comentarios

desde el resto de nuestro precioso paiacutes eso motiva mucho Un

fuerte abrazo a mis lectores de America Latina y Espantildea la

verdad sus comentarios alienta a seguir trabajando con maacutes

enfasis y a todos aquellos que han usado este medio para ponercosas ofensivas la verdad mejor busquen otro sitio no me

gustan esos comentarios ponganse a trabajar y utilicen mejor

el Espantildeol que es una lengua preciosa en lugar de escribir

puras tonterias aqui tratamos de compartir conocimiento

desarrollemos un planeta mejor

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1529

Un Stored Procedure o procedimiento almacenado es algo asi como una sentencia SQL que

se crea dentro de la base de datos Pero creo que si estaacuten leyendo esto es porque ya saben

lo que es un Stored Procedure y simplemente quieren saber como ejecutarlo desde una

paacutegina WEB

Los que no sepan que es un Stored Procedure les recomiendo buscar por otro lado

Bueno los Stored Procedure tienen un nombre y es lo que utilizaremos para llamarlos Esmuy simple y facil

Ejecucion de un Stored Procedure sin ningun paraacutemetro y sin RecordSet (poco usual

pero posible)

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Aqui llamamos al ST en este caso llamado procedimiento

oConnExecute EXEC procedimiento

oConnCloseSet oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Separar los paraacutemetros con coma ()

oConnExecute EXEC procedimiento param1 param2oConnClose

Set oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros recibiendo los datos en un Objeto

RecordSet

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexionSet RS = ServerCreateObject(ADODBRecordSet)

Separar los paraacutemetros con coma ()

RSOpen EXEC procedimiento param1 param2 oConn

Trabajamos con el RS

RSClose

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1629

Set RS = Nothing

oConnClose

Set oConn = Nothing

gt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1729

En este artiacuteculo paso a paso se usa el objeto DataReader para recuperar datos de un procedimiento almacenado de

Oracle Puede usar el objeto DataReader para recuperar una secuencia de datos de avance de soacutelo lectura de una

base de datos Al usar el objeto DataReader puede aumentar el rendimiento de la aplicacioacuten y reducir la carga del

sistema ya que soacutelo se guarda una fila en memoria

Volver al principio

Requisitos

En la lista siguiente se describe el hardware el software la infraestructura de red y los Service Pack recomendados

que se necesitaraacuten

Microsoft Windows 2000 Professional Windows 2000 Server Windows 2000 Advanced Server o

Windows NT 40 Server

Microsoft Visual Studio NET

En el presente artiacuteculo se da por supuesto que estaacute familiarizado con los temas siguientes

Visual C NET

Fundamentos y sintaxis de ADONET

Volver al principio

Crear las tablas de Oracle

En este ejemplo se usan tablas definidas en el esquema ScottTiger de Oracle El esquema ScottTiger de Oracle se

incluye con la instalacioacuten predeterminada de Oracle

Si este esquema no existe tiene que ejecutar la tabla siguiente e insertar secuencias de comandos para las tablas

CREATE TABLE DEPT

(DEPTNO NUMBER(20) NOT NULL

DNAME VARCHAR2(14) NULL

LOC VARCHAR2(13) NULL

PRIMARY KEY (DEPTNO)

)

INSERT INTO Dept VALUES(11SalesTexas)

INSERT INTO Dept VALUES(22AccountingWashington)

INSERT INTO Dept VALUES(33FinanceMaine)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1829

CREATE TABLE EMP

(EMPNO NUMBER(40) NOT NULL

ENAME VARCHAR2(10) NULL

JOB VARCHAR2(9) NULL

MGR NUMBER(40) NULL

SAL NUMBER(72) NULL

COMM NUMBER(72) NULL

DEPTNO NUMBER(20) NULL

FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)

PRIMARY KEY (EMPNO)

)

INSERT INTO Emp VALUES(123BobSales555350001211)

INSERT INTO Emp VALUES(321SueFinance555420001233)

INSERT INTO Emp VALUES(234MaryAccount555330001222)

Volver al principio

Crear los paquetes de Oracle

Cree el paquete de Oracle siguiente en el servidor Oracle

CREATE OR REPLACE PACKAGE curspkg_join AS

TYPE t_cursor IS REF CURSOR

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT

t_cursor)

END curspkg_join

Cree el siguiente cuerpo de paquete de Oracle en el servidor Oracle

CREATE OR REPLACE PACKAGE BODY curspkg_join AS

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT t_cursor)

IS

v_cursor t_cursor

BEGIN

IF n_EMPNO ltgt 0

THEN

OPEN v_cursor FOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1929

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = n_EMPNO

ELSE

OPEN v_cursor FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

io_cursor = v_cursor

END open_join_cursor1

END curspkg_join

Volver al principio

Crear la aplicacioacuten de Visual C NET

1 Cree un nuevo proyecto de aplicacioacuten para Windows de Visual C Se agregaraacute Form1 al proyecto de

manera predeterminada

2 Agregue el siguiente coacutedigo al principio de la ventana de coacutedigo

using SystemDataOleDb

3 Agregue el coacutedigo siguiente al evento Form_Load de Form1

4 OleDbConnection Oraclecon = newOleDbConnection(Provider=MSDAORA1Password=tiger

5 + User ID=scottData Source=OracleServerPersist Security

Info=True)

6 OracleconOpen()7 OleDbCommand myCMD = new OleDbCommand8 (call curspkg_joinopen_join_cursor1( resultset 0 io_cursor)

Oraclecon)

9 myCMDParametersAdd(ID OleDbTypeNumeric 4)Value = 0

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 13: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1329

Podemos probar el procedimiento almacenado que acabamos de crear dandole un click derecho sobre el y

seleccionando la opcioacuten Execute

Vamos a crear ahora el coacutedigo para el botoacuten para este paso vamos a utlizar SQLConnection y SQLCommand

ambos pertenecen a la coleccioacuten de nombres de SQLCLient para ellos es necesario agregarla en el encabezado

del programa de la siguiente manera

using SystemDataSqlClient

El coacutedigo del botoacuten quedariacutea de la siguiente manera

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1429

Oberven en el coacutedigo que utilizo dos WEBform maacutes si el valor que devuelve la consulta hecha a traeacutes del

proceimiento almacenado es 1 se iraacute a la paacutegina de Bienvenidaaspx en caso contrario le indicaraacute en

Erroraspx que se escribio incorrectamente el nombre usuario y contrasentildea para ello se debe agregar estod

dos WebForm maacutes

NOTA Para poder logar que se enmascare con (asteriscos) el t ipeo del

password es necesario que selecciones la caja de texto a utilizar y

posteriormente en propiedades en la opcioacuten TextMode elegir Password

Espero que les haya sido de mucha utilidad a todos un saludo

desde Meacutexico a todos los que han posteado sus comentarios

desde el resto de nuestro precioso paiacutes eso motiva mucho Un

fuerte abrazo a mis lectores de America Latina y Espantildea la

verdad sus comentarios alienta a seguir trabajando con maacutes

enfasis y a todos aquellos que han usado este medio para ponercosas ofensivas la verdad mejor busquen otro sitio no me

gustan esos comentarios ponganse a trabajar y utilicen mejor

el Espantildeol que es una lengua preciosa en lugar de escribir

puras tonterias aqui tratamos de compartir conocimiento

desarrollemos un planeta mejor

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1529

Un Stored Procedure o procedimiento almacenado es algo asi como una sentencia SQL que

se crea dentro de la base de datos Pero creo que si estaacuten leyendo esto es porque ya saben

lo que es un Stored Procedure y simplemente quieren saber como ejecutarlo desde una

paacutegina WEB

Los que no sepan que es un Stored Procedure les recomiendo buscar por otro lado

Bueno los Stored Procedure tienen un nombre y es lo que utilizaremos para llamarlos Esmuy simple y facil

Ejecucion de un Stored Procedure sin ningun paraacutemetro y sin RecordSet (poco usual

pero posible)

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Aqui llamamos al ST en este caso llamado procedimiento

oConnExecute EXEC procedimiento

oConnCloseSet oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Separar los paraacutemetros con coma ()

oConnExecute EXEC procedimiento param1 param2oConnClose

Set oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros recibiendo los datos en un Objeto

RecordSet

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexionSet RS = ServerCreateObject(ADODBRecordSet)

Separar los paraacutemetros con coma ()

RSOpen EXEC procedimiento param1 param2 oConn

Trabajamos con el RS

RSClose

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1629

Set RS = Nothing

oConnClose

Set oConn = Nothing

gt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1729

En este artiacuteculo paso a paso se usa el objeto DataReader para recuperar datos de un procedimiento almacenado de

Oracle Puede usar el objeto DataReader para recuperar una secuencia de datos de avance de soacutelo lectura de una

base de datos Al usar el objeto DataReader puede aumentar el rendimiento de la aplicacioacuten y reducir la carga del

sistema ya que soacutelo se guarda una fila en memoria

Volver al principio

Requisitos

En la lista siguiente se describe el hardware el software la infraestructura de red y los Service Pack recomendados

que se necesitaraacuten

Microsoft Windows 2000 Professional Windows 2000 Server Windows 2000 Advanced Server o

Windows NT 40 Server

Microsoft Visual Studio NET

En el presente artiacuteculo se da por supuesto que estaacute familiarizado con los temas siguientes

Visual C NET

Fundamentos y sintaxis de ADONET

Volver al principio

Crear las tablas de Oracle

En este ejemplo se usan tablas definidas en el esquema ScottTiger de Oracle El esquema ScottTiger de Oracle se

incluye con la instalacioacuten predeterminada de Oracle

Si este esquema no existe tiene que ejecutar la tabla siguiente e insertar secuencias de comandos para las tablas

CREATE TABLE DEPT

(DEPTNO NUMBER(20) NOT NULL

DNAME VARCHAR2(14) NULL

LOC VARCHAR2(13) NULL

PRIMARY KEY (DEPTNO)

)

INSERT INTO Dept VALUES(11SalesTexas)

INSERT INTO Dept VALUES(22AccountingWashington)

INSERT INTO Dept VALUES(33FinanceMaine)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1829

CREATE TABLE EMP

(EMPNO NUMBER(40) NOT NULL

ENAME VARCHAR2(10) NULL

JOB VARCHAR2(9) NULL

MGR NUMBER(40) NULL

SAL NUMBER(72) NULL

COMM NUMBER(72) NULL

DEPTNO NUMBER(20) NULL

FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)

PRIMARY KEY (EMPNO)

)

INSERT INTO Emp VALUES(123BobSales555350001211)

INSERT INTO Emp VALUES(321SueFinance555420001233)

INSERT INTO Emp VALUES(234MaryAccount555330001222)

Volver al principio

Crear los paquetes de Oracle

Cree el paquete de Oracle siguiente en el servidor Oracle

CREATE OR REPLACE PACKAGE curspkg_join AS

TYPE t_cursor IS REF CURSOR

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT

t_cursor)

END curspkg_join

Cree el siguiente cuerpo de paquete de Oracle en el servidor Oracle

CREATE OR REPLACE PACKAGE BODY curspkg_join AS

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT t_cursor)

IS

v_cursor t_cursor

BEGIN

IF n_EMPNO ltgt 0

THEN

OPEN v_cursor FOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1929

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = n_EMPNO

ELSE

OPEN v_cursor FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

io_cursor = v_cursor

END open_join_cursor1

END curspkg_join

Volver al principio

Crear la aplicacioacuten de Visual C NET

1 Cree un nuevo proyecto de aplicacioacuten para Windows de Visual C Se agregaraacute Form1 al proyecto de

manera predeterminada

2 Agregue el siguiente coacutedigo al principio de la ventana de coacutedigo

using SystemDataOleDb

3 Agregue el coacutedigo siguiente al evento Form_Load de Form1

4 OleDbConnection Oraclecon = newOleDbConnection(Provider=MSDAORA1Password=tiger

5 + User ID=scottData Source=OracleServerPersist Security

Info=True)

6 OracleconOpen()7 OleDbCommand myCMD = new OleDbCommand8 (call curspkg_joinopen_join_cursor1( resultset 0 io_cursor)

Oraclecon)

9 myCMDParametersAdd(ID OleDbTypeNumeric 4)Value = 0

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 14: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1429

Oberven en el coacutedigo que utilizo dos WEBform maacutes si el valor que devuelve la consulta hecha a traeacutes del

proceimiento almacenado es 1 se iraacute a la paacutegina de Bienvenidaaspx en caso contrario le indicaraacute en

Erroraspx que se escribio incorrectamente el nombre usuario y contrasentildea para ello se debe agregar estod

dos WebForm maacutes

NOTA Para poder logar que se enmascare con (asteriscos) el t ipeo del

password es necesario que selecciones la caja de texto a utilizar y

posteriormente en propiedades en la opcioacuten TextMode elegir Password

Espero que les haya sido de mucha utilidad a todos un saludo

desde Meacutexico a todos los que han posteado sus comentarios

desde el resto de nuestro precioso paiacutes eso motiva mucho Un

fuerte abrazo a mis lectores de America Latina y Espantildea la

verdad sus comentarios alienta a seguir trabajando con maacutes

enfasis y a todos aquellos que han usado este medio para ponercosas ofensivas la verdad mejor busquen otro sitio no me

gustan esos comentarios ponganse a trabajar y utilicen mejor

el Espantildeol que es una lengua preciosa en lugar de escribir

puras tonterias aqui tratamos de compartir conocimiento

desarrollemos un planeta mejor

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1529

Un Stored Procedure o procedimiento almacenado es algo asi como una sentencia SQL que

se crea dentro de la base de datos Pero creo que si estaacuten leyendo esto es porque ya saben

lo que es un Stored Procedure y simplemente quieren saber como ejecutarlo desde una

paacutegina WEB

Los que no sepan que es un Stored Procedure les recomiendo buscar por otro lado

Bueno los Stored Procedure tienen un nombre y es lo que utilizaremos para llamarlos Esmuy simple y facil

Ejecucion de un Stored Procedure sin ningun paraacutemetro y sin RecordSet (poco usual

pero posible)

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Aqui llamamos al ST en este caso llamado procedimiento

oConnExecute EXEC procedimiento

oConnCloseSet oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Separar los paraacutemetros con coma ()

oConnExecute EXEC procedimiento param1 param2oConnClose

Set oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros recibiendo los datos en un Objeto

RecordSet

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexionSet RS = ServerCreateObject(ADODBRecordSet)

Separar los paraacutemetros con coma ()

RSOpen EXEC procedimiento param1 param2 oConn

Trabajamos con el RS

RSClose

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1629

Set RS = Nothing

oConnClose

Set oConn = Nothing

gt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1729

En este artiacuteculo paso a paso se usa el objeto DataReader para recuperar datos de un procedimiento almacenado de

Oracle Puede usar el objeto DataReader para recuperar una secuencia de datos de avance de soacutelo lectura de una

base de datos Al usar el objeto DataReader puede aumentar el rendimiento de la aplicacioacuten y reducir la carga del

sistema ya que soacutelo se guarda una fila en memoria

Volver al principio

Requisitos

En la lista siguiente se describe el hardware el software la infraestructura de red y los Service Pack recomendados

que se necesitaraacuten

Microsoft Windows 2000 Professional Windows 2000 Server Windows 2000 Advanced Server o

Windows NT 40 Server

Microsoft Visual Studio NET

En el presente artiacuteculo se da por supuesto que estaacute familiarizado con los temas siguientes

Visual C NET

Fundamentos y sintaxis de ADONET

Volver al principio

Crear las tablas de Oracle

En este ejemplo se usan tablas definidas en el esquema ScottTiger de Oracle El esquema ScottTiger de Oracle se

incluye con la instalacioacuten predeterminada de Oracle

Si este esquema no existe tiene que ejecutar la tabla siguiente e insertar secuencias de comandos para las tablas

CREATE TABLE DEPT

(DEPTNO NUMBER(20) NOT NULL

DNAME VARCHAR2(14) NULL

LOC VARCHAR2(13) NULL

PRIMARY KEY (DEPTNO)

)

INSERT INTO Dept VALUES(11SalesTexas)

INSERT INTO Dept VALUES(22AccountingWashington)

INSERT INTO Dept VALUES(33FinanceMaine)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1829

CREATE TABLE EMP

(EMPNO NUMBER(40) NOT NULL

ENAME VARCHAR2(10) NULL

JOB VARCHAR2(9) NULL

MGR NUMBER(40) NULL

SAL NUMBER(72) NULL

COMM NUMBER(72) NULL

DEPTNO NUMBER(20) NULL

FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)

PRIMARY KEY (EMPNO)

)

INSERT INTO Emp VALUES(123BobSales555350001211)

INSERT INTO Emp VALUES(321SueFinance555420001233)

INSERT INTO Emp VALUES(234MaryAccount555330001222)

Volver al principio

Crear los paquetes de Oracle

Cree el paquete de Oracle siguiente en el servidor Oracle

CREATE OR REPLACE PACKAGE curspkg_join AS

TYPE t_cursor IS REF CURSOR

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT

t_cursor)

END curspkg_join

Cree el siguiente cuerpo de paquete de Oracle en el servidor Oracle

CREATE OR REPLACE PACKAGE BODY curspkg_join AS

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT t_cursor)

IS

v_cursor t_cursor

BEGIN

IF n_EMPNO ltgt 0

THEN

OPEN v_cursor FOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1929

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = n_EMPNO

ELSE

OPEN v_cursor FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

io_cursor = v_cursor

END open_join_cursor1

END curspkg_join

Volver al principio

Crear la aplicacioacuten de Visual C NET

1 Cree un nuevo proyecto de aplicacioacuten para Windows de Visual C Se agregaraacute Form1 al proyecto de

manera predeterminada

2 Agregue el siguiente coacutedigo al principio de la ventana de coacutedigo

using SystemDataOleDb

3 Agregue el coacutedigo siguiente al evento Form_Load de Form1

4 OleDbConnection Oraclecon = newOleDbConnection(Provider=MSDAORA1Password=tiger

5 + User ID=scottData Source=OracleServerPersist Security

Info=True)

6 OracleconOpen()7 OleDbCommand myCMD = new OleDbCommand8 (call curspkg_joinopen_join_cursor1( resultset 0 io_cursor)

Oraclecon)

9 myCMDParametersAdd(ID OleDbTypeNumeric 4)Value = 0

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 15: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1529

Un Stored Procedure o procedimiento almacenado es algo asi como una sentencia SQL que

se crea dentro de la base de datos Pero creo que si estaacuten leyendo esto es porque ya saben

lo que es un Stored Procedure y simplemente quieren saber como ejecutarlo desde una

paacutegina WEB

Los que no sepan que es un Stored Procedure les recomiendo buscar por otro lado

Bueno los Stored Procedure tienen un nombre y es lo que utilizaremos para llamarlos Esmuy simple y facil

Ejecucion de un Stored Procedure sin ningun paraacutemetro y sin RecordSet (poco usual

pero posible)

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Aqui llamamos al ST en este caso llamado procedimiento

oConnExecute EXEC procedimiento

oConnCloseSet oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexion

Separar los paraacutemetros con coma ()

oConnExecute EXEC procedimiento param1 param2oConnClose

Set oConn = Nothing

gt

Ejecucion de un Stored Procedure con paraacutemetros recibiendo los datos en un Objeto

RecordSet

lt

Creamos la conexion

Set oConn = ServerCreateObject(ADODBConnection)

oConnOpen DRIVER de conexionSet RS = ServerCreateObject(ADODBRecordSet)

Separar los paraacutemetros con coma ()

RSOpen EXEC procedimiento param1 param2 oConn

Trabajamos con el RS

RSClose

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1629

Set RS = Nothing

oConnClose

Set oConn = Nothing

gt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1729

En este artiacuteculo paso a paso se usa el objeto DataReader para recuperar datos de un procedimiento almacenado de

Oracle Puede usar el objeto DataReader para recuperar una secuencia de datos de avance de soacutelo lectura de una

base de datos Al usar el objeto DataReader puede aumentar el rendimiento de la aplicacioacuten y reducir la carga del

sistema ya que soacutelo se guarda una fila en memoria

Volver al principio

Requisitos

En la lista siguiente se describe el hardware el software la infraestructura de red y los Service Pack recomendados

que se necesitaraacuten

Microsoft Windows 2000 Professional Windows 2000 Server Windows 2000 Advanced Server o

Windows NT 40 Server

Microsoft Visual Studio NET

En el presente artiacuteculo se da por supuesto que estaacute familiarizado con los temas siguientes

Visual C NET

Fundamentos y sintaxis de ADONET

Volver al principio

Crear las tablas de Oracle

En este ejemplo se usan tablas definidas en el esquema ScottTiger de Oracle El esquema ScottTiger de Oracle se

incluye con la instalacioacuten predeterminada de Oracle

Si este esquema no existe tiene que ejecutar la tabla siguiente e insertar secuencias de comandos para las tablas

CREATE TABLE DEPT

(DEPTNO NUMBER(20) NOT NULL

DNAME VARCHAR2(14) NULL

LOC VARCHAR2(13) NULL

PRIMARY KEY (DEPTNO)

)

INSERT INTO Dept VALUES(11SalesTexas)

INSERT INTO Dept VALUES(22AccountingWashington)

INSERT INTO Dept VALUES(33FinanceMaine)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1829

CREATE TABLE EMP

(EMPNO NUMBER(40) NOT NULL

ENAME VARCHAR2(10) NULL

JOB VARCHAR2(9) NULL

MGR NUMBER(40) NULL

SAL NUMBER(72) NULL

COMM NUMBER(72) NULL

DEPTNO NUMBER(20) NULL

FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)

PRIMARY KEY (EMPNO)

)

INSERT INTO Emp VALUES(123BobSales555350001211)

INSERT INTO Emp VALUES(321SueFinance555420001233)

INSERT INTO Emp VALUES(234MaryAccount555330001222)

Volver al principio

Crear los paquetes de Oracle

Cree el paquete de Oracle siguiente en el servidor Oracle

CREATE OR REPLACE PACKAGE curspkg_join AS

TYPE t_cursor IS REF CURSOR

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT

t_cursor)

END curspkg_join

Cree el siguiente cuerpo de paquete de Oracle en el servidor Oracle

CREATE OR REPLACE PACKAGE BODY curspkg_join AS

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT t_cursor)

IS

v_cursor t_cursor

BEGIN

IF n_EMPNO ltgt 0

THEN

OPEN v_cursor FOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1929

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = n_EMPNO

ELSE

OPEN v_cursor FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

io_cursor = v_cursor

END open_join_cursor1

END curspkg_join

Volver al principio

Crear la aplicacioacuten de Visual C NET

1 Cree un nuevo proyecto de aplicacioacuten para Windows de Visual C Se agregaraacute Form1 al proyecto de

manera predeterminada

2 Agregue el siguiente coacutedigo al principio de la ventana de coacutedigo

using SystemDataOleDb

3 Agregue el coacutedigo siguiente al evento Form_Load de Form1

4 OleDbConnection Oraclecon = newOleDbConnection(Provider=MSDAORA1Password=tiger

5 + User ID=scottData Source=OracleServerPersist Security

Info=True)

6 OracleconOpen()7 OleDbCommand myCMD = new OleDbCommand8 (call curspkg_joinopen_join_cursor1( resultset 0 io_cursor)

Oraclecon)

9 myCMDParametersAdd(ID OleDbTypeNumeric 4)Value = 0

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 16: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1629

Set RS = Nothing

oConnClose

Set oConn = Nothing

gt

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1729

En este artiacuteculo paso a paso se usa el objeto DataReader para recuperar datos de un procedimiento almacenado de

Oracle Puede usar el objeto DataReader para recuperar una secuencia de datos de avance de soacutelo lectura de una

base de datos Al usar el objeto DataReader puede aumentar el rendimiento de la aplicacioacuten y reducir la carga del

sistema ya que soacutelo se guarda una fila en memoria

Volver al principio

Requisitos

En la lista siguiente se describe el hardware el software la infraestructura de red y los Service Pack recomendados

que se necesitaraacuten

Microsoft Windows 2000 Professional Windows 2000 Server Windows 2000 Advanced Server o

Windows NT 40 Server

Microsoft Visual Studio NET

En el presente artiacuteculo se da por supuesto que estaacute familiarizado con los temas siguientes

Visual C NET

Fundamentos y sintaxis de ADONET

Volver al principio

Crear las tablas de Oracle

En este ejemplo se usan tablas definidas en el esquema ScottTiger de Oracle El esquema ScottTiger de Oracle se

incluye con la instalacioacuten predeterminada de Oracle

Si este esquema no existe tiene que ejecutar la tabla siguiente e insertar secuencias de comandos para las tablas

CREATE TABLE DEPT

(DEPTNO NUMBER(20) NOT NULL

DNAME VARCHAR2(14) NULL

LOC VARCHAR2(13) NULL

PRIMARY KEY (DEPTNO)

)

INSERT INTO Dept VALUES(11SalesTexas)

INSERT INTO Dept VALUES(22AccountingWashington)

INSERT INTO Dept VALUES(33FinanceMaine)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1829

CREATE TABLE EMP

(EMPNO NUMBER(40) NOT NULL

ENAME VARCHAR2(10) NULL

JOB VARCHAR2(9) NULL

MGR NUMBER(40) NULL

SAL NUMBER(72) NULL

COMM NUMBER(72) NULL

DEPTNO NUMBER(20) NULL

FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)

PRIMARY KEY (EMPNO)

)

INSERT INTO Emp VALUES(123BobSales555350001211)

INSERT INTO Emp VALUES(321SueFinance555420001233)

INSERT INTO Emp VALUES(234MaryAccount555330001222)

Volver al principio

Crear los paquetes de Oracle

Cree el paquete de Oracle siguiente en el servidor Oracle

CREATE OR REPLACE PACKAGE curspkg_join AS

TYPE t_cursor IS REF CURSOR

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT

t_cursor)

END curspkg_join

Cree el siguiente cuerpo de paquete de Oracle en el servidor Oracle

CREATE OR REPLACE PACKAGE BODY curspkg_join AS

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT t_cursor)

IS

v_cursor t_cursor

BEGIN

IF n_EMPNO ltgt 0

THEN

OPEN v_cursor FOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1929

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = n_EMPNO

ELSE

OPEN v_cursor FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

io_cursor = v_cursor

END open_join_cursor1

END curspkg_join

Volver al principio

Crear la aplicacioacuten de Visual C NET

1 Cree un nuevo proyecto de aplicacioacuten para Windows de Visual C Se agregaraacute Form1 al proyecto de

manera predeterminada

2 Agregue el siguiente coacutedigo al principio de la ventana de coacutedigo

using SystemDataOleDb

3 Agregue el coacutedigo siguiente al evento Form_Load de Form1

4 OleDbConnection Oraclecon = newOleDbConnection(Provider=MSDAORA1Password=tiger

5 + User ID=scottData Source=OracleServerPersist Security

Info=True)

6 OracleconOpen()7 OleDbCommand myCMD = new OleDbCommand8 (call curspkg_joinopen_join_cursor1( resultset 0 io_cursor)

Oraclecon)

9 myCMDParametersAdd(ID OleDbTypeNumeric 4)Value = 0

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 17: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1729

En este artiacuteculo paso a paso se usa el objeto DataReader para recuperar datos de un procedimiento almacenado de

Oracle Puede usar el objeto DataReader para recuperar una secuencia de datos de avance de soacutelo lectura de una

base de datos Al usar el objeto DataReader puede aumentar el rendimiento de la aplicacioacuten y reducir la carga del

sistema ya que soacutelo se guarda una fila en memoria

Volver al principio

Requisitos

En la lista siguiente se describe el hardware el software la infraestructura de red y los Service Pack recomendados

que se necesitaraacuten

Microsoft Windows 2000 Professional Windows 2000 Server Windows 2000 Advanced Server o

Windows NT 40 Server

Microsoft Visual Studio NET

En el presente artiacuteculo se da por supuesto que estaacute familiarizado con los temas siguientes

Visual C NET

Fundamentos y sintaxis de ADONET

Volver al principio

Crear las tablas de Oracle

En este ejemplo se usan tablas definidas en el esquema ScottTiger de Oracle El esquema ScottTiger de Oracle se

incluye con la instalacioacuten predeterminada de Oracle

Si este esquema no existe tiene que ejecutar la tabla siguiente e insertar secuencias de comandos para las tablas

CREATE TABLE DEPT

(DEPTNO NUMBER(20) NOT NULL

DNAME VARCHAR2(14) NULL

LOC VARCHAR2(13) NULL

PRIMARY KEY (DEPTNO)

)

INSERT INTO Dept VALUES(11SalesTexas)

INSERT INTO Dept VALUES(22AccountingWashington)

INSERT INTO Dept VALUES(33FinanceMaine)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1829

CREATE TABLE EMP

(EMPNO NUMBER(40) NOT NULL

ENAME VARCHAR2(10) NULL

JOB VARCHAR2(9) NULL

MGR NUMBER(40) NULL

SAL NUMBER(72) NULL

COMM NUMBER(72) NULL

DEPTNO NUMBER(20) NULL

FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)

PRIMARY KEY (EMPNO)

)

INSERT INTO Emp VALUES(123BobSales555350001211)

INSERT INTO Emp VALUES(321SueFinance555420001233)

INSERT INTO Emp VALUES(234MaryAccount555330001222)

Volver al principio

Crear los paquetes de Oracle

Cree el paquete de Oracle siguiente en el servidor Oracle

CREATE OR REPLACE PACKAGE curspkg_join AS

TYPE t_cursor IS REF CURSOR

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT

t_cursor)

END curspkg_join

Cree el siguiente cuerpo de paquete de Oracle en el servidor Oracle

CREATE OR REPLACE PACKAGE BODY curspkg_join AS

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT t_cursor)

IS

v_cursor t_cursor

BEGIN

IF n_EMPNO ltgt 0

THEN

OPEN v_cursor FOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1929

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = n_EMPNO

ELSE

OPEN v_cursor FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

io_cursor = v_cursor

END open_join_cursor1

END curspkg_join

Volver al principio

Crear la aplicacioacuten de Visual C NET

1 Cree un nuevo proyecto de aplicacioacuten para Windows de Visual C Se agregaraacute Form1 al proyecto de

manera predeterminada

2 Agregue el siguiente coacutedigo al principio de la ventana de coacutedigo

using SystemDataOleDb

3 Agregue el coacutedigo siguiente al evento Form_Load de Form1

4 OleDbConnection Oraclecon = newOleDbConnection(Provider=MSDAORA1Password=tiger

5 + User ID=scottData Source=OracleServerPersist Security

Info=True)

6 OracleconOpen()7 OleDbCommand myCMD = new OleDbCommand8 (call curspkg_joinopen_join_cursor1( resultset 0 io_cursor)

Oraclecon)

9 myCMDParametersAdd(ID OleDbTypeNumeric 4)Value = 0

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 18: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1829

CREATE TABLE EMP

(EMPNO NUMBER(40) NOT NULL

ENAME VARCHAR2(10) NULL

JOB VARCHAR2(9) NULL

MGR NUMBER(40) NULL

SAL NUMBER(72) NULL

COMM NUMBER(72) NULL

DEPTNO NUMBER(20) NULL

FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)

PRIMARY KEY (EMPNO)

)

INSERT INTO Emp VALUES(123BobSales555350001211)

INSERT INTO Emp VALUES(321SueFinance555420001233)

INSERT INTO Emp VALUES(234MaryAccount555330001222)

Volver al principio

Crear los paquetes de Oracle

Cree el paquete de Oracle siguiente en el servidor Oracle

CREATE OR REPLACE PACKAGE curspkg_join AS

TYPE t_cursor IS REF CURSOR

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT

t_cursor)

END curspkg_join

Cree el siguiente cuerpo de paquete de Oracle en el servidor Oracle

CREATE OR REPLACE PACKAGE BODY curspkg_join AS

Procedure open_join_cursor1 (n_EMPNO IN NUMBER io_cursor IN OUT t_cursor)

IS

v_cursor t_cursor

BEGIN

IF n_EMPNO ltgt 0

THEN

OPEN v_cursor FOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1929

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = n_EMPNO

ELSE

OPEN v_cursor FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

io_cursor = v_cursor

END open_join_cursor1

END curspkg_join

Volver al principio

Crear la aplicacioacuten de Visual C NET

1 Cree un nuevo proyecto de aplicacioacuten para Windows de Visual C Se agregaraacute Form1 al proyecto de

manera predeterminada

2 Agregue el siguiente coacutedigo al principio de la ventana de coacutedigo

using SystemDataOleDb

3 Agregue el coacutedigo siguiente al evento Form_Load de Form1

4 OleDbConnection Oraclecon = newOleDbConnection(Provider=MSDAORA1Password=tiger

5 + User ID=scottData Source=OracleServerPersist Security

Info=True)

6 OracleconOpen()7 OleDbCommand myCMD = new OleDbCommand8 (call curspkg_joinopen_join_cursor1( resultset 0 io_cursor)

Oraclecon)

9 myCMDParametersAdd(ID OleDbTypeNumeric 4)Value = 0

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 19: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 1929

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = n_EMPNO

ELSE

OPEN v_cursor FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

io_cursor = v_cursor

END open_join_cursor1

END curspkg_join

Volver al principio

Crear la aplicacioacuten de Visual C NET

1 Cree un nuevo proyecto de aplicacioacuten para Windows de Visual C Se agregaraacute Form1 al proyecto de

manera predeterminada

2 Agregue el siguiente coacutedigo al principio de la ventana de coacutedigo

using SystemDataOleDb

3 Agregue el coacutedigo siguiente al evento Form_Load de Form1

4 OleDbConnection Oraclecon = newOleDbConnection(Provider=MSDAORA1Password=tiger

5 + User ID=scottData Source=OracleServerPersist Security

Info=True)

6 OracleconOpen()7 OleDbCommand myCMD = new OleDbCommand8 (call curspkg_joinopen_join_cursor1( resultset 0 io_cursor)

Oraclecon)

9 myCMDParametersAdd(ID OleDbTypeNumeric 4)Value = 0

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 20: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2029

10 OleDbDataReader myReader11 myReader = myCMDExecuteReader()12 int x13 int count14 count = 015 while (myReaderRead())16 17 18 for (x = 0 x lt= myReaderFieldCount - 1 x++)

19 ConsoleWrite(myReaderGetValue(x) + )

20 21 22 ConsoleWriteLine()

23 count += 1

24 25 26 27 MessageBoxShow(count + Rows Returned)28 myReaderClose()

OracleconClose()

29 Modifique la cadena OleDbConnection de acuerdo con su entorno

30 Presione la tecla F5 para compilar y ejecutar la aplicacioacuten Tenga en cuenta que los datos del

procedimiento almacenado de Oracle se incluyen en la ventana Depuracioacuten y aparece un cuadro de

mensajes que muestra el nuacutemero de filas

Volver al principio

Informacioacuten adicional

Tenga en cuenta que el coacutedigo recorre el elemento DataReader

while (myReaderRead())

Esto se debe a que DataReader soacutelo lee una liacutenea cada vez

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 21: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2129

Representa un conjunto de comandos de datos y una conexioacuten a una base de datos que se utilizan para

rellenar el DataSet y actualizar la base de datos Esta clase no se puede heredar

Espacio de nombres SystemDataOracleClient

Ensamblado SystemDataOracleClient (en systemdataoracleclientdll)

Sintaxis

C

C++

VB

Copiar

Declaration

Public NotInheritable Class OracleDataAdapter

Inherits DbDataAdapter

Implements IDbDataAdapter IDataAdapter ICloneable

Usage

Dim instance As OracleDataAdapter

J

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

JScript

Copiar

public final class OracleDataAdapter extends DbDataAdapter implements

IDbDataAdapter IDataAdapter

ICloneable

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 22: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2229

Comentarios

OracleDataAdapter sirve de puente entre un objeto DataSet y una base de datos para recuperar y

guardar datos OracleDataAdapter proporciona este puente utilizando el meacutetodo Fill para cargar datos

de la base de datos en DataSet y utilizando el meacutetodo Update para devolver al origen de datos los

cambios realizados en DataSet

Cuando OracleDataAdapter rellene un objeto DataSet crearaacute las tablas y columnas necesarias para los

datos devueltos si todaviacutea no existen Sin embargo la informacioacuten de clave principal no se incluiraacute en el

esquema creado impliacutecitamente a menos que la propiedad MissingSchemaAction se establezca en

AddWithKey Tambieacuten se puede hacer que OracleDataAdapter cree el esquema de DataSet incluida la

informacioacuten de clave principal antes de rellenarlo de datos mediante el meacutetodo FillSchema Para obtener

maacutes informacioacuten vea Agregar restricciones existentes a DataSet

Nota

De forma predeterminada los campos numeacutericos importados a un objeto DataTable con Fill se asignan a

objetos OracleNumber Es posible desbordar el objeto OracleNumber provocando que se inicie una

excepcioacuten de Oracle si se importa un valor numeacuterico no entero que sea demasiado grande o demasiado

preciso para las limitaciones de precisioacuten de OracleNumber Para obtener maacutes informacioacuten vea la

descripcioacuten de OracleNumber

OracleDataAdapter tambieacuten incluye las propiedades SelectCommand InsertCommand

DeleteCommand UpdateCommand y TableMappings para facilitar la carga y la actualizacioacuten de datos

El proveedor de datos de NET Framework para Oracle no admite instrucciones SQL por lotes Sin

embargo permite utilizar varios paraacutemetros de salida REF CURSOR para rellenar un objeto DataSet

cada uno en su propia DataTable Debe definir los paraacutemetros marcarlos como paraacutemetros de salida e

indicar que son tipos de datos REF CURSOR Tenga en cuenta que no se puede utilizar el meacutetodo

Update cuando OracleDataAdapter se rellena con paraacutemetros REF CURSOR devueltos por unprocedimiento almacenado porque Oracle no proporciona la informacioacuten necesaria para determinar

cuaacuteles son los nombres de tabla y de columna al ejecutar la instruccioacuten SQL En el siguiente ejemplo de

C se supone que se ha creado este procedimiento almacenado

Cree el siguiente paquete de Oracle en el servidor Oracle

other

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 23: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2329

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 24: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2429

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En el siguiente ejemplo de C se muestra coacutemo se puede obtener informacioacuten de la tabla y la columna

mediante el procedimiento almacenado

C

Copiar

GetConnectionString() returns a connection string for

the data source

string connString = GetConnectionString()

DataSet ds = new DataSet()

OracleConnection conn = new OracleConnection(connString)

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 25: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2529

OracleCommand cmd = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction =

ParameterDirectionOutput

OracleDataAdapter da = new OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables[Dept]Columns[Deptno]

dsTables[Emp]Columns[Deptno] false)

En el siguiente ejemplo de Visual Basic se muestra coacutemo utilizar OracleDataAdapter para rellenar un

DataSet mediante REF CURSOR de Oracle En estos ejemplos se utilizan tablas definidas en el esquema

ScottTiger de Oracle y se requiere el siguiente paquete PLSQL y concretamente el cuerpo del paquete

Para utilizar los ejemplos debe crearlos en el servidor

Cree el siguiente paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE CURSPKG AS

TYPE T_CURSOR IS REF CURSOR

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 26: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2629

DEPTCURSOR OUT T_CURSOR)

END CURSPKG

Cree el siguiente cuerpo del paquete de Oracle en el servidor Oracle

other

Copiar

CREATE OR REPLACE PACKAGE BODY CURSPKG AS

PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER

IO_CURSOR OUT T_CURSOR)

IS

V_CURSOR T_CURSOR

BEGIN

IF N_EMPNO ltgt 0 THEN

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

AND EMPEMPNO = N_EMPNO

ELSE

OPEN V_CURSOR FOR

SELECT EMPEMPNO EMPENAME DEPTDEPTNO DEPTDNAME

FROM EMP DEPT

WHERE EMPDEPTNO = DEPTDEPTNO

END IF

IO_CURSOR = V_CURSOR

END OPEN_ONE_CURSOR

PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 27: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2729

DEPTCURSOR OUT T_CURSOR)

IS

V_CURSOR1 T_CURSOR

V_CURSOR2 T_CURSOR

BEGIN

OPEN V_CURSOR1 FOR SELECT FROM EMP

OPEN V_CURSOR2 FOR SELECT FROM DEPT

EMPCURSOR = V_CURSOR1

DEPTCURSOR = V_CURSOR2

END OPEN_TWO_CURSORS

END CURSPKG

En este ejemplo de Visual Basic se ejecuta un procedimiento almacenado PLSQL que devuelve dos

paraacutemetros REF CURSOR y se rellena un DataSet con las filas devueltas

VB

Copiar

GetConnectionString() returns a connection string for

the data source

Dim connString As New String(GetConnectionString())

Dim ds As New DataSet()

Dim conn As New OracleConnection(connString)

Dim cmd As OracleCommand = connCreateCommand()

cmdCommandText = CURSPKGOPEN_TWO_CURSORS

cmdCommandType = CommandTypeStoredProcedure

cmdParametersAdd(EMPCURSOR OracleTypeCursor)Direction = _

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 28: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2829

ParameterDirectionOutput

cmdParametersAdd(DEPTCURSOR OracleTypeCursor)Direction = _

ParameterDirectionOutput

Dim da As New OracleDataAdapter(cmd)

daTableMappingsAdd(Table Emp)

daTableMappingsAdd(Table1 Dept)

daFill(ds)

dsRelationsAdd(EmpDept dsTables(Dept)Columns(Deptno) _

dsTables(Emp)Columns(Deptno) False)

Despueacutes de utilizar OracleDataAdapter para realizar una operacioacuten Fill o FillSchema la propiedad

DataColumnReadOnly devuelve siempre el valor false independientemente de si se puede o no

actualizar una columna ya que el servidor Oracle no proporciona esta informacioacuten

Jerarquiacutea de herencia

SystemObject

SystemMarshalByRefObject

SystemComponentModelComponent

SystemDataCommonDataAdapter

SystemDataCommonDbDataAdapter

SystemDataOracleClientOracleDataAdapter

Seguridad para subprocesos

Los miembros estaacuteticos puacuteblicos (Shared en Visual Basic) de este tipo son seguros para la ejecucioacuten de

subprocesos No se garantiza que los miembros de instancias sean seguros para la ejecucioacuten de

subprocesos

Plataformas

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema

Page 29: Ejemplos Oracle

5142018 Ejemplos Oracle - slidepdfcom

httpslidepdfcomreaderfullejemplos-oracle 2929

Windows 98 Windows 2000 SP4 Windows Millennium Windows Server 2003 Windows XP Media Center

Windows XP Professional x64 Windows XP SP2 Windows XP Starter Edition

NET Framework no admite todas las versiones de cada plataforma Para obtener una lista de las

versiones admitidas vea Requisitos del sistema