Ejemplos Oracle
Transcript of 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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