Está en la página 1de 538

Aplicaciones desarrolladas con

ASP Ajax y

jQuery con diferentes manejadores de BASE DE DATOS

s
á nc hez Flore
an S
Cristi

Aplicación de manejo de Imágenes y Videos - YouTube - Aplicación de Facturación Web


Aplicación del proceso de Banca Virtual - Aplicación del proyecto de Tienda Virtual - Aplicación del Carrito de Compra

www.detodoprogramacion.org
www.detodoprogramacion.org
Aplicaciones desarrolladas con ASP - AJAX y JQUERY
con diferentes manejadores de Base de Datos
Autor: Cris an Sánchez Flores
© Derecho de autor reservado
Empresa Editora Macro E.I.R.L.

© Derecho de edición, arte gráfico y diagramación reservados


Empresa Editora Macro E.I.R.L.

Edición a cargo de:


Empresa Editora Macro E.I.R.L.
Av. Paseo de la República 5613 – Miraflores
Lima - Perú
(511) 719-9700
ventas@editorialmacro.com
 h p://www.editorialmacro.com

Primera edición: Julio 2010 - 1000 ejemplares

Impreso en los Talleres Gráficos de


Empresa Editora Macro E.I.R.L.
Lima - Perú

ISBN Nº 978-612-4034-71-8
Hecho el Depósito Legal en la Biblioteca Nacional del Perú Nº 2010-08594

Prohibida la reproducción parcial o total, por cualquier medio o método de este libro sin
previa autorización de la Empresa Editora Macro E.I.R.L.

www.detodoprogramacion.org
CrisƟan Sánchez Flores

Trainer Oficial de Cer ficaciones Microso de la Universidad Nacional de Ingeniería (UNI), cuenta con
las cer ficaciones MCP, MCTS Windows ApplicaƟon y Web ApplicaƟon, MCPD Web ApplicaƟon y MCT.

Profesor de los cursos libres de la Universidad Nacional del Callao (Facultad de Ingeniería) y de la
Universidad Par cular César Vallejo (Facultad de Ingeniería de Sistemas); asimismo, Docente de los
cursos de Titulación (SIDET) de IDAT e Instructor de Cer ficaciones Microso y cursos libres en Sistemas
UNI – Facultad de Ingeniería de Sistemas de la UNI.

Desarrolló proyectos con empresas tales como el Banco Financiero, PRONAA, Banco Sudamericano,
EsSalud, Clínica Maison de Santé, Banco de la Nación, Banco Central de Reserva del Perú, Wester Union;
ha sido Jefe de Desarrollo de la Caja Metropolitana de Lima, Jefe de Sistemas en el Ins tuto Charles
Chaplin, Subgerente de Desarrollo y TIC´S de la Municipalidad de Los Olivos.

Consultor de Sistemas con amplia experiencia en el desarrollo de aplicaciones financieras, con


especialización en aplicaciones Web. Es también difusor de Tecnologías Microso a través de eventos en
comunidades de usuarios.

www.detodoprogramacion.org
Dedicatoria
A Dios, por nunca abandonarme y enseñarme a ser mejor cada día.

A la gente que trabaja por un sueldo bajito para darle de comer a sus
hijitos.

A Fa ma y Andre por darme fuerza e inspiración.

A mi familia, por ser única, especial y maravillosa, que Dios siempre los
bendiga.

www.detodoprogramacion.org
Agradecimiento
Un agradecimiento a las siguientes personas:

A Susan Mendizábal y a Juan Kuga, dos alumnos con un gran futuro de una
capacidad envidiable, que apoyaron este libro en forma incondicional.

A los alumnos del curso de Titulacion SIDET por generar la expecta va de


crear este libro.

www.detodoprogramacion.org
Introducción
Este libro ene un significado especial para mí, porque fue desarrollado con alumnos de diferentes
ins tuciones, que con sus preguntas, entendimos las expecta vas que ellos enen y pudimos resumir la
necesidad en lo que se refiere a desarrollo de Aplicaciones en WEB, no con ejemplos simples ni clásicos,
sino con aplica vos reales que ellos puedan entender y mejorarlo.

Asimismo, ene como función principal el desarrollo de diferentes aplicaciones, que pueden ser aplicadas
en empresas reales; quiere explicar cómo es la forma, la estructura y la metodología que se deben
u lizar en desarrollo de aplicaciones. También nos presenta una caracterís ca especial que ene como
contenido principal el desarrollo de aplicaciones reales. Este libro te presenta toda la experiencia de un
Analista y Programador con experiencia y las interrogantes de los alumnos que recién están empezando
este camino.

www.detodoprogramacion.org
Índice

Capítulo 1
Aplicación de manejo de Imágenes y Videos - Youtube ............................................................. 13
Aplicación - Proyecto Youtube ....................................................................................................13
Explicación de la Instalación y funcionamiento del aplica vo ....................................................34
Creación de la base de datos ..............................................................................................34

Capítulo 2
Aplicación del proceso de Banca Virtual .................................................................................. 243
Proceso de banca virtual ...........................................................................................................243
Creación de la clase de datos ..............................................................................................251
Creación de la clase negocios .............................................................................................253
Creación de la web forms de la aplicación ..........................................................................255
Página de error ...................................................................................................................280
Codificación de WebConfig ..................................................................................................283
Trabajando con Archivos de Tipo JQuery .............................................................................286
Cómo trabaja la Banca Virtual ............................................................................................289

Capítulo 3
Aplicación del Proyecto de Tienda Virtual ................................................................................ 299
Proyecto Tienda Virtual ‘TELEREDPERÚ’ ....................................................................................299
Descripción ..........................................................................................................................299
Usuario ................................................................................................................................299
Administra vo .....................................................................................................................299
Instalación del Proyecto .............................................................................................................300
Introducción ........................................................................................................................300
Programas necesarios para laa ejecución del sistema de uso .............................................300
Modelamiento de la Base de datos de una Tienda Virtual.........................................................302
Instalación del Servicio MYSQL...................................................................................................307
Restaurando la basde de datos del script al servidor MYSQL.....................................................310
Configurando el driver de MYSQL para la conexión con la base de datos..................................312

www.detodoprogramacion.org
Abriendo el proyecto en visual y cargando la página default.ASPX............................................314
Proceso de Construcción del Aplica vo .....................................................................................314
Manual de usuario .....................................................................................................................329

Capítulo 4
Aplicación del carrito de compra ............................................................................................. 305
Carrito de compra web ...............................................................................................................305
Definición.............................................................................................................................305
Creación del carrito de compra ...........................................................................................305
Creación de la capa de datos, en dad y negocio ................................................................362
Guía de referencia sobre la aplicación del carrito de compra ...................................................379
Instalación de Ajax......................................................................................................................382

Capítulo 5
Aplicación de copias masivas y manejo de imágenes ............................................................... 411
Aplica vo de copia masiva en WEB - SQLBULKCOPY .................................................................411
Qué es el SQLBULKCOPY .....................................................................................................411
Cómo trabaja el aplica vo ..................................................................................................423
Trabajando con BLOB en ASP (Manejo de gráficos)....................................................................425
Cómo trabaja el aplica vo BLOB ..........................................................................................426

Capítulo 6
Aplicación trabajando con Linq (ejemplos cortos) .................................................................... 447
Trabajando con LINQ .................................................................................................................447
Definición ............................................................................................................................447
Ejemplo de búsqueda u lizando LINQ ...............................................................................447
Programación que se elaboró para el funcionamiento correcto del LINQ ..........................457
Con nuando con LINQ ........................................................................................................463
Algunas observaciones para poder trabajar con LINQ.........................................................471
Realizando una tercera consulta con LINQ .........................................................................482
Ejemplo con LINQ - Consulta y mantenimiento .................................................................488
Ejemplos de LINQ con conexión a MYSQL ..........................................................................496

www.detodoprogramacion.org
Capítulo 7
Aplicación de Facturación Web ................................................................................................. 509
Ejemplo de concurrencias .........................................................................................................509
Aplicación de facturación en web ..............................................................................................517
Ingreso de usuario ..............................................................................................................517
Menú de opciones ..............................................................................................................517
Ingreso de nueva factura ....................................................................................................518
Consulta de facturas ...........................................................................................................522
Anular facturas ....................................................................................................................522

www.detodoprogramacion.org
CAPÍTULO
Aplicación de manejo de
1 Imágenes y Videos - YouTube

APLICACIÓN – PROYECTO YOUTUBE


Este so ware está diseñado para visualizar videos, votar a favor o en contra, comentar sobre ellos, crear
una cuenta dentro del si o web, personalizar la imagen que mostrará el usuario a los demás usuarios,
así como la información personal, intercambiar mensajes con otros usuarios, subir y descargar los
videos.

A lo largo de las aplicaciones, hemos tratado de ver todos los aspectos, y qué mejor que tratarlo con
una programadora muy analí ca y con gran futro en el mercado, estoy hablando de Susan Mendizábal,
alumna de tulación de una ins tución de pres gio, la cual me hizo ver un aspecto mucho más aplicado
que los alumnos requieren; gran apoyo de Susan. Ahora sí, empecemos:

A con nuación, pasamos a detallar cómo se trabaja dicho so ware.

La página principal es esta:

Como se puede ver, en la parte superior se captura la fecha del sistema, esta página nos permi rá
buscar videos o ver los que se nos presenta al lado derecho; también podremos acceder a la página de
registro o podremos ingresar.

www.detodoprogramacion.org
14 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Lo que haremos será ver un video de la lista.

Cuadro para buscar videos

Datos del Video

Información del video Votación y Descargar Lista de videos

En este caso, podemos ver cómo se nos muestra información sobre el video, ejemplo: Nro. de Visitas,
Puntos, el nombre del usuario a quien le pertenece el video, fecha, ver más videos del usuario, así
como algunos videos relacionados.

La opción de descargar y de votación a favor o en contra están deshabilitadas, porque sólo son para los
usuarios que estén registrados.

También:

Comentarios

Registrar Comentario

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 15

Como se ve, nos muestra información de los usuarios que han escrito su comentario; en este caso
no se muestra su imagen, su número de comentarios escritos, la fecha del comentario, ni su nombre
usuario con un link para ver información sobre su perfil.

La opción de subir comentario está deshabilitada porque aún no estamos registrados dentro del
sistema.

Ahora lo que haremos será ver los datos del usuario que registró este video, para ello haremos lo
siguiente:

Como se habrán dado cuenta, el nombre del usuario es un link.

Como se ve, nos muestra parte de los datos del usuario, así como una opción para ver sus videos.

www.detodoprogramacion.org
16 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Lo que haremos ahora será buscar un video.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 17

Al buscar se nos mostrará una lista de videos:

Ahora nos registraremos para ver qué más podemos hacer en el Si o Web, recordemos que lo antes
mostrado es el acceso de un usuario invitado.

www.detodoprogramacion.org
18 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

En la parte de datos de cuenta,


se nos pide que validemos
el nombre de usuario y el
correo electrónico para
poder ingresar, además de las
contraseñas. Por otro lado,
en la fecha de nacimiento se
encuentran validado los años
bisiestos.

Cuando hayamos validado el nombre del usuario y su correo, podemos ingresar, pero siempre será
necesario volver a validarlo, de lo contrario el botón grabar quedará deshabilitado.

Si las contraseñas no coinciden, se nos será informado.

Una vez registrado, no llevará a una página denominada ‘Página de Usuario’ donde se nos muestran
las siguientes opciones.

Aquí nos mostrará el número de mensajes nuevos que tenemos, en este caso como recién nos hemos
registrado no tenemos ningún mensaje.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 19

Lo que haremos será cambiar nuestra imagen.

Como ven, puede ser una imagen de extensión gif; en realidad, no importa la extensión de la imagen.

La imagen es un gif y sin ningún problema se puede ver.

www.detodoprogramacion.org
20 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Ahora con este mismo usuario vemos cómo el menú principal ha cambiado; en este caso tenemos el
canal de usuarios, veamos que encontramos aquí.

Son todos los usuarios conectados, y podemos visitar su perfil.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 21

Ahora sí se muestra la información completa del usuario, además podremos ver sus videos.

Ahora vemos cómo las opciones para votar y descargar el video son habilitadas, así como nuestra
imagen que se ve en todas las páginas.

Descarguemos el video:

www.detodoprogramacion.org
22 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Bueno, nos da a elegir si deseamos guardarlo o solamente visualizarlo; para la demostración lo


guardamos.

En este caso en el escritorio y, bueno, ahí lo vemos.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 23

Ahora podremos registrar nuestros comentarios.

www.detodoprogramacion.org
24 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Y ahí está con nuestra imagen recién subida y nos muestra que es nuestro primer comentario.

Bien, ahora cerramos sesión e ingresamos con un usuario an guo.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 25

Bueno, al ingresar nos envía a la pagina del usuario, aquí nos muestra que tenemos dos nuevos
mensajes, así que los leeremos.

Elegimos la opción mensajes:

www.detodoprogramacion.org
26 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Se nos mostrará un panel pequeño dentro del iframe, escogemos la opción mensajes recibidos para
ver nuestro mensaje, y se nos muestra dos aéreas: mensajes nuevos y todos los mensajes; en el
primero estarán los mensajes que no hemos leído, y en el otro todos los que ya leímos, leeremos el
primero.

Nos muestra los datos del mensaje, así como la opción de responder.

Antes de responder veamos qué pasó con nuestro mensaje. Ahora es considerado como an guo.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 27

Ahora veamos los mensajes que hemos enviado:

Podemos leerlos, o si no queremos que nadie los vea, podemos Eliminarlos, uno o los dos al mismo
empo; ahora estos serán eliminados sólo de nuestra bandeja, no de la del usuario que la recibe.

www.detodoprogramacion.org
28 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Y este será el resultado:

Ahora leamos un mensaje y respondamos.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 29

Como se ve, el nombre del usuario quedó grabado y no es necesario apuntarlo.

Una vez enviado, revisamos nuestros mensajes enviados y ahí está.

www.detodoprogramacion.org
30 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Bien, si deseamos escribirle a otro usuario podemos hacerlo, para ello está la opción escribir mensaje,
si no recordamos el nombre de usuario podemos ayudarnos con el botón de usuarios.

Botón
Solo nos permite
escoger un
usuario

Ahora podremos cambiar nuestra contraseña.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 31

Ahora revisaremos nuestro perfil.

Como se ve, en nuestro entorno ya no tenemos mensajes nuevos, y en nuestro perfil, los datos de
cuenta no pueden modificarse, todo lo demás sí.

Ahora veamos nuestros videos.

Nos permite ver


los detalles y darle
mantenimiento al
video

Se nos muestra todos nuestros videos, así como sus detalles, además de la opción de verlo.

Más abajo podemos darle mantenimiento, esto sólo será posible si escogemos la opción detalle en el
primer listado.

www.detodoprogramacion.org
32 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

También podremos eliminarlo y ya no será visto.

Ahora subamos un video.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 33

Para subirlo, lo primero es registrarlo; en este caso sólo deberán ser videos pequeños, con un máximo
de 25 s por video.

Si revisamos en mis videos, ahí lo tenemos.

www.detodoprogramacion.org
34 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Ahora veamos si a nuestro usuario Toñito le llegó el mensaje enviado por Suzan.

Lo lee, responde y lo elimina, pero sólo de su bandeja, porque mientras Suzan no lo elimine podrá
seguir leyéndolo.

EXPLICACIÓN DE LA INSTALACIÓN Y FUNCIONAMIENTO DEL APLICATIVO

Para poder llegar a esto hemos realizado los siguientes pasos:

CREACIÓN DE LA BASE DE DATOS.


Para este proyecto usaremos como motor de base de datos Oracle; en esta oportunidad será Oracle
Database 10g Express, para ello comenzaremos instalándolo:

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 35

Esperamos que cargue el programa para la instalación.

Una vez listo comenzamos la instalación:

www.detodoprogramacion.org
36 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Aceptamos el contrato.

Nos pide la ruta dónde instalar el programa, si desea puede personalizarla, pero la dejaremos por
defecto.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 37

Ahora nos requiere ingresar la contraseña que le será asignada al usuario administrador; en este caso
será system, ya que es igual al nombre del usuario administrador. Como todo programa nos pide
confirmarla para evitar así problemas posteriores (olvido de la contraseña), en caso no coincidir se nos
será adver do (todo en minúsculas).

Ahora sólo procedemos a instalar el so ware.

www.detodoprogramacion.org
38 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Esperamos:

Como vemos, está avanzando:

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 39

Bueno, demoró un poco pero ya está listo, dejamos por defecto la opción marcada para iniciar la Base
de Datos.

Esta es la pantalla de inicio:

www.detodoprogramacion.org
40 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Como se darán cuenta, su interfaz de trabajo es a través de una página web; ingresamos con nuestro
usuario system y, como recordamos, su clave es también system, ya saben todo en minúsculas.

Al ingresar esta será la pantalla de bienvenida:

Lo que haremos será crear un usuario con el que podamos trabajar para la creación de las tablas en la
BD; nuestro usuario será usuario y su clave, igualmente, usuario, fácil de recordar.

El usuario system es el único que puede crear usuarios.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 41

Seguiremos los siguientes pasos:

En la opción de administración, escogemos las opciones Database Users y Create User.

Después, colocamos la información de nuestro usuario y le asignamos todos los permisos, como se
muestra a con nuación:

www.detodoprogramacion.org
42 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Una vez creado, nos será informado de esta manera:

Bueno, ahora cerramos sesión con nuestro usuario.

Como se habrán dado cuenta, la interfaz es diferente al del SQL Server


2005, 2000 o al del 2008, por ello usaremos un pograma con una interfaz
más familiar; este programa es un auxiliar que nos permi rá conectarnos
a la Base de Datos. No es necesario instalarlo, es un ejecutable, existen
muchos en las páginas web que pueden ser descargados gratuitamente.

Al ingresar, nos pedirá que nos iden fiquemos con nuestro usuario; escogemos las opciones como se
ven a con nuacion:

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 43

Si por algún mo vo no ingresamos, ya sea por un error de conexción o porque no reconoce al usuario,
es necesario volver a iniciar el servicio de la base de datos; para ello hacemos lo siguiente:

Entonces se nos mostrará esta ventana, indicándonos que el servicio está iniciado:

www.detodoprogramacion.org
44 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Ingresamos y, la interfaz que se nos muestra será la siguiente:

Procedemos a crear las tablas de la Base de Datos.

En el menú escogemos File : New : SQL Window, que nos


permi rá crear un archivo de extención .sql y que, a su vez, nos
permi rá u lizar nuestros comandos de Transac-Sql para crear
las tablas. Una vez creado, guardamos el archivo y procedemos
a trabajar en la creación de las tablas.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 45

Esta es la creación de las tablas:

Como se puede, ver estamos creando las tablas Usuario y Mensajes, definiendo el nombre de cada
campo de la tabla, así como su po de dato, especificando que no se acepten datos nulos.

Cuando definimos un po de datos de po date y queremos asignarle la fecha del sistema por defecto,
colocamos el siguiente comando:

fec_usu date default sysdate,

Y si queremos que un campo tome un defecto por valor, haremos lo mismo que en el caso anterior,
sólo que ahora colocaremos lo que deseamos según cada caso.

nom_fot varchar(12) default ´Usuario.png´


est_men_env number (1) default 0

Ahora ingresaremos algunos datos en nuestra base de datos, en la tabla usuarios:

Como se podrán dar cuenta, cuando se ha definido un valor por default en la creacion de la tabla, sólo
es necesario ingresar la palabra default para el registro del dato.

www.detodoprogramacion.org
46 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Ahora, cuando se desea ingresar una fecha es necesario conver rla previamente, dándole el po de
formato de fecha.

to_ date(´27/01/1984´,´DD/MM/YYYY´)

Una vez terminada la creación del script, lo ejecutaremos para la creación de las tablas y el registro de
datos, sólo es necesario dar clic en el siguiente icono.

Cuando se hayan creado las tablas con éxito, nos mostrará el siguiente mensaje, dándonos a entender
que no existen errores. Cuando u lizamos este producto por primera vez, por lo general nos muestra
una ventana evidenciando un error, lo cual no ene mayor importancia.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 47

Para verificar la creación de las tablas sólo es necesario visualizar.

Ahora crearemos los procedimientos almacenados para realizar los mantenimientos necesarios a cada
una de las tablas; para ello, hay tener en cuenta que aquí debemos trabajar en paquetes que vendrían
a ser como esquemas, si nos referimos a SQL Server, donde serán creados los procedimientos.

Esta es la forma:

Si son obervadores, se habrán dado cuenta que en la tercera línea de código se está declarando un
po de dato, que nos servirá para los pocedimientos que nos devuelvan consultas o simples listados.

En las líneas posteriores se pueden ver cómo son declarados los procedimientos almacenados; cuando
estos reciben parámetros, es necesario asiginarles un po de dato al parámetro que se va a recibir.

Por ejemplo:
nom in usuario.nom_usu%Type,

www.detodoprogramacion.org
48 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Donde se especifica que el po de dato será igual que el campo de la tabla a la cual se hace refierencia.

Cuando son procedimientos que tendrán como resultando una consulta, siempre es necesario que un
parámetro sea enviado, así no requiera parámetro alguno dicho procedimiento.

Ejemplo:

En este caso, el procedimiento permi rá validar que el nick del usuario no existe ya en nuestros datos;
el orden del envío del parámetro iocursor in out micursor no ene mayor relevancia, puede ser
primero, segundo o tercero, eso no importa.

Si habrán notado en la primera línea de codigo del script, sabrán que esta parte sólo sirve para crear la
cabeza del paquete, por así llamarla, porque un paquete en Oracle está cons tuido por dos partes que
son: la cabeza o head y el cuerpo o body .

Cuando se termina cualquier sentencia es necesario colocar el “;”, es como el go en SQL Server, que es
para indicar el fin de una instrucción.

Para terminar de crear el head del paquete es necesario lo siguiente:

end paquete_usuario;

Lo más importante es saber que en el head se declaran todos los procedimientos que se van a crear, en
caso olvidáramos alguno, y a pesar de ello lo desarrollamos en el body, este no será creado y tampoco
será conciderado como error.

Y ahora comenzamos con la creacion del body. Recordemos que aquí se desarrollarán los
procedimientos declarados, que deberán ser iguales a como fueron declarados, es decir, el mismo
número de parámetros, el mismo po, el mismo orden.

Veamos como:

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 49

Por favor, no olvidar el slash de la parte superior, es importante; como se ve, el procedimiento lleva el
mismo nombre y el mismo Nro. de parámetros.

Pero todas las sentencias van encerradas en bloque que comienza con la sentencia :
is begin

Y termina con la siguiente:


end sp_nombre ;

Ahora explicaremos cómo crear los procedimientos.

Aquí creamos el primero, en el que tenemos que generar el siguiente código del registro en la tabla:

Primero abrimos nuestro cursor, porque ya sabemos que es necesario para las consultas, después
realizamos la consulta, usamos algunas funciones (substr, cast, max) y bueno los caracteres || para
concatenar una cadena.

En caso de INSERT

www.detodoprogramacion.org
50 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Es necesario que al final vaya la sentencia commit; para que la sentencia se ejecute al instante y permita
actualizar la base de datos de manera instantánea.

Ahora cuando sea un Update será de la misma manera:

Cuando hallamos terminado de desarrollar todos los procedimientos sólo será necesario colocar lo
siguiente, así especificaremos que ya se ha terminado la parte del body del paquete.
end paquete_usuario;
/

Después ejecutamos.

Si fue creado correctamente se nos mostrará de la siguiente manera, esto es sólo el head; si existe
error, se verá la imagen del paquete marcada con una x.

Ahora verificamos que el body también haya sido creado correctamente:

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 51

En caso de error es posible ubicarlo, para ello sólo debemos seguir los siguientes pasos:

Entonces, se nos mostrará el script de la creación y la línea que está generando este error.

Si no se muestra nada, sólo es necesario refrescar la BD de la siguiente manera:

Bueno, así procederemos con todos los paquetes.

www.detodoprogramacion.org
52 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Si se desea eliminar un paquete o una tabla, sólo es necesario hacer lo siguiente:

Nos pedirá que confirmemos.

Lo mismo se puede hacer con las tablas, la diferencia es que las tablas pueden ser restauradas una vez
eliminadas, mas no los paquetes.

En este caso eliminamos la tabla comentarios; si deseamos volver a restaurarla, sólo es necesario
visualizarla en el panel, en la carpeta Recycle Bin, o si se desea se podrá eliminar de manera defini va.

Para eliminar.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 53

Para restaurar.

Cuando escogamos esta opción, aparecerá esta ventana preguntándonos por el nuevo nombre, en
este caso lo dejaremos igual. Y listo, la tabla ya está nuevamente para ser u lizada.

Bueno, ahora se adjuntan todos los scrip de las tablas, sólo es necesario ejecutarlos.

---------------------------------------------------------
-------------------Base de Datos-------------------------
---------------------------------------------------------

create table Usuario(


cod_usu varchar(7) not null,
nom_usu varchar(50) not null,
ape_usu varchar(50) not null,
fec_nac date not null,
fec_usu date default sysdate,
cod_pais varchar(5) not null,
nick_usu varchar(20) not null,
pas_usu varchar(20) not null,
cor_usu varchar(50) not null,
fot_usu number(1) default 0, --0 = no tiene foto ,1 = tiene foto
est_con number(1) default 1, --1 = conectado , 0 = no conectado
est_usu number(1) default 0, --0 = activo ,1 = eliminado
nom_fot varchar(12) default 'Usuario.png'
);

www.detodoprogramacion.org
54 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

create table Mensajes(


cod_men varchar(8) not null,
asu_men varchar(20) not null,
cod_usu_rec varchar(7) not null,
cod_usu_env varchar(7) not null,
des_men varchar(1000) not null,
fec_men date default sysdate,
est_lei number(1) default 0, -- 0 = no leido , 1 = leido
est_men_rec number(1) default 0, -- 0 = activo , 1 = eliminado
est_men_env number(1) default 0 -- 0 = activo , 1 = eliminado

);

create table Comentarios(


cod_com varchar(8) not null,
cod_usu varchar(7) not null,
cod_vid varchar(8) not null,
des_com varchar(100) not null,
fec_com date default sysdate,
pun_com integer default 0, -- # puntos
est_com number(1) default 0 -- 0 = activo , 1 = removido
);

create table Videos(


cod_vid varchar(8) not null,
nom_vid varchar(100) not null,
dur_vid varchar(5) not null,
fec_vid date default sysdate,
num_vis integer default 0,
pun_vid integer default 0,
est_vid number(1) default 0, -- 0 = activo , 1 = removido
nick_usu varchar(20) not null ,
cod_gen varchar(5) not null
);

create table Genero(


cod_gen varchar(5) not null,
nom_gen varchar(20) not null,
est_gen number(1) default 0 -- 0 = activo , 1 = removido
);

create table Pais(


cod_pais varchar(5) not null,
nom_pais varchar(20) not null,
est_pais number(1) default 0 -- 0 = activo , 1 = removido
);

/* Ingresando Datos en las Tablas */

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 55

insert into usuario values ('US00001','Susanne Lizbeth','Mendizábal Beraún',


to_date('21/04/1989','DD/MM/YYYY'),default,'PA009',
'suzan','@susi','susanne_lizbeth@hotmail.com',
1,default,default,'US00001.gif');

insert into usuario values ('US00002','Hugo Cesar','Suma Cabezas',


to_date('27/01/1984','DD/MM/YYYY'),default,'PA009',
'tom cruise','@huguito','cibernauta@hotmail.com',
1,default,default,'US00002.gif');

insert into usuario values ('US00003','Antonio','Mendizábal Beraún',


to_date('20/04/1992','DD/MM/YYYY'),default,'PA009',
'toñito','rojo','toñito@hotmail.com',
1,default,default,'US00003.gif');

insert into usuario values ('US00004','Carlos','Suma Cabezas',


to_date('10/10/1980','DD/MM/YYYY'),default,'PA009',
'carlitos','carlos','carlitos@hotmail.com',
1,default,default,default);

insert into usuario values ('US00005','Elena','Rojas Alvarez',


to_date('10/08/1970','DD/MM/YYYY'),default,'PA004',
'elena','elena','elena@hotmail.com',
default,default,default,default);

insert into usuario values ('US00006','Paula','Esteban Rosas',


to_date('18/06/1978','DD/MM/YYYY'),default,'PA001',
'paula','paula','paula@hotmail.com',
default,default,default,default);

insert into usuario values ('US00007','Dora','Diaz Poma',


to_date('11/01/1968','DD/MM/YYYY'),default,'PA001',
'dora','dora','dora@hotmail.com',
default,default,default,default);

insert into usuario values ('US00008','Ricardo','Rosas Beraún',


to_date('14/06/1978','DD/MM/YYYY'),default,'PA001',
'ricardo','ricardo','ricardo@hotmail.com',
default,default,default,default);

insert into usuario values ('US00009','Orlando','Nieto Palmas',


to_date('01/09/1990','DD/MM/YYYY'),default,'PA003',
'orlando','orlando','orlando@hotmail.com',
default,default,default,default);

insert into usuario values ('US00010','Renato','Cisneros Veliz',


to_date('25/03/1975','DD/MM/YYYY'),default,'PA005',
'renato','renato','renato@hotmail.com',
default,default,default,default);

www.detodoprogramacion.org
56 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

insert into usuario values ('US00011','Jesús','Veliz Tafur',


to_date('29/06/1975','DD/MM/YYYY'),default,'PA005',
'jesus','jesus','jesus@hotmail.com',
default,default,default,default);

insert into usuario values ('US00012','Juan Carlos','Tafur Bruce',


to_date('07/12/1965','DD/MM/YYYY'),default,'PA006',
'juan','juan','juan@hotmail.com',
default,default,default,default);

insert into usuario values ('US00013','Catherine','Lanseros Cisneros',


to_date('11/06/1972','DD/MM/YYYY'),default,'PA007',
'caty','caty','caty@hotmail.com',
default,default,default,default);

/* ------------------------------------------------------------------------ */

INSERT into mensajes values('ME000001','Saludos','US00001','US00002',


'Que planes para el fin de semana, me llamas cualquier cosa',
default,default,default,default);

INSERT into mensajes values('ME000002','Respuesta','US00002','US00001',


'Ninguna ,solo estudiar hasta tarde',
default,default,default,default);

INSERT into mensajes values('ME000004','Saludos','US00009','US00001',


'Hola como va todo,viste los ultimos videos',
default,default,default,default);

INSERT into mensajes values('ME000005','Saludos','US00001','US00009',


'Bien todo ,voy a comprar unas zapatillas nuevas',
default,default,default,default);

INSERT into mensajes values('ME000006','Saludos','US00013','US00005',


'Que paso ayer te espere ,pero no llegaste ,esta todo bien',
default,default,default,default);

INSERT into mensajes values('ME000007','Respuesta','US00005','US00013',


'Disculpa no pude,se me cruzo otra cosa en la agenda',
default,default,default,default);

INSERT into mensajes values('ME000008','Saludos','US00008','US00010',


'Que planes para el fin de semana, me llamas cualquier cosa',
default,default,default,default);

------------------------------------------------------------------------------

insert into Pais values ('PA001','Argentina',default);


insert into Pais values ('PA002','Bolivia' ,default);
insert into Pais values ('PA003','Brasil' ,default);
insert into Pais values ('PA004','Colombia' ,default);
insert into Pais values ('PA005','Chile' ,default);

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 57

insert into Pais values ('PA006','Ecuador' ,default);


insert into Pais values ('PA007','Uruguay' ,default);
insert into Pais values ('PA008','Paraguay' ,default);
insert into Pais values ('PA009','Perú' ,default);
insert into Pais values ('PA010','Venezuela',default);
insert into Pais values ('PA011','México' ,default);
insert into Pais values ('PA012','Cánada' ,default);

------------------------------------------------------------------------------

insert into Genero values ('GE001','Deportes' ,default);


insert into Genero values ('GE002','Accidentes' ,default);
insert into Genero values ('GE003','Series' ,default);
insert into Genero values ('GE004','Noticias' ,default);
insert into Genero values ('GE005','Documentales',default);
insert into Genero values ('GE006','Musicales' ,default);
insert into Genero values ('GE007','Bromas' ,default);
insert into Genero values ('GE008','Novelas' ,default);
insert into Genero values ('GE009','Dibujos' ,default);
insert into Genero values ('GE010','Tecnologia' ,default);
insert into Genero values ('GE011','Peliculas' ,default);
insert into Genero values ('GE012','Detrás de Cámaras' ,default);
insert into Genero values ('GE013','Varios' ,default);

------------------------------------------------------------------------------

insert into Videos values ('VI000001','AMIGAS Y RIVALES','0:27',default,default,de


fault,default,'suzan','GE008');

insert into Videos values ('VI000002','MUNDO DE HOY','0:55',default,default,defaul


t,default,'tom cruise','GE005');

insert into Videos values ('VI000003','JUGADAZA','1:50',default,


default,default,default,'tom cruise','GE001');

insert into Videos values ('VI000004','LOS SIMPSON BALL RAP','1:59',default,defaul


t,default,default,'suzan','GE003');

insert into Videos values ('VI000005','LOS SIMPSON PELEA DE HOMERO','0:52',default


,default,default,default,'suzan','GE003');

insert into Videos values ('VI000006','MENSAJES SUBLIMINALES','0:47',default,defau


lt,default,default,'toñito','GE005');

insert into Videos values ('VI000007','LOS SIMPSON MENSAJES SUBLIMINALES


1','0:28',default,default,default,default,'suzan','GE006');

insert into Videos values ('VI000008','LOS SIMPSON GOLPE EN LA NUCA','0:10',defaul


t,default,default,default,'toñito','GE008');

insert into Videos values ('VI000009','GRUPO ALBORADA 1','0:59',default,default,de


fault,default,'tom cruise','GE006');

www.detodoprogramacion.org
58 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

insert into Videos values ('VI000010','GRUPO ALBORADA 2','0:07',default,default,de


fault,default,'toñito','GE006');

insert into Videos values ('VI000011','LOS SIMPSON VOY PARA AYA','0:11',default,de


fault,default,default,'toñito','GE006');

insert into Videos values ('VI000012','LOS SIMPSON MENSAJES SUBLIMINALES


1','0:20',default,default,default,default,'renato','GE006');

insert into Videos values ('VI000013','SODA STEREO 1','0:20',default,default,defau


lt,default,'toñito','GE005');

insert into Videos values ('VI000014','SODA STEREO 2','0:05',default,default,defau


lt,default,'toñito','GE003');

insert into Videos values ('VI000015','LOS SIMPSON','0:05',default,default,default


,default,'toñito','GE003');

/*--------------------------------------------------------------------------*/

insert into Comentarios values ('CO000001','US00001','VI000001','Esta bonito


tu video',default,default,default);

insert into Comentarios values ('CO000002','US00002','VI000001','no me gusta esa


novela',default,default,default);

insert into Comentarios values ('CO000003','US00003','VI000001','ya lo vi


antes,pero no me gusta',default,default,default);

insert into Comentarios values ('CO000004','US00004','VI000001','a mi si me gusta


la novela',default,default,default);

insert into Comentarios values ('CO000005','US00005','VI000001','ahi estan jovenes


las actrices',default,default,default);

insert into Comentarios values ('CO000006','US00006','VI000002','Que bonito tu


video',default,default,default);

insert into Comentarios values ('CO000007','US00007','VI000002','Uhmmm,


interesante',default,default,default);

insert into Comentarios values ('CO000008','US00008','VI000002','Asu como ha


cambiado el planeta',default,default,default);

insert into Comentarios values ('CO000009','US00009','VI000002','Como tomaste el


video',default,default,default);

insert into Comentarios values ('CO000010','US00010','VI000002','Me gusto


mucho',default,default,default);

insert into Comentarios values ('CO000011','US00011','VI000002','Que significan las


machas',default,default,default);

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 59

insert into Comentarios values ('CO000012','US00012','VI000003','Ese partido no se


olvida asi por si',default,default,default);

insert into Comentarios values ('CO000013','US00013','VI000003','No saben como


grite el gol',default,default,default);

insert into Comentarios values ('CO000014','US00001','VI000003','Si asi jugaran


siempre ,estariamos en el mundial',default,default,default);

insert into Comentarios values ('CO000015','US00002','VI000003','Casi lloro de la


emoción',default,default,default);

insert into Comentarios values ('CO000016','US00003','VI000004','Siempre los


simpson',default,default,default);

insert into Comentarios values ('CO000017','US00004','VI000004','Mi idolo


Homero',default,default,default);

insert into Comentarios values ('CO000018','US00005','VI000004','ja,ja,ja,ja que


gracioso',default,default,default);

insert into Comentarios values ('CO000019','US00006','VI000004','Cuantos años


tiene los simpson',default,default,default);

insert into Comentarios values ('CO000020','US00007','VI000005','Mismo Rocky esta


Homero',default,default,default);

insert into Comentarios values ('CO000021','US00008','VI000005','Ese Homero , con


esa pinta ,se la dio de valiente ',default,default,default);

insert into Comentarios values ('CO000022','US00009','VI000005','Y que paso con pe


lea',default,default,default);

insert into Comentarios values ('CO000023','US00010','VI000005','Que risa ,no


podia subir al ring',default,default,default);

insert into Comentarios values ('CO000024','US00011','VI000006','Hay muchas mas


cosas en los simpson',default,default,default);

insert into Comentarios values ('CO000025','US00012','VI000006','Asu ,y como te


diste cuenta',default,default,default);

insert into Comentarios values ('CO000026','US00013','VI000006','Oye mas videos


sobre ese tema',default,default,default);

insert into Comentarios values ('CO000027','US00001','VI000006','Siempre hacen


cosas sobre ese tema',default,default,default);

insert into Comentarios values ('CO000028','US00002','VI000007','Se parece a otro


video que vi',default,default,default);

insert into Comentarios values ('CO000029','US00003','VI000007','Ese video ,ya lo


vi antes',default,default,default);

www.detodoprogramacion.org
60 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

insert into Comentarios values ('CO000030','US00004','VI000008','Chevere tu video'


,default,default,default);

insert into Comentarios values ('CO000031','US00005','VI000008','No me gustan los


simpson',default,default,default);

insert into Comentarios values ('CO000032','US00004','VI000009','Bonita la musica


latinoamerica',default,default,default);

insert into Comentarios values ('CO000033','US00005','VI000009','Ese video donde


lo filmaron',default,default,default);

insert into Comentarios values ('CO000034','US00004','VI000010','Me gusta su vesti


menta',default,default,default);

insert into Comentarios values ('CO000035','US00005','VI000010','Que bonita música


',default,default,default);

Asimismo, los paquetes por cada una de las tablas.

Paquete Usuario
----------------------------------------------------------------------------------
----------------------------------- Paquete Usuario ------------------------------
----------------------------------------------------------------------------------

create or replace package paquete_usuario


as
type micursor is ref cursor;

procedure sp_generar_usuario(
iocursorin out micursor
);

procedure sp_graba_usuario(
cod in usuario.cod_usu%Type , nom in usuario.nom_usu%Type,
ape in usuario.ape_usu%Type , fena in usuario.fec_nac%Type,
pai in usuario.cod_pais%Type , nick in usuario.nick_usu%Type ,
pass in usuario.pas_usu%Type , corr in usuario.cor_usu%Type
);

procedure sp_busca_nick(
nick in usuario.nick_usu%Type , iocursor in out micursor
);

procedure sp_busca_correo(
corr in usuario.cor_usu%Type , iocursor in out micursor
);

procedure sp_actualiza_usuario(
nick in usuario.nick_usu%Type , nom in usuario.nom_usu%Type,
ape in usuario.ape_usu%Type , fena in usuario.fec_nac%Type,

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 61

pai in usuario.cod_pais%Type
);

procedure sp_conf_pass_usua(
nick in usuario.nick_usu%Type , pass in usuario.pas_usu%Type ,
iocursor in out micursor
);

procedure sp_act_pass_usuario(
nick in usuario.nick_usu%Type , pass in usuario.pas_usu%Type
);

procedure sp_usuario_conectados(
iocursor in out micursor
);

procedure sp_perfil_usuario(
nick in usuario.nick_usu%Type , iocursor in out micursor
);

procedure sp_ingreso_usuario(
nick in usuario.nick_usu%Type , pass in usuario.pas_usu%Type,
iocursor in out micursor
);

procedure sp_est_con_usuario(
nick in usuario.nick_usu%Type ,est in usuario.est_con%Type
);

procedure sp_act_foto_usu(
nick in usuario.nick_usu%Type , est in usuario.fot_usu%Type,
fot in usuario.nom_fot%Type
);

procedure sp_elim_usuario(
nick in usuario.nick_usu%Type , est in usuario.est_usu%Type
);

procedure sp_lista_usuario(
iocursor in out micursor
);

procedure sp_lista_correo(
iocursor in out micursor ,nick in usuario.nick_usu%Type
);

end paquete_usuario;

/
create or replace package body paquete_usuario
as
-------------------------------------------------------------------------------

www.detodoprogramacion.org
62 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

procedure sp_generar_usuario(iocursor in out micursor )


is begin

open iocursor for


select 'US' || substr(cast(substr(max(cod_usu),3,5)as int)+100001,2,5)
as cod from usuario;

end sp_generar_usuario;

-------------------------------------------------------------------------------

procedure sp_graba_usuario(
cod in usuario.cod_usu%Type , nom in usuario.nom_usu%Type,
ape in usuario.ape_usu%Type , fena in usuario.fec_nac%Type,
pai in usuario.cod_pais%Type , nick in usuario.nick_usu%Type ,
pass in usuario.pas_usu%Type , corr in usuario.cor_usu%Type
)is begin

insert into usuario values (cod,nom,ape,fena,default,pai,nick,pass,corr,


default,default,default,default);
commit;
end sp_graba_usuario;

----------------------------------------------------------------------------------

procedure sp_busca_nick(
nick in usuario.nick_usu%Type , iocursor in out micursor
)is begin

open iocursor for


select cod_usu from usuario where nick_usu = nick;

end sp_busca_nick;

----------------------------------------------------------------------------------

procedure sp_busca_correo(
corr in usuario.cor_usu%Type , iocursor in out micursor
)is begin

open iocursor for


select cod_usu from usuario where cor_usu = corr;

end sp_busca_correo;

----------------------------------------------------------------------------------

procedure sp_actualiza_usuario(
nick in usuario.nick_usu%Type , nom in usuario.nom_usu%Type,
ape in usuario.ape_usu%Type , fena in usuario.fec_nac%Type,
pai in usuario.cod_pais%Type
)is begin

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 63

update usuario set nom_usu=nom,ape_usu=ape,fec_nac=fena,cod_pais=pai


where nick_usu=nick;
commit;

end sp_actualiza_usuario;

---------------------------------------------------------------------------------

procedure sp_conf_pass_usua(
nick in usuario.nick_usu%Type , pass in usuario.pas_usu%Type ,
iocursor in out micursor
)is begin

open iocursor for


select cod_usu from usuario where nick_usu = nick and pas_usu = pass ;

end sp_conf_pass_usua;

----------------------------------------------------------------------------------

procedure sp_act_pass_usuario(
nick in usuario.nick_usu%Type , pass in usuario.pas_usu%Type
)is begin

update usuario set usuario.pas_usu=pass where nick_usu = nick ;


commit;

end sp_act_pass_usuario;

---------------------------------------------------------------------------------

procedure sp_usuario_conectados(
iocursor in out micursor
)is begin

open iocursor for


select usuario.fot_usu,usuario.nom_fot,usuario.nick_usu,(select pais.nom_pais
from pais where pais.cod_pais=usuario.cod_pais) as nom_pais
from usuario where usuario.est_con = 1;

end sp_usuario_conectados;

--------------------------------------------------------------------------------

procedure sp_perfil_usuario(
nick in usuario.nick_usu%Type , iocursor in out micursor
)is begin

open iocursor for


select fot_usu,nom_fot,nom_usu,ape_usu,fec_nac,(select pais.nom_pais from
pais where pais.cod_pais=usuario.cod_pais) as nom_pais, cor_usu,
nick_usu,fec_usu from usuario where nick_usu=nick;

www.detodoprogramacion.org
64 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

end sp_perfil_usuario;

----------------------------------------------------------------------------------

procedure sp_ingreso_usuario(
nick in usuario.nick_usu%Type , pass in usuario.pas_usu%Type,
iocursor in out micursor
)is begin

open iocursor for


select nick_usu from usuario where nick_usu=nick and pas_usu=pass and
est_usu=0;

end sp_ingreso_usuario;

----------------------------------------------------------------------------------

procedure sp_est_con_usuario(
nick in usuario.nick_usu%Type ,est in usuario.est_con%Type
)is begin

update usuario set usuario.est_con =est where usuario.nick_usu=nick ;


commit;

end sp_est_con_usuario;

----------------------------------------------------------------------------------

procedure sp_act_foto_usu(
nick in usuario.nick_usu%Type , est in usuario.fot_usu%Type,
fot in usuario.nom_fot%Type
)is begin

update usuario set usuario.fot_usu=est ,usuario.nom_fot=fot


where usuario.nick_usu=nick;
commit;

end sp_act_foto_usu;

----------------------------------------------------------------------------------
procedure sp_elim_usuario(
nick in usuario.nick_usu%Type , est in usuario.est_usu%Type
)is begin

update usuario set usuario.est_usu=est where usuario.nick_usu=nick;


commit;

end sp_elim_usuario;

---------------------------------------------------------------------------------

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 65

procedure sp_lista_usuario(
iocursor in out micursor
)is begin

open iocursor for


select nick_usu from usuario where usuario.est_usu=0;

end sp_lista_usuario;

----------------------------------------------------------------------------------

procedure sp_lista_correo(
iocursor in out micursor ,nick in usuario.nick_usu%Type
)is begin

open iocursor for


select nick_usu,cor_usu from usuario where usuario.nick_usu=nick;

end sp_lista_correo;

end paquete_usuario;
/

Paquete Mensajes

CREATE OR REPLACE package paquete_mensajes


as
type micursor is ref cursor;

procedure sp_generar_mensaje(
iocursor in out micursor
);

procedure sp_graba_mensaje(
cod in mensajes.cod_men%Type ,asu in mensajes.asu_men%Type,
usu_rec in mensajes.cod_usu_rec%Type,
usu_env in mensajes.cod_usu_env%Type , men in mensajes.des_men%Type
);

procedure sp_lista_mensajes_nuevos(
usu in mensajes.cod_usu_rec%Type ,iocursor in out micursor
);

procedure sp_lista_mensajes_todos(
usu in mensajes.cod_usu_rec%Type ,iocursor in out micursor
);

procedure sp_lista_mensajes_escritos(
usu in mensajes.cod_usu_env%Type ,iocursor in out micursor
);

procedure sp_eliminar_mensajes_rec(

www.detodoprogramacion.org
66 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

cod in mensajes.cod_men%Type,usu in mensajes.cod_usu_rec%Type


);

procedure sp_eliminar_mensajes_esc(
cod in mensajes.cod_men%Type,usu in mensajes.cod_usu_env%Type
);

procedure sp_det_men_env(
cod in mensajes.cod_men%Type,usu in mensajes.cod_usu_env%Type,
iocursor in out micursor
);

procedure sp_det_men_rec(
cod in mensajes.cod_men%Type,usu in mensajes.cod_usu_rec%Type,
iocursor in out micursor
);

procedure sp_act_mensajes_leido(
cod in mensajes.cod_men%Type,usu in mensajes.cod_usu_rec%Type
);
end paquete_mensajes;

/
CREATE OR REPLACE package body paquete_mensajes
as

----------------------------------------------------------------------------------

procedure sp_generar_mensaje(iocursor in out micursor)


is begin

open iocursor for --select * from mensajes;


select 'ME' || substr(cast(substr(max(cod_men),3,8)as int)+10000001,3,8)
as cod from mensajes;

end sp_generar_mensaje;

----------------------------------------------------------------------------------

procedure sp_graba_mensaje(
cod in mensajes.cod_men%Type ,asu in mensajes.asu_men%Type,
usu_rec in mensajes.cod_usu_rec%Type,
usu_env in mensajes.cod_usu_env%Type , men in mensajes.des_men%Type
)is begin

INSERT into mensajes values( cod , asu , usu_rec , usu_env , men ,


default , default , default , default );
commit;
end sp_graba_mensaje;

------------------------------------------------------------------------------

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 67

procedure sp_lista_mensajes_nuevos(
usu in mensajes.cod_usu_rec%Type ,iocursor in out micursor
)is begin

open iocursor for


select mensajes.cod_men,usuario.nick_usu , mensajes.asu_men,
mensajes.fec_men from mensajes , usuario where
usuario.cod_usu=mensajes.cod_usu_env
and mensajes.cod_usu_rec=usu and mensajes.est_lei=0 ;

end sp_lista_mensajes_nuevos;

----------------------------------------------------------------------------------

procedure sp_lista_mensajes_todos(
usu in mensajes.cod_usu_rec%Type ,iocursor in out micursor
)is begin

open iocursor for


select mensajes.cod_men,usuario.nick_usu , mensajes.asu_men, mensajes.fec_men
from mensajes , usuario where usuario.cod_usu=mensajes.cod_usu_env
and mensajes.cod_usu_rec = usu and mensajes.est_lei=1
and mensajes.est_men_rec = 0
order by mensajes.fec_men asc ;

end sp_lista_mensajes_todos;

----------------------------------------------------------------------------------

procedure sp_lista_mensajes_escritos(
usu in mensajes.cod_usu_env%Type ,iocursor in out micursor
)is begin

open iocursor for


select mensajes.cod_men,usuario.nick_usu , mensajes.asu_men, mensajes.fec_men
from mensajes , usuario where usuario.cod_usu=mensajes.cod_usu_rec
and mensajes.cod_usu_env=usu and mensajes.est_men_env=0;

end sp_lista_mensajes_escritos;

----------------------------------------------------------------------------------

procedure sp_eliminar_mensajes_rec(
cod in mensajes.cod_men%Type,usu in mensajes.cod_usu_rec%Type
)is begin

update mensajes set mensajes.est_men_rec=1 where mensajes.cod_men=cod


and mensajes.cod_usu_rec=usu;
commit;

end sp_eliminar_mensajes_rec;
----------------------------------------------------------------------------------

www.detodoprogramacion.org
68 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

procedure sp_eliminar_mensajes_esc(
cod in mensajes.cod_men%Type,usu in mensajes.cod_usu_env%Type
)is begin

update mensajes set mensajes.est_men_env=1 where mensajes.cod_men=cod


and mensajes.cod_usu_env=usu;
commit;

end sp_eliminar_mensajes_esc;

----------------------------------------------------------------------------------

procedure sp_det_men_env(
cod in mensajes.cod_men%Type,usu in mensajes.cod_usu_env%Type,
iocursor in out micursor
)is begin

open iocursor for


select usuario.nick_usu , mensajes.asu_men, mensajes.fec_men ,mensajes.des_men
from mensajes , usuario where usuario.cod_usu=mensajes.cod_usu_rec
and mensajes.cod_men=cod and mensajes.cod_usu_env=usu ;

end sp_det_men_env;

----------------------------------------------------------------------------------
procedure sp_det_men_rec(
cod in mensajes.cod_men%Type,usu in mensajes.cod_usu_rec%Type,
iocursor in out micursor
)is begin

open iocursor for


select usuario.nick_usu , mensajes.asu_men, mensajes.fec_men ,mensajes.des_men
from mensajes , usuario where usuario.cod_usu=mensajes.cod_usu_env
and mensajes.cod_men=cod and mensajes.cod_usu_rec=usu ;

end sp_det_men_rec;

---------------------------------------------------------------------------------
procedure sp_act_mensajes_leido(
cod in mensajes.cod_men%Type,usu in mensajes.cod_usu_rec%Type
)is begin

update mensajes set mensajes.est_lei=1 where mensajes.cod_men=cod and


mensajes.cod_usu_rec=usu;
commit;

end sp_act_mensajes_leido;

----------------------------------------------------------------------------------
end paquete_mensajes;
/

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 69

Paquete Videos
create or replace package paquete_videos
as
type micursor is ref cursor;

procedure sp_genera_videos(
iocursor in out micursor
);

procedure sp_listar_videos_todos(
iocursor in out micursor
);

procedure sp_busca_video(
nom in videos.nom_vid%Type , iocursor in out micursor
);

procedure sp_busca_titulo(
cod in videos.nom_vid%Type , iocursor in out micursor
);

procedure sp_graba_video(
cod in videos.nom_vid%Type , nom in videos.nom_vid%Type,
dur in videos.dur_vid%Type , usu in videos.nick_usu%Type,
gen in videos.cod_gen%Type
);

procedure sp_act_ptos(
cod in videos.cod_vid%Type ,pto in videos.pun_vid%Type
);

procedure sp_act_vis(
cod in videos.cod_vid%Type ,vis in videos.num_vis%Type
);

procedure sp_vid_usuario (
nick in videos.nick_usu%Type,iocursor in out micursor
);

procedure sp_usuario_vid (
cod in videos.cod_vid%Type,iocursor in out micursor
);

procedure sp_det_video (
cod in videos.cod_vid%Type,iocursor in out micursor
);

procedure sp_actualiza_video(
cod in videos.cod_vid%Type , nom in videos.nom_vid%Type,
gen in videos.cod_gen%Type
);

www.detodoprogramacion.org
70 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

procedure sp_elimina_video(
cod in videos.cod_vid%Type
);

end paquete_videos;

/
create or replace package body paquete_videos
as

----------------------------------------------------------------------------------

procedure sp_genera_videos(iocursor in out micursor )


is begin

open iocursor for


select 'VI' || substr(cast(substr(max(cod_vid),3,6)as int)+1000001,2,6)
as cod from videos;

end sp_genera_videos;

---------------------------------------------------------------------------------

procedure sp_listar_videos_todos(iocursor in out micursor)


is
begin
open iocursor for
select cod_vid,nom_vid from videos where videos.est_vid=0 order by
cod_vid ;

end sp_listar_videos_todos;

---------------------------------------------------------------------------------

procedure sp_busca_video(
nom in videos.nom_vid%Type , iocursor in out micursor
)is begin
open iocursor for
select cod_vid,nom_vid from videos where nom_vid like '%'||nom||'%'
and videos.est_vid=0;

end sp_busca_video;

----------------------------------------------------------------------------------

procedure sp_busca_titulo(
cod in videos.nom_vid%Type , iocursor in out micursor
)is begin

open iocursor for


select nom_vid from videos where cod_vid=cod and videos.est_vid=0;

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 71

end sp_busca_titulo;

----------------------------------------------------------------------------------

procedure sp_graba_video(
cod in videos.nom_vid%Type , nom in videos.nom_vid%Type,
dur in videos.dur_vid%Type , usu in videos.nick_usu%Type,
gen in videos.cod_gen%Type
)is begin

insert into Videos values (cod,nom,dur,default,default,default,default,usu,gen);


commit;

end sp_graba_video;

---------------------------------------------------------------------------------

procedure sp_act_ptos(
cod in videos.cod_vid%Type ,pto in videos.pun_vid%Type
)is begin

update videos set videos.pun_vid=pto where videos.cod_vid=cod;


commit;

end sp_act_ptos;

---------------------------------------------------------------------------------

procedure sp_act_vis(
cod in videos.cod_vid%Type ,vis in videos.num_vis%Type
)is begin

update videos set videos.num_vis=vis where videos.cod_vid=cod;


commit;

end sp_act_vis;

---------------------------------------------------------------------------------

procedure sp_vid_usuario (
nick in videos.nick_usu%Type,iocursor in out micursor
)is begin

open iocursor for


select cod_vid,nom_vid,dur_vid,fec_vid,num_vis,pun_vid,nom_gen
from videos,genero where videos.cod_gen=genero.cod_gen
and videos.nick_usu=nick and videos.est_vid=0 order by cod_vid;

end sp_vid_usuario;

--------------------------------------------------------------------------------

www.detodoprogramacion.org
72 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

procedure sp_usuario_vid (
cod in videos.cod_vid%Type,iocursor in out micursor
)is begin

open iocursor for


select videos.nick_usu from videos where videos.cod_vid=cod
and videos.est_vid=0;
end sp_usuario_vid;

----------------------------------------------------------------------------------

procedure sp_det_video (
cod in videos.cod_vid%Type,iocursor in out micursor
)is begin

open iocursor for


select * from videos where videos.cod_vid=cod and videos.est_vid=0;
end sp_det_video;

---------------------------------------------------------------------------------

procedure sp_actualiza_video(
cod in videos.cod_vid%Type , nom in videos.nom_vid%Type,
gen in videos.cod_gen%Type
)is begin

update videos set videos.nom_vid=nom,videos.cod_gen=gen where


videos.cod_vid=cod ;
commit;

end sp_actualiza_video;

---------------------------------------------------------------------------------

procedure sp_elimina_video(
cod in videos.cod_vid%Type
)is begin

update videos set videos.est_vid=1 where videos.cod_vid=cod;


commit;
end sp_elimina_video;

----------------------------------------------------------------------------------

end paquete_videos;
/

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 73

Paquete Pais
----------------------------------------------------------------------------------
----------------------------------- Paquete Pais----------------------------------
---------------------------------------------------------------------------------
create or replace package paquete_pais
as
type micursor is ref cursor;

procedure sp_generar_pais(
iocursor in out micursor
);

procedure sp_graba_pais(
cod in pais.cod_pais%Type, nom in pais.nom_pais%Type
);

procedure sp_actualiza_pais(
cod in pais.cod_pais%Type, nom in pais.nom_pais%Type,
est in pais.est_pais%Type
);

procedure sp_listar_pais_todos(
iocursor in out micursor
);

procedure sp_lista_pais_activos(
iocursor in out micursor
);

procedure sp_busca_pais(
iocursor in out micursor,nom in pais.nom_pais%Type
);

end paquete_pais;
/

create or replace package body paquete_pais


as

----------------------------------------------------------------------------------

procedure sp_generar_pais( iocursor in out micursor


)
is begin

open iocursor for


select 'PA' || substr(cast(substr(max(cod_pais),3,3)as int)+1001,2,3)
as cod from pais;

end sp_generar_pais;

-------------------------------------------------------------------------------------

www.detodoprogramacion.org
74 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

procedure sp_graba_pais(
cod in pais.cod_pais%Type,nom in pais.nom_pais%Type
)
is begin

insert into pais values(cod,nom,default);


commit;

end sp_graba_pais;

---------------------------------------------------------------------------------

procedure sp_actualiza_pais(
cod in pais.cod_pais%Type,nom in pais.nom_pais%Type,
est in pais.est_pais%Type
)
is begin

update pais set nom_pais=nom,est_pais=est where cod_pais=cod;


commit;

end sp_actualiza_pais;

----------------------------------------------------------------------------------

procedure sp_listar_pais_todos(
iocursor in out micursor
)
is begin
open iocursor for
select * from pais order by cod_pais;

end sp_listar_pais_todos;

---------------------------------------------------------------------------------

procedure sp_lista_pais_activos(
iocursor in out micursor
)
is begin

open iocursor for


select cod_pais,nom_pais from pais where est_pais=0 order by nom_pais;

end sp_lista_pais_activos;

----------------------------------------------------------------------------------

procedure sp_busca_pais(
iocursor in out micursor,nom pais.nom_pais%Type
)
is begin

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 75

if nom!='todos' then
open iocursor for
select * from pais where nom_pais like nom
order by cod_pais;
end if;

if nom ='todos' then


open iocursor for
select * from pais order by nom_pais ;
end if;

end sp_busca_pais;

end paquete_pais;
/

Paquete Genero

create or replace package paquete_genero


as
type micursor is ref cursor;

procedure sp_generar_genero(
iocursor in out micursor
);

procedure sp_graba_genero(
cod in genero.cod_gen%Type, nom in genero.nom_gen%Type
);

procedure sp_actualiza_genero(
cod in genero.cod_gen%Type, nom in genero.nom_gen%Type,
est in genero.est_gen%Type
);

procedure sp_listar_genero_todos(
iocursor in out micursor
);

procedure sp_lista_genero_activos(
iocursor in out micursor
);

procedure sp_busca_genero(
iocursor in out micursor,nom in genero.nom_gen%Type
);

end paquete_genero;
/
create or replace package body paquete_genero
as
-------------------------------------------------------------------------------------

www.detodoprogramacion.org
76 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

procedure sp_generar_genero(
iocursor in out micursor
)
is begin

open iocursor for


select 'GE' || substr(cast(substr(max(cod_gen),3,3)as int)+1001,2,3) as
cod from genero;

end sp_generar_genero;

---------------------------------------------------------------------------------

procedure sp_graba_genero(
cod in genero.cod_gen%Type, nom in genero.nom_gen%Type
)
is begin

insert into genero values(cod,nom,default);


commit;

end sp_graba_genero;

---------------------------------------------------------------------------------
procedure sp_actualiza_genero(
cod in genero.cod_gen%Type, nom in genero.nom_gen%Type,
est in genero.est_gen%Type

)is begin

update genero set nom_gen=nom,est_gen=est where cod_gen=cod;


commit;

end sp_actualiza_genero;

---------------------------------------------------------------------------------

procedure sp_listar_genero_todos(
iocursor in out micursor
)
is begin
open iocursor for
select * from genero order by cod_gen;

end sp_listar_genero_todos;

---------------------------------------------------------------------------------

procedure sp_lista_genero_activos(
iocursor in out micursor
)
is begin

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 77

open iocursor for


select cod_gen,nom_gen from genero where est_gen=0 order by nom_gen;

end sp_lista_genero_activos;

----------------------------------------------------------------------------------

procedure sp_busca_genero(
iocursor in out micursor,nom genero.nom_gen%Type
)
is begin

if nom!='todos' then
open iocursor for
select * from genero where nom_gen like nom
order by cod_gen;
end if;

if nom ='todos' then


open iocursor for
select * from genero order by nom_gen ;
end if;

end sp_busca_genero;

---------------------------------------------------------------------------------

end paquete_genero;
/

Paquete Comentarios
CREATE OR REPLACE package paquete_comentarios
as
type micursor is ref cursor;

procedure sp_generar_comentario(
iocursor in out micursor
);

procedure sp_graba_comentario(
cod in comentarios.cod_com%Type ,usu in comentarios.cod_usu%Type,
vid in comentarios.cod_vid%Type, com in comentarios.des_com%Type
);

procedure sp_lista_comentarios_video(
iocursor in out micursor , vid in comentarios.cod_vid%Type
);

end paquete_comentarios;
/

www.detodoprogramacion.org
78 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

CREATE OR REPLACE package body paquete_comentarios


as

---------------------------------------------------------------------------------

procedure sp_generar_comentario(
iocursor in out micursor
)is begin

open iocursor for


select 'CO' || substr(cast(substr(max(cod_com),3,6)as int)+1000001,2,6)
as cod from comentarios;

end sp_generar_comentario;

---------------------------------------------------------------------------------

procedure sp_graba_comentario(
cod in comentarios.cod_com%Type ,usu in comentarios.cod_usu%Type,
vid in comentarios.cod_vid%Type, com in comentarios.des_com%Type
)is begin

insert into comentarios values(cod,usu,vid,com,default,default,default);


commit;

end sp_graba_comentario;

---------------------------------------------------------------------------------

procedure sp_lista_comentarios_video(
iocursor in out micursor , vid in comentarios.cod_vid%Type
)is begin

open iocursor for


select nick_usu,nom_fot,fec_com,des_com,(select count(*) from comentarios
where cod_usu=u.cod_usu)as nro
from comentarios c ,usuario u where c.cod_usu=u.cod_usu and c.cod_vid=vid;

end sp_lista_comentarios_video;

----------------------------------------------------------------------------------

end paquete_comentarios;
/

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 79

Ahora comenzamos con la programación en sí de nuestra página web.

Trabajaremos en 4 capas:
• La primera será la capa de datos, en la que crearemos la conexcion a la BD y donde estarán nuestra
funciones que nos permi rán realizar consultas y los mantenimientos necesarios.
• La segunda es la capa enƟdad, aquí se definirán cada una de las tablas con sus respec vos campos;
cada campo sera encapsulado para poder tener acceso a ellos mendiante sus propiedades de
lectura y escritura.
Es importante recordar que los campos de las tablas deben tener el mismo po de los campos
definidos en la BD.
• La tercera es la capa de negocio, donde se definirán las funciones que vamos a u lizar, que estarán
asociadas con los paquetes creados anteriormente en la BD.
• La cuarta es la capa de presentación, aquí será creado el si o web.

Comenzamos creando la solución en la cual se encontrarán nuestras 4 capas.

Escogemos la opción que nos permite crear una solución; le colocamos un nombre, lo guardamos en
la ubicación que deseamos, es recomendable que sea en la raiz de una unidad.

www.detodoprogramacion.org
80 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Bueno, como se nos muestra, no enen ningun proyecto; así que ahora los empezaremos a crear.

Clic secundario encima de la solución y escogemos la opcion agregar.

Creamos un proyecto de po Biblioteca de Clases, usaremos como lenguaje Visual Basic.

La ubicación será la misma donde se creó la solución, esta es tomada por defecto.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 81

Una vez creado, se mostrará de esta manera:

Ahora creamos el siguiente proyecto de la misma manera, pero esta vez la llamaremos enƟdad, será
también una Biblioteca de Clases; igualmente, será con la capa negocio que llevará por nombre
negocio; todos estos proyecto serán creados en el mismo lenguaje.

Capa En dad:

www.detodoprogramacion.org
82 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Capa Negocio:

Entonces, se apreciará lo siguiente:

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 83

Ahora nos toca crear nuestro si o web.

Aquí podemos escoger la ubicación de nuestro proyecto, que será el mismo donde fueron creados las
anteriores capas; le pondremos un nombre, en este caso será Web, como se muestra:

www.detodoprogramacion.org
84 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Así se nos mostrará en el explorador de soluciones:

Lo que haremos ahora, será agregar las referencias a cada uno de nuestros proyectos para comenzar
con la programación de cada una de la capas.

Comenzaremos con la capa datos.

Hacemos lo siguiente: clic secundario y agregar referencia.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 85

En la ventana que aparece, en la pestaña de net, crearemos una referencia a System.Data y System.
Data.OracleClient; recordemos que la BD es Oracle.

En la Clase Negocio se realiza la referencia hacia los dos proyectos creados anteriormente, es decir la
Clase Datos y Clase EnƟdad, nos ubicamos en la pestaña de Proyectos.

www.detodoprogramacion.org
86 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

En nuestro siƟo web haremos exactamente lo mismo, pero esta vez sólo será hacia un proyecto que es
Negocio, pues este ya está referenciado hacia Datos y EnƟdad.

Pero para poder notar las referencia hechas, es necesario generar nuestra solución.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 87

Entoces se puede apreciar los siguiente:

Se ve claramente cómo se crea una caperta Bin en nuestro si o web donde se ven las referencias
hechas.

Bueno, ahora comenzaremos con el desarrollo de las capas; empezaremos con la capa de datos. Lo que
vamos a hacer es eliminar la clase que se creó por defecto y crearemos una nueva llamada Funciones,
o cambiaremos de nombre a la clase; una vez hecho esto, se comenzará a explicar la programacion
que se desarrolló.

Este es el código:
'Se estan importado las librerias que vamos a necesitar para trabajar

Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Data 'Para trabajar con Datos
Imports System.Data.OracleClient 'Para el trabajo con Oracle

Public Class Funciones

'Esta es la función que nos permite conectarnos a la base de datos


'cuando colocamos data source necesariamente tiene que ser el nombre 'de la pc ,no
funciona si se coloca “.” o (local)
'el user id y el password son del usuario con el cual creamos las 'tablas y los
paquetes con los procedimientos

www.detodoprogramacion.org
88 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Public Function Conexion() As String


Return "Data Source=SUSAN;User Id=usuario;Password=usuario"
End Function

'Ahora creamos la función que nos permitira hacer las consultas


'la llamaremos Listar ,esta recibira el nombre del procedimiento 'almacenado y a
su vez podrá recibir uno o varios parámetros ,o 'ninguno;
'que pueden ser de diferentes tipos ,por eso se declaro un ParamArray de 'tipo
object.Esto nos devuelve un DataTable

Public Function Listar(ByVal nombresp As String, ByVal ParamArray parametros() As


Object) As DataTable

'declaramos una variable de tipo datatable


Dim dt As New DataTable()
'por cualquier error nos aseguramos con un bloque de Try ...
'Catch
Try

'Creamos una variable para la conexcion y a su vez le 'pasamos como


parametro la funcion Conexion() declara 'antes
'Vale recordar que la conexcion es de tipo 'OracleConnection
Dim cn As New OracleConnection(Conexion())

'Ahora creamos una variable de tipo OracleCommand


Dim cmd As New OracleCommand()

'Abrimos la conexcion
cn.Open()

'En la propiedad conexcion l easigamos cn ,que ya fue


'abierta
cmd.Connection = cn

'Se especifica el tipo de comando que vamos a enviar,en


'este 'caso sera un procedimiento
cmd.CommandType = CommandType.StoredProcedure

'Se le da el valor del nombre del procedimiento


cmd.CommandText = nombresp
'actualizar los parametros del cmd
OracleCommandBuilder.DeriveParameters(cmd)
'Declaramos un variable que os servira de indice y la 'inicializamos
Dim i As Integer
i = 0
'Recoremos cada uno de los parametros que fuern enviados 'en cmd ,para
ello hacemos uso de un for each ... next
'dentrp de este bloque declaramos la variable p de tipo 'OracleParameter
que es donde se almacenaran los 'parametros
For Each p As OracleParameter In cmd.Parameters

'Preguntamos por el tipo de direción del pametro


'recordar que cuando creamos los paquetes declarabamos

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 89

'una parametro de tipo cursor ,pues bien en esta linea


'preguntamos por el
If p.Direction.ToString() = "InputOutput" Then
'si es del tipo cursor entonces le decimos que su
'direcion es de tipo salida
p.Direction = ParameterDirection.Output
Else
'si es un parametro normal solo le asignamos su
'valor
p.Value = parametros(i)
'hacemos que el indice aumente
i = i + 1
End If
Next
'Una vez terminada la parte de los parametros declaramos 'un tipo de
variable de tipo dataadapter , al cual le 'asignamos 'nuestra variable cmd
Dim da As New OracleDataAdapter(cmd)
'cerramos la conexcion
cn.Close()
'llenamos nuestro datatable con los datos
da.Fill(dt)
'cerramos la conxcion con el cmd
cmd.Dispose()
'hacemos lo mismo con da
da.Dispose()
cn.Dispose()
Catch ex As Exception

End Try

' retornamos el datatable con los datos


Return dt

End Function

'Esta funcion es para los mantenimientos es parecido al anterior


'este devuelve un cadena,mostrando asi un mensaje
Public Function Ejecutar(ByVal nombresp As String, ByVal ParamArray
parametros() As Object) As String

'declaramos la variable que devolvera el mensaje


Dim res As String = ""

Try
Dim cn As New OracleConnection(Conexion())
Dim cmd As New OracleCommand()
cn.Open()
cmd.Connection = cn
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = nombresp
OracleCommandBuilder.DeriveParameters(cmd)
Dim i As Integer

www.detodoprogramacion.org
90 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

i = 0
'aquí ya no es necsario pregunta o el tipo de direccion de
'la variable
For Each p As OracleParameter In cmd.Parameters

p.Value = parametros(i)
i = i + 1

Next
'Declaramos una variable donde se nos informara el numero
'de registro afectados
Dim f As Integer
'Ejecutamos la transaccion
f = cmd.ExecuteNonQuery()
cn.Close()
res = "La operacion realizada con exito"
cmd.Dispose()
cn.Dispose()

Catch ex As Exception
'Si hay un problema ,lo capturamos en la variable
res = ex.Message

End Try

'Retornamos el resultado
Return res

End Function

End Class

Ahora trabajaremos con la capa enƟdad, lo que haremos será crear un diagrama de clases.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 91

Le colocamos un nombre.

Esta será la pantalla que mostrará, donde sólo tendremos que arrastar una clase para poder crearla:

www.detodoprogramacion.org
92 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Bueno, ahora crearemos una clase, sólo escogemos clase y la arrastramos al medio. Aparecerá esta
ventana, le colocamos el nombre de la clase; ver el ejemplo:

Y nuestro diagrama quedará así:

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 93

Lo que haremos ahora será crear sus atributos; para ello hacemos lo siguiente: clic secundario encima
de la clase, escogemos Agregar:campo.

Creamos el primer campo.

Y para agregar más, sólo seguimos el paso anterior; una vez terminado debe quedar así, recordemos
que son campos de la tabla usuario.

www.detodoprogramacion.org
94 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Lo que haremos ahora será especificar el po de dato de cada uno, para ello veremos los detalles de
clases.

Lo cual nos mostrará lo siguiente, así podremos asignarle el po de dato al campo:

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 95

Una vez hecho esto, podremos crear las propiedades.

Colocaremos el mismo nombre del campo, sólo que no tendrá el guión ‘_’

Y así con todos los campos.

www.detodoprogramacion.org
96 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Ahora le daremos el po de dato usando detalles de clase, que deben coincidir con los campos.

Bueno, ahora daremos doble clic encima de las clases y aparecerá este código; como se ven, se crearon
los set y los gets,habrá que completar.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 97

Una vez listo, quedará así:

En dad Usuario
Public Class Usuario

'Estos son los campos de la clase ,como se ven estos fueron 'encapsulados

Private _cod_usu As String


Private _nom_usu As String
Private _ape_usu As String
Private _fec_nac As Date
Private _fec_usu As Date
Private _cod_pais As String
Private _nick_usu As String
Private _pas_usu As String
Private _cor_usu As String
Private _fot_usu As Integer
Private _est_con As Integer
Private _est_usu As Integer
Private _nom_fot As String

'Se crea las propiedades de lectura y escritura del campo _ape_usu


Public Property ape_usu() As String
'en su propiedad de lectura solo se retorna el valor
Get
'retornando el valor del campo
Return _ape_usu
End Get
'en su propiedad de escritura se recibe un parámetro
Set(ByVal value As String)
'se le asigna el valor recibido al campo
_ape_usu = value
End Set

End Property

Public Property cod_pais() As String


Get
Return _cod_pais
End Get
Set(ByVal value As String)
_cod_pais = value
End Set
End Property

Public Property cod_usu() As String


Get
Return _cod_usu
End Get
Set(ByVal value As String)
_cod_usu = value
End Set

www.detodoprogramacion.org
98 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

End Property

Public Property cor_usu() As String


Get
Return _cor_usu
End Get

Set(ByVal value As String)


_cor_usu = value
End Set
End Property

Public Property est_con() As Integer


Get
Return _est_con
End Get
Set(ByVal value As Integer)
_est_con = value
End Set
End Property

Public Property est_usu() As Integer


Get
Return _est_usu
End Get
Set(ByVal value As Integer)
_est_usu = value
End Set
End Property

Public Property fec_nac() As Date


Get
Return _fec_nac
End Get
Set(ByVal value As Date)
_fec_nac = value
End Set
End Property

Public Property fec_usu() As Date


Get
Return _fec_usu
End Get
Set(ByVal value As Date)
_fec_usu = value
End Set
End Property

Public Property fot_usu() As Integer


Get
Return _fot_usu
End Get

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 99

Set(ByVal value As Integer)


_fot_usu = value
End Set
End Property

Public Property nick_usu() As String


Get
Return _nick_usu
End Get
Set(ByVal value As String)
_nick_usu = value
End Set
End Property

Public Property nom_usu() As String


Get
Return _nom_usu
End Get
Set(ByVal value As String)
_nom_usu = value
End Set
End Property

Public Property pas_usu() As String


Get
Return _pas_usu
End Get
Set(ByVal value As String)
_pas_usu = value
End Set
End Property

Public Property nom_fot() As String


Get
Return _nom_fot
End Get
Set(ByVal value As String)
_nom_fot = value
End Set
End Property
End Class

Las clases también se pueden crear de manera directa, sin el diagrama, pero todo se tendrá que
codificar.

www.detodoprogramacion.org
100 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Aquí estan todas las clases.

En dad Comentario

Public Class Comentario

Private _cod_com As String


Private _cod_usu As String
Private _cod_vid As String
Private _des_com As String
Private _fec_com As DateTime
Private _pun_com As Integer
Private _est_com As Integer

Public Property Cod_com() As String


Get
Return _cod_com

End Get
Set(ByVal value As String)
_cod_com = value
End Set
End Property

Public Property Cod_usu() As String


Get
Return _cod_usu
End Get

Set(ByVal value As String)


_cod_usu = value
End Set
End Property

Public Property Cod_vid() As String


Get
Return _cod_vid
End Get
Set(ByVal value As String)
_cod_vid = value
End Set
End Property

Public Property Des_com() As String


Get
Return _des_com
End Get
Set(ByVal value As String)
_des_com = value
End Set
End Property

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 101

Public Property Est_com() As Integer


Get
Return _est_com
End Get
Set(ByVal value As Integer)
_est_com = value
End Set
End Property

Public Property Fec_com() As DateTime


Get
Return _fec_com
End Get
Set(ByVal value As DateTime)
_fec_com = value
End Set
End Property

Public Property Pun_com() As Integer


Get
Return _pun_com
End Get
Set(ByVal value As Integer)
_pun_com = value
End Set
End Property
End Class

En dad Genero

Public Class Genero

Private _cod_gen As String


Private _nom_gen As String
Private _est_gen As Integer

Public Property Cod_gen() As String


Get
Return _cod_gen
End Get
Set(ByVal value As String)
_cod_gen = value
End Set
End Property

Public Property Nom_gen() As String


Get
Return _nom_gen
End Get
Set(ByVal value As String)
_nom_gen = value

www.detodoprogramacion.org
102 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

End Set
End Property

Public Property Est_gen() As Integer


Get
Return _est_gen
End Get
Set(ByVal value As Integer)
_est_gen = value
End Set
End Property
End Class

En dad Mensajes
Public Class Mensajes

Private _cod_men As String


Private _asu_men As String
Private _cod_usu_rec As String
Private _cod_usu_env As String
Private _des_men As String
Private _fec_men As Date
Private _est_lei As Integer
Private _est_men_rec As Integer
Private _est_men_env As Integer

Public Property cod_men() As String


Get
Return _cod_men
End Get
Set(ByVal value As String)
_cod_men = value
End Set
End Property

Public Property asu_men() As String


Get
Return _asu_men
End Get
Set(ByVal value As String)
_asu_men = value
End Set
End Property

Public Property cod_usu_rec() As String


Get
Return _cod_usu_rec
End Get
Set(ByVal value As String)
_cod_usu_rec = value
End Set

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 103

End Property

Public Property cod_usu_env() As String


Get
Return _cod_usu_env
End Get
Set(ByVal value As String)
_cod_usu_env = value
End Set
End Property

Public Property des_men() As String


Get
Return _des_men
End Get
Set(ByVal value As String)
_des_men = value
End Set
End Property

Public Property fec_men() As Date


Get
Return _fec_men
End Get
Set(ByVal value As Date)
_fec_men = value
End Set
End Property

Public Property est_lei() As Integer


Get
Return _est_lei
End Get
Set(ByVal value As Integer)
_est_lei = value
End Set
End Property

Public Property est_men_rec() As Integer


Get
Return _est_men_rec
End Get

Set(ByVal value As Integer)


_est_men_rec = value
End Set
End Property

Public Property est_men_env() As Integer


Get
Return _est_men_env
End Get

www.detodoprogramacion.org
104 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Set(ByVal value As Integer)


_est_men_env = value
End Set
End Property
End Class

En dad Pais
Public Class Pais

Private _cod_pais As String


Private _nom_pais As String
Private _est_pais As Integer

Public Property cod_pais() As String


Get
Return _cod_pais
End Get
Set(ByVal value As String)
_cod_pais = value
End Set
End Property

Public Property nom_pais() As String


Get
Return _nom_pais
End Get
Set(ByVal value As String)
_nom_pais = value
End Set
End Property

Public Property est_pais() As Integer


Get
Return _est_pais
End Get
Set(ByVal value As Integer)
_est_pais = value
End Set
End Property
End Class

En dad Video
Public Class Video

Private _cod_vid As String


Private _dur_vid As String
Private _est_vid As Integer
Private _fec_vid As Date
Private _nom_vid As String

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 105

Private _num_vis As Integer


Private _pun_vid As Integer
Private _nick_usu As String
Private _cod_gen As String

Public Property Cod_vid() As String


Get
Return _cod_vid
End Get
Set(ByVal value As String)
_cod_vid = value
End Set
End Property

Public Property Dur_vid() As String


Get
Return _dur_vid
End Get
Set(ByVal value As String)
_dur_vid = value
End Set
End Property

Public Property Est_vid() As Integer


Get
Return _est_vid
End Get
Set(ByVal value As Integer)
_est_vid = value
End Set
End Property

Public Property Fec_vid() As Date


Get
Return _fec_vid
End Get
Set(ByVal value As Date)
_fec_vid = value
End Set
End Property

Public Property Nom_vid() As String


Get
Return _nom_vid
End Get
Set(ByVal value As String)
_nom_vid = value
End Set
End Property

www.detodoprogramacion.org
106 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Public Property Num_vis() As Integer


Get
Return _num_vis
End Get
Set(ByVal value As Integer)
_num_vis = value
End Set
End Property

Public Property Pun_vid() As Integer


Get
Return _pun_vid
End Get
Set(ByVal value As Integer)
_pun_vid = value
End Set
End Property

Public Property Nick_usu() As String


Get
Return _nick_usu
End Get
Set(ByVal value As String)
_nick_usu = value
End Set
End Property

Public Property Cod_gen() As String


Get
Return _cod_gen
End Get
Set(ByVal value As String)
_cod_gen = value
End Set
End Property
End Class

Ver un ejemplo:

En la BD
create table Usuario(
cod_usu varchar(7) not null,
nom_usu varchar(50) not null,
ape_usu varchar(50) not null,
fec_nac date not null,
fec_usu date default sysdate,
cod_pais varchar(5) not null,
nick_usu varchar(20) not null,
pas_usu varchar(20) not null,
cor_usu varchar(50) not null,
fot_usu number(1) default 0,

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 107

est_con number(1) default 1,


est_usu number(1) default 0,
nom_fot varchar(12) default 'Usuario.png'
);

En la capa enƟdad
Public Class Usuario

Private _cod_usu As String


Private _nom_usu As String
Private _ape_usu As String
Private _fec_nac As Date
Se ve cómo coinciden los pos de los
Private _fec_usu As Date
datos, esto es muy importante.
Private _cod_pais As String
Private _nick_usu As String
Private _pas_usu As String
Private _cor_usu As String
Private _fot_usu As Integer
Private _est_con As Integer
Private _est_usu As Integer
Private _nom_fot As String

Ahora trabajaremos con la Capa de Negocio.

Agregaremos un clase.

www.detodoprogramacion.org
108 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Colocamos un nombre, en este caso lo diferenciaremos de la clase en dad por C_ que llevará delante,
porque el resto del nombre será igual al de la enƟdad.

Este es el código de la Clase C_Usuario.vb


'importamos las dos poryectos que vamos a uzar , esto es importante ,por 'que a
pesar que fueron referenciados , es necesario importarlos

Imports Entidad
Imports Datos

Public Class C_Usuario

'creamos una variable de tipo Funciones (capa datos),para uzar el


'“Listar” y el “Ejecutar”
Dim cl As New Funciones

'Declaramos la primera función , en este caso será la que devueva el 'codigo


siguiente para la creación de un usuario,como es una consulta 'retorna un
datatable
Public Function Generar_Usuario() As DataTable
'usa la funcion “Listar” a la cual envia como parametro el nombre
'del paquete seguido del nombre del procedimiento
Return cl.Listar("paquete_usuario.sp_generar_usuario")
End Function

Public Function Lista_Usuario() As DataTable


Return cl.Listar("paquete_usuario.sp_lista_usuario")
End Function

'Esta funcion graba un nuevo usuario ,recibe como parametro la

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 109

'variable e de tipo entidad usuario y retorna una cadena

Public Function Graba_Usuario(ByVal e As Entidad.Usuario) As String

'usa la funcion “Ejecutar”,envia como parámetro el nombre del


'paquete y el nombre del procedimiento,ademas de los campos que
'han sido llenados con datos de la entidad usuario,el numero de
'parametros deben coincidir con los del proc. alamac. creados
'en la BD , sin contar el nombre del paquete y el nombre del
'proc recordar que el orden en el que sean enviados ,es como
'seran almacenados en la BD ,tener mucho cuidado en que
'coincidan con los parametros de los proc. en la BD
Return cl.Ejecutar("paquete_usuario.sp_graba_usuario",
e.cod_usu,e.nom_usu, e.ape_usu, e.fec_nac, e.cod_pais,
e.nick_usu, e.pas_usu, e.cor_usu)
End Function

'Esta funcion valida el nick del usuario que sea unico ,solo
'recibe un parametro el nick del usuario
Public Function Busca_Nick(ByVal e As Entidad.Usuario) As
DataTable
'el nombre el paquete y del procedimiento deben ser iguales que
'al de los de la BD , sino no seran encontrados
Return cl.Listar("paquete_usuario.sp_busca_nick", e.nick_usu)
End Function

Public Function Busca_Correo(ByVal e As Entidad.Usuario) As


DataTable
Return cl.Listar("paquete_usuario.sp_busca_correo", e.cor_usu)
End Function

Public Function Actualiza_Usuario(ByVal e As Entidad.Usuario) As


String
Return cl.Ejecutar("paquete_usuario.sp_actualiza_usuario",
e.nick_usu, e.nom_usu, e.ape_usu,e.fec_nac, e.cod_pais,
e.cor_usu)
End Function
Public Function Conf_Password(ByVal e As Entidad.Usuario) As
DataTable
Return cl.Listar("paquete_usuario.sp_conf_pass_usua",
e.nick_usu,e.pas_usu)
End Function

Public Function Actualiza_Password(ByVal e As Entidad.Usuario) As


String
Return cl.Ejecutar("paquete_usuario.sp_act_pass_usuario",
e.nick_usu, e.pas_usu)
End Function

Public Function Usuarios_Conectados() As DataTable


Return cl.Listar("paquete_usuario.sp_usuario_conectados")
End Function

www.detodoprogramacion.org
110 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Public Function Perfil_Usuario(ByVal e as Entidad.Usuario) As


DataTable
Return cl.Listar("paquete_usuario.sp_perfil_usuario",
e.nick_usu)
End Function

Public Function Ingreso_Usuario(ByVal e As Entidad.Usuario) As


DataTable
Return cl.Listar("paquete_usuario.sp_ingreso_usuario",
e.nick_usu, e.pas_usu)
End Function

Public Function Lista_Correo(ByVal e As Entidad.Usuario) As


DataTable
Return cl.Listar("paquete_usuario.sp_lista_correo",
e.nick_usu)
End Function

Public Function Est_Con_Usuario(ByVal e As Entidad.Usuario) As


String
Return cl.Ejecutar("paquete_usuario.sp_est_con_usuario",
e.nick_usu, e.est_con)
End Function

Public Function Act_foto_Usuario(ByVal e As Entidad.Usuario) As


String
Return cl.Ejecutar("paquete_usuario.sp_act_foto_usu",
e.nick_usu, e.fot_usu, e.nom_fot)
End Function

Public Function Elimina_Usuario(ByVal e As Entidad.Usuario) As


String
Return cl.Ejecutar("paquete_usuario.sp_elim_usuario",
e.nick_usu,e.est_usu)
End Function

End Class

Tomar en cuenta lo siguiente:

En la BD:
procedure sp_graba_usuario(

cod in usuario.cod_usu%Type , nom in usuario.nom_usu%Type,


ape in usuario.ape_usu%Type , fena in usuario.fec_nac%Type,
pai in usuario.cod_pais%Type , nick in usuario.nick_usu%Type,
pass in usuario.pas_usu%Type , corr in usuario.cor_usu%Type
);
Ver cómo coinciden los
campos en ambos si os.

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 111

En la capa negocio
Public Function Graba_Usuario(ByVal e As Entidad.Usuario) As
String
Return cl.Ejecutar("paquete_usuario.sp_graba_usuario",
e.cod_usu, e.nom_usu, e.ape_usu,e.fec_nac,
e.cod_pais,e.nick_usu, e.pas_usu,
e.cor_usu)
End Function

Aquí estan toda la clases:

Clase C_Comentario
Imports Entidad
Imports Datos

Public Class C_Comentario

Dim cl As New Funciones

Public Function Generar_Comentario() As DataTable


Return cl.Listar("paquete_comentarios.sp_generar_comentario")
End Function

Public Function Graba_Comentario(ByVal e As Entidad.Comentario) As


String
Return cl.Ejecutar("paquete_comentarios.sp_graba_comentario",
e.Cod_com, e.Cod_usu, e.Cod_vid, e.Des_com)
End Function

Public Function Lista_Comentarios(ByVal e As Entidad.Comentario)


As DataTable
Return
cl.Listar("paquete_comentarios.sp_lista_comentarios_video"
,e.Cod_vid)
End Function

End Class

Clase C_Genero
Imports Entidad
Imports Datos

Public Class C_Genero

Dim cl As New Funciones

Public Function Generar_Genero() As DataTable


Return cl.Listar("paquete_genero.sp_generar_genero")
End Function

www.detodoprogramacion.org
112 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Public Function Graba_Genero(ByVal e As Entidad.Genero) As String


Return cl.Ejecutar("paquete_genero.sp_graba_genero",
e.Cod_gen, e.Nom_gen)
End Function

Public Function Actualiza_Genero(ByVal e As Entidad.Genero) As


String
Return cl.Ejecutar("paquete_genero.sp_actualiza_genero",
e.Cod_gen, e.Nom_gen, e.Est_gen)
End Function

Public Function Lista_genero_todos() As DataTable


Return cl.Listar("paquete_genero.sp_listar_genero_todos")
End Function

Public Function Lista_genero_activos() As DataTable


Return cl.Listar("paquete_genero.sp_lista_genero_activos")
End Function

Public Function Busca_Genero(ByVal e As Entidad.Genero) As


DataTable
Return cl.Listar("paquete_genero.sp_busca_genero", e.Nom_gen)
End Function
End Class

Clase C_Mensajes
Imports Entidad
Imports Datos
Public Class C_Mensajes

Dim cl As New Funciones

Public Function Generar_Mensajes() As DataTable


Return cl.Listar("paquete_mensajes.sp_generar_mensaje")
End Function

Public Function Graba_Mensajes(ByVal e As Entidad.Mensajes) As


String
Return cl.Ejecutar("paquete_mensajes.sp_graba_mensaje",
e.cod_men, e.asu_men, e.cod_usu_rec , e.cod_usu_env,
e.des_men)
End Function

Public Function Lista_Mensajes_Nuevos(ByVal e As Entidad.Mensajes)


As DataTable
Return cl.Listar("paquete_mensajes.sp_lista_mensajes_nuevos",
e.cod_usu_rec)
End Function

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 113

Public Function Lista_Mensajes_Todos(ByVal e As Entidad.Mensajes)


As DataTable
Return cl.Listar("paquete_mensajes.sp_lista_mensajes_todos",
e.cod_usu_rec)
End Function

Public Function Lista_Mensajes_Escritos(ByVal e As Entidad.Mensajes)


As DataTable
Return cl.Listar("paquete_mensajes.sp_lista_mensajes_escritos",
e.cod_usu_env)
End Function

Public Function Eliminar_Mensajes_Recibidos(ByVal e As


Entidad.Mensajes) As String
Return
cl.Ejecutar("paquete_mensajes.sp_eliminar_mensajes_rec",
e.cod_men, e.cod_usu_rec)
End Function

Public Function Eliminar_Mensajes_Enviados(ByVal e As


Entidad.Mensajes) As String
Return
cl.Ejecutar("paquete_mensajes.sp_eliminar_mensajes_esc",
e.cod_men, e.cod_usu_env)
End Function

Public Function Detalle_Mensaje_Enviados(ByVal e As


Entidad.Mensajes)As DataTable
Return cl.Listar("paquete_mensajes.sp_det_men_env", e.cod_men,
e.cod_usu_env)
End Function

Public Function Detalle_Mensaje_Recibidos(ByVal e As


Entidad.Mensajes) As DataTable
Return cl.Listar("paquete_mensajes.sp_det_men_rec",
e.cod_men, e.cod_usu_rec)
End Function

Public Function Actualiza_Mensajes_Leidos(ByVal e As


Entidad.Mensajes) As DataTable
Return cl.Listar("paquete_mensajes.sp_act_mensajes_leido",
e.cod_men, e.cod_usu_rec)
End Function

End Class

www.detodoprogramacion.org
114 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Clase C_Pais
Imports Entidad
Imports Datos
Public Class C_Pais

Dim cl As New Funciones

Public Function Generar_Pais() As DataTable


Return cl.Listar("paquete_pais.sp_generar_pais")
End Function

Public Function Graba_Pais(ByVal e As Entidad.Pais) As String


Return cl.Ejecutar("paquete_pais.sp_graba_pais",
e.cod_pais, e.nom_pais)
End Function

Public Function Actualiza_Pais(ByVal e As Entidad.Pais) As String


Return cl.Ejecutar("paquete_pais.sp_actualiza_pais",
e.cod_pais, e.nom_pais, e.est_pais)
End Function

Public Function Lista_pais_todos() As DataTable


Return cl.Listar("paquete_pais.sp_listar_pais_todos")
End Function

Public Function Lista_pais_activos() As DataTable


Return cl.Listar("paquete_pais.sp_lista_pais_activos")
End Function

Public Function Busca_Pais(ByVal e As Entidad.Pais) As DataTable


Return cl.Listar("paquete_pais.sp_busca_pais", e.nom_pais)
End Function
End Class

Clase C_Video
Imports System.Data
Imports Datos
Imports Entidad

Public Class C_Video

Dim cl As New Funciones

Public Function Generar_Video() As DataTable


Return cl.Listar("paquete_videos.sp_genera_videos")
End Function

Public Function Lista_Video() As DataTable


Return cl.Listar("paquete_videos.sp_listar_videos_todos")
End Function

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 115

Public Function Busca_video(ByVal e As Entidad.video) As DataTable


Return cl.Listar("paquete_videos.sp_busca_video", e.Nom_vid)
End Function

Public Function Busca_titulo(ByVal e As Entidad.video) As


DataTable
Return cl.Listar("paquete_videos.sp_busca_titulo", e.Cod_vid)
End Function

Public Function Graba_Video(ByVal e As Entidad.video) As String


Return cl.Ejecutar("paquete_videos.sp_graba_video", e.Cod_vid,
e.Nom_vid, e.Dur_vid, e.Nick_usu, e.Cod_gen)
End Function

Public Function Act_Puntos(ByVal e As Entidad.video) As String


Return cl.Ejecutar("paquete_videos.sp_act_ptos",
e.Cod_vid, e.Pun_vid)
End Function

Public Function Act_Visitas(ByVal e As Entidad.video) As String


Return cl.Ejecutar("paquete_videos.sp_act_vis",
e.Cod_vid, e.Num_vis)
End Function

Public Function Videos_Usuario(ByVal e As Entidad.video) As


DataTable
Return cl.Listar("paquete_videos.sp_vid_usuario", e.Nick_usu)
End Function

Public Function Nick_Usuario(ByVal e As Entidad.video) As


DataTable
Return cl.Listar("paquete_videos.sp_usuario_vid", e.Cod_vid)
End Function

Public Function Detalla_Video(ByVal e As Entidad.video) As


DataTable
Return cl.Listar("paquete_videos.sp_det_video", e.Cod_vid)
End Function

Public Function Actualiza_Video(ByVal e As Entidad.video) As


String
Return cl.Ejecutar("paquete_videos.sp_actualiza_video",
e.Cod_vid, e.Nom_vid, e.Cod_gen)
End Function

Public Function Elimina_Video(ByVal e As Entidad.Video) As String


Return cl.Ejecutar("paquete_videos.sp_elimina_video",
e.Cod_vid)
End Function

End Class

www.detodoprogramacion.org
116 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Ahora comenzamos con la programación de las páginas.

Página de Inicio será el Home.

Este es el código Htm:


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Home.aspx.vb"
Inherits="Home" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/


TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Home</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
background-image: url();
background-repeat: no-repeat;
}
}
a:link {
color: #000099;
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #000099;
}
a:hover {
text-decoration: none;
color: #FF0000;
}
a:active {
text-decoration: none;
color: #000099;
}

-->
</style>
</head>
<body>
<form name="form1" id="form1" runat="server">
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0" >
<tr>
<td rowspan="3" style="width: 382px"><img
src="auxiliares/logo.png" height="125" width="345" /></td>
<td colspan="2" style="height: 85px">&nbsp;</td>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 117

<td width="145" align="center" style="height: 85px"><asp:Image


ID="Image1" runat="server" Height="60px" Width="60px" /></td>
</tr>
<tr>
<td colspan="2" style="height: 20px">&nbsp;</td>
<td align="center" style="height: 20px"><asp:Label ID="lblusuario"
runat="server" Visible="False" Width="98px" ForeColor="Green" Font-Names="Arial
Narrow" style="color: black; font-family: 'Berlin Sans FB'">Desconectado</
asp:Label></td>
</tr>
<tr>
<td colspan="2" valign="middle" style="font-family:Arial Narrow;font-
size:5;color:#333333;">
<%-- Este código es para capturar la fecha --%>
<script language ="javascript" type="text/javascript">
var hoy = new Date();
dia = hoy.getDate();
mes = hoy.getMonth();
anyo = hoy.getYear();
if (mes == "0") convertir_mes = "Enero";
else if (mes == "1") convertir_mes = "Febrero";
else if (mes == "2") convertir_mes = "Marzo";
else if (mes == "3") convertir_mes = "Abril";
else if (mes == "4") convertir_mes = "Mayo";
else if (mes == "5") convertir_mes = "Junio";
else if (mes == "6") convertir_mes = "Julio";
else if (mes == "7") convertir_mes = "Agosto";
else if (mes == "8") convertir_mes = "Septiembre";
else if (mes == "9") convertir_mes = "Octubre";
else if (mes == "10") convertir_mes = "Noviembre";
else convertir_mes = "Diciembre";
document.write ( "Lima "+ dia + " " + convertir_mes + " de " +
anyo);
</script>
</td>
<td align="center" style="height: 20px"><asp:LinkButton ID="btnsession"
runat="server" Visible="False" Width="87px" Font-Names="Arial Narrow"
ToolTip="Cerrar Sesión" style="font-family: 'Berlin Sans FB'; text-decoration:
line-through; color: blue;">[Salir]</asp:LinkButton></td>
</tr>
<tr>
<td colspan="4" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td colspan="4" style="height: 19px"><asp:ImageButton ID="btnhome"
runat="server" ImageUrl="auxiliares/home.png" AlternateText="Home"
/><asp:ImageButton ID="btnregistro" runat="server" ImageUrl="auxiliares/
registro.png" AlternateText="Registro" /><asp:ImageButton ID="btningresar"
runat="server" ImageUrl="auxiliares/ingresar.png" AlternateText="Ingresar"
/><asp:ImageButton ID="btnpagina" runat="server" ImageUrl="auxiliares/usuario.png"
AlternateText="Página Usuario" /><asp:ImageButton ID="btnusuarios" runat="server"
ImageUrl="auxiliares/conectados.png" AlternateText="Usuarios Conectados"/></td>
</tr>
<tr>

www.detodoprogramacion.org
118 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

<td colspan="4" height="3" bgcolor="#CCCCCC"></td>


</tr>
<tr>
<td style="height: 17px; color: salmon; background-color: salmon;"
>&nbsp;</td>
<td width="155" style="height: 17px; color: salmon; background-color:
salmon;" ></td>
<td width="137" style="height: 17px; color: salmon; background-color:
salmon;" >&nbsp;</td>
<td align="right" style="height: 17px; color: salmon; background-color:
salmon;" >&nbsp;</td>
</tr>
<tr>
<td style="height: 23px; width: 382px;" >&nbsp;<asp:TextBox
ID="TextBox1" runat="server" Width="335px"></asp:TextBox></td>
<td style="height: 23px" ><asp:ImageButton ID="btnbuscar" runat="server"
AlternateText="Buscar" Height="30"
ImageUrl="auxiliares/buscar.png" Width="30"
BorderColor="#D4D0C8" /></td>
<td style="height: 23px" > </td>
<td style="height: 23px">&nbsp;&nbsp;</td>
</tr>
<tr>
<td style="width: 382px; height: 19px;" >&nbsp;</td>
<td style="height: 19px" >&nbsp;</td>
<td style="height: 19px" >&nbsp;</td>
<td style="height: 19px">&nbsp;</td>
</tr>
<tr>
<td colspan="4">
<table width="100%" border="0" align="center" cellpadding="0"
cellspacing="0">
<tr>
<td style="height: 23px">&nbsp;</td>
<td style="height: 23px; width: 64px;"></td>
<td colspan="2" align="center" style="height: 23px; color: black;
font-family: forte; background-color: lightgrey;">
Lista de Videos</td>
</tr>
<tr>
<td style="height: 23px">&nbsp;</td>
<td style="height: 23px; width: 64px;">&nbsp;</td>
<td colspan="2" style="height: 23px">&nbsp;</td>
</tr>
<tr>
<td style="color: navy; width: 426px; font-family: 'Arial Narrow';
height: 19px;"><!--aca va el reproductor-->
<asp:Label ID="lbltitulo" runat="server" Font-Bold="False" Font-
Names="Forte"
Font-Size="16pt" ForeColor="Navy" style="color: black; font-
family: forte">Jugadaza</asp:Label></td>
<td rowspan="2" style="width: 64px">&nbsp;</td>
<td width="315" rowspan="2" valign="top">

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 119

<table width="100%" border="0" align="center" cellpadding="1"


cellspacing="1" >
<%-- Para cargar la lista de video en la página inicial --%>
<%
--Crea un objeto de tipo datatable
Dim dt As New System.Data.DataTable
--Crea un objeto de C_Video(donde estan todas la
--funciones)
Dim objdao As New Negocio.C_Video
--Lleno el datatable con la funcion Lista_Video()
dt = objdao.Lista_Video()
--Lo recorro con un “For”
For i As Integer = 0 To 4
--Crea una variable donde guardo el valor de la
--primera columna de la primera fila del listado
Dim dato As String = dt.Rows(i)(0).ToString()

--Hago lo mismo
Dim titulo As String = dt.Rows(i)(1).ToString()
--recordar que el dato guarda el codigo del video y
--el titulo el nombre del video.
%>
<tr>
<td width="100" rowspan="5" align="center" style="width:
100px">
<%--En una etiqueta <a></a> creamos un link hacia otra pagina donde le enviamos
el valor de una variable, en este caso sera el codigo del video para poder
verlo ,ahora dentro de esta etiqueta estara el video de forma pequeña por ello
colocaremos una etiquete <embed></embed> aqie se carga el video pero se le quitan
algunas opciones para que no pueda ser reproducido , “video” es la carpeta donde
están nuestro videos almacenados %>
<a href="Home2.aspx?var=<%Response.Write(dato)%>">
<embed src="video/<%Response.Write(dato)%>.avi" width='100'
height='80' autostart="0" align="middle" id="media" showcontrols="false"
name="media"> </embed>
</a>
</td>
</tr>
<tr>
<td width="175" style="height: 12px" >&nbsp;</td>
</tr>
<tr>
<td>&nbsp;
<a href="Home2.aspx?var=<%Response.Write(dato)%>" style="
font-family:'Arial Narrow';color:teal">
<%Response.Write(titulo)%>
</a>
</td>
</tr>
<tr>
<td style="width: 100px"><a href="Home2.aspx?var=<%Response.
Write(dato)%>" style="font-family: 'Berlin Sans FB';color: blue;">&nbsp;&nbsp;ver
video</a></td>
</tr>

www.detodoprogramacion.org
120 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

<tr>
<td style="width: 100px">&nbsp;</td>
</tr>
<%Next%>
</table>
</td>
</tr>
<tr>
<td valign="top" style="width: 426px; height: 24px"><a href="Home2.
aspx?var=VI000003">
<embed src="video/VI000003.avi" width="422" height="299"
autostart="0" align="middle" id="Embed3" showcontrols="true" > </embed>
</a> </td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="4" style="background-color: salmon">&nbsp;</td>
</tr>
<tr>
<td colspan="2" style="color: black; background-color: black">&nbsp;</
td>
<td style="color: black; background-color: black">&nbsp;</td>
<td style="color: black; background-color: black">&nbsp;</td>
</tr>
</table>
</form>
</body>
</html>

Y este es el código de la programación:

Imports Entidad
Imports Negocio
Imports System.Data
Partial Class Home

Inherits System.Web.UI.Page
'Creamos una variable de tipo C_Usuario para usar todas las
'funciones
Dim cu As New C_Usuario

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
'Preguntamos si la pagina ya fue enviada antes o sies la
'primera vez que la cargamos.
If Not Page.IsPostBack Then
'Ahora preguntamos por la session(“Usuario”)
If Session("Usuario") = "desconectado" Or Session("Usuario") = "" Then
'si cumple con la condicion ocultamos algunos
'controles

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 121

lblusuario.Visible = False
btnsession.Visible = False
btnpagina.Visible = False
btnusuarios.Visible = False
Image1.Visible = False
Else
'de lo contrario significa que esta logueado entonces
'mostramos su foto y nombre de usuario,asi como el
'menu de opciones cambia
lblusuario.Text = Session("Usuario")
lblusuario.Visible = True
btnsession.Visible = True
btnpagina.Visible = True
btnregistro.Visible = False
btningresar.Visible = False
Image1.Visible = True
btnusuarios.Visible = True
'esta funcion es la que permite que la imagen del
'usuario salga en la parte superior derecha en la
'página
Verifica_Imagen()
End If
End If
End Sub

Protected Sub btnsession_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btnsession.Click
'Cerramos Sesión
Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
'Cambiamos el estado del usuario
u.est_usu = 0
'Actualizamos mediante la funcion “Est_Con_usuario()”
cu.Est_Con_Usuario(u)
'Le asiganamos un nuevo valor a la Session(“Usuario”)
Session("Usuario") = "desconectado"
'Y redirecionamos a una página Home.apsx
Response.Redirect("Home.aspx")
End Sub

'La funcion que permite ver la foto del usuario


Sub Verifica_Imagen()

Dim dt As New DataTable


Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
'En esta parte llamamos a la funcion Perfil_Usuario ,donde uno
'de los campos de la consulta tiene el nombre de la foto ,para
'ello pasamos una parametro de tipo entidad usuario que tiene
'el nick del usuario ,verficar en la clase C_Usuario
dt = cu.Perfil_Usuario(u)
'Capturo el campo que me es necesario

www.detodoprogramacion.org
122 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Dim i As Integer
i = Integer.Parse(dt.Rows(0).Item(0))
'Pregunto por el valor del campo
If i = 0 Then
'Coloco la imagen por defecto de todos lo usuarios
'la carpeta img esta creada en el sitio y es donde estan
'todas las fotos siempre colocar ~ hace referencia al
'sitio donde no encontramos
Image1.ImageUrl = "~/img/Usuario.png"
Else
'Si no colocamos la imagen,bueno la imagen esta guarada
'con el coigo del usuario y su extencion respectiva
Image1.ImageUrl = "~/img/" + dt.Rows(0).Item(1).ToString()
End If
Image1.Height = 60
Image1.Width = 60
End Sub

'Esta funcion me devuelve el codigo del Usuario


Public Function Codigo(ByVal nick As String) As String
Dim u As New Entidad.Usuario
'al campo de la entidad usuario en este caso nick_usu le
'asignamos el valor del nick que es una variable que recibimos
u.nick_usu = nick
Dim dt As New DataTable
'Guardanos en la tabla lo que retorna la función
dt = cu.Busca_Nick(u)
Dim cod As String
'Recuperamos el codigo, ver el scrip de los proc. en la bd
cod = dt.Rows(0).Item(0).ToString()
Return cod 'retorna el valor
End Function

Protected Sub btningresar_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btningresar.Click
Response.Redirect("Ingreso_Usuario.aspx")
End Sub

Protected Sub btnregistro_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnregistro.Click
Response.Redirect("Registro_Usuario.aspx")
End Sub

Protected Sub btnhome_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnhome.Click
Response.Redirect("Home.aspx")
Session("Usuario") = Session("Usuario")
End Sub
Protected Sub btnusuarios_Click(ByVal sender As Object, ByVal e As System.Web.
UI.ImageClickEventArgs) Handles btnusuarios.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Usuarios_Conectados.aspx")
End Sub

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 123

Protected Sub btnpagina_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnpagina.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Pagina_Usuario.aspx")
End Sub

Protected Sub btnbuscar_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnbuscar.Click
Response.Redirect("Listado_Videos.aspx?var=" + TextBox1.Text.Trim + "")
End Sub
End Class

Inmediatamente, el Home2.aspx que es donde se visualizan los videos:


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Home2.aspx.vb"
Inherits="Home2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/


TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Home</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
body {

www.detodoprogramacion.org
124 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
a:link {
color: #000099;
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #000099;
}
a:hover {
text-decoration: none;
color: #FF0000;
}
a:active {
text-decoration: none;
color: #000099;
}
-->
</style>
<script type="text/javascript" language="javascript" src="/comunes/scriptsjs/
variables.js"></script>
<script type="text/javascript">

//coge una variable dada(por su número empezando desde 0 o su nombre)


function cogerVariable(variable){
var tipo = typeof variable;
var direccion = location.href;
if (tipo == "string"){
var posicion = direccion.indexOf("?");
posicion = direccion.indexOf(variable,posicion) + variable.length;
}
else if (tipo == "number"){
var posicion=0;
for (var contador = 0 ; contador < variable + 1 ; contador++){
posicion = direccion.indexOf("=",++posicion);
if (posicion == -1)posicion=999;
}
}
if (direccion.charAt(posicion) == "="){
var final = direccion.indexOf("&",posicion);
if (final == -1){final=direccion.length;};
return direccion.substring(posicion + 1,final);
}
}
//Da la cantidad de elementos empezando desde 0
function contarVariables(){

var direccion = self.location.href;

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 125

var posicion = direccion.indexOf("?");

for (var contador = -1 ; posicion != -1 ; ++contador){


posicion = direccion.indexOf("=",++posicion);
}

if (contador < 0)contador=0;

return contador;
}
//da el nombre de una variable
function nombreVariable(variable){

var tipo = typeof variable;


var direccion = location.href;

if (tipo == "string"){
var posicion = direccion.indexOf("?");
if ((posicion > 0) && (direccion.indexOf(variable,posicion) > -1))
posicion = direccion.indexOf(variable,posicion);
else
posicion = 0;
}
else if (tipo == "number"){
var posicion = 0;
posicion = direccion.indexOf("?");
for (var contador = 0 ; ((contador < variable) && (posicion != -1)) ;
contador++){
posicion = direccion.indexOf("&", ++posicion);
}
posicion++;
}
if (posicion > 0){
var final = direccion.indexOf("=",posicion);
//alert(posicion + " , " + final);
if (final == -1){final=direccion.length;};
return direccion.substring(posicion,final);
}
}

function cuerpo(){
var texto="";
for (var cont=0 ; cont < contarVariables() ; cont++){
texto = texto + cogerVariable(cont);
}
return texto;
}

</script>
<script language="javascript" type="text/javascript">
function mostrar() {
nom="video/"+cuerpo()+".avi";

www.detodoprogramacion.org
126 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

return nom;
};
</script>

<script type="text/javascript">
var video = false;
function mostrarprueba(elVideo){
// alert("titulo -> "+video);
if (video != false)

document.getElementById("media").removeChild(video);
video = document.createElement("embed");
video.setAttribute("width", "422");
video.setAttribute("height", "299");
video.src = elVideo;

document.getElementById("media").appendChild(video);
}
</script>
</head>
<body onload="mostrar()">
<form id="form1" runat="server">
<table width="80%" border="0" align="center" cellpadding="0"
cellspacing="00" style="color: salmon" >
<tr>
<td colspan="2" rowspan="3"><img src="auxiliares/logo.png" width="345"
height="125" /></td>
<td width="328" height="85" ></td>
<td width="156" align="center"><asp:Image ID="Image1" runat="server"
Height="60px" Width="60px" /></td>
</tr>
<tr>
<td></td>
<td align="center"><asp:Label ID="lblusuario" runat="server"
Visible="False" Width="98px" ForeColor="Green" Font-Names="Arial Narrow"
style="color: red; font-family: 'Californian FB'">Desconectado</asp:Label></td>
</tr>
<tr>
<td valign="middle" style="font-family:Arial Narrow;font-
size:5;color:#333333;">
<script language ="javascript" type="text/javascript">
var hoy = new Date();
dia = hoy.getDate();
mes = hoy.getMonth();
anyo = hoy.getYear();
if (mes == "0") convertir_mes = "Enero";
else if (mes == "1") convertir_mes = "Febrero";
else if (mes == "2") convertir_mes = "Marzo";
else if (mes == "3") convertir_mes = "Abril";
else if (mes == "4") convertir_mes = "Mayo";
else if (mes == "5") convertir_mes = "Junio";
else if (mes == "6") convertir_mes = "Julio";

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 127

else if (mes == "7") convertir_mes = "Agosto";


else if (mes == "8") convertir_mes = "Septiembre";
else if (mes == "9") convertir_mes = "Octubre";
else if (mes == "10") convertir_mes = "Noviembre";
else convertir_mes = "Diciembre";
document.write ( "Lima "+ dia + " " + convertir_mes + " de " + anyo);
</script>
</td>
<td align="center"><asp:LinkButton ID="btnsession" runat="server"
Visible="False" Font-Names="Arial Narrow" ToolTip="Cerrar Sesión" style="font-
family: 'Californian FB'; text-decoration: line-through; color: blue;">[Salir]</
asp:LinkButton></td>
</tr>
<tr>
<td colspan="4" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td colspan="4" style="height: 19px">
<asp:ImageButton ID="btnhome" runat="server"
AlternateText="Home" ImageUrl="auxiliares/home.png" /><asp:ImageButton
ID="btnregistro" runat="server" AlternateText="Registro"
ImageUrl="auxiliares/registro.png" /><asp:ImageButton
ID="btningresar" runat="server"
AlternateText="Ingresar" ImageUrl="auxiliares/ingresar.png" /><asp:ImageButton
ID="btnpagina" runat="server"
ImageUrl="auxiliares/usuario.png" /><asp:ImageButton
ID="btnusuarios" runat="server"
AlternateText="Usuarios Conectados" ImageUrl="auxiliares/conectados.png" /></td>
</tr>
<tr>
<td colspan="4" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td style="width: 386px; height: 19px; background-color:
salmon;">&nbsp;</td>
<td style="height: 19px; width: 386px; background-color:
salmon;">&nbsp;</td>
<td style="height: 19px; width: 386px; background-color:
salmon;">&nbsp;</td>
<td style="height: 19px; width: 386px; background-color:
salmon;">&nbsp;</td>
</tr>
<tr>
<td style="width: 386px" >&nbsp;<asp:TextBox ID="TextBox1"
runat="server" Width="335px"></asp:TextBox></td>
<td >&nbsp;<asp:ImageButton ID="btnbuscar" runat="server"
AlternateText="Buscar" BorderColor="#D4D0C8"
Height="30" ImageUrl="auxiliares/buscar.png" Width="30" /></
td>
<td style="width: 328px" >&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>

www.detodoprogramacion.org
128 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

<td style="width: 386px" >&nbsp;</td>


<td >/td>
<td style="width: 328px" ></td>
<td>&nbsp;</td>
</tr>
<tr>
<td style="width: 386px; height: 25px;" ><asp:Label ID="lbltitulo"
runat="server" Font-Bold="False" Font-Size="16pt" Font-Names="Arial Narrow"
ForeColor="Navy" style="color: black; font-family: 'Californian FB'"></
asp:Label></td>
<td style="height: 25px" >&nbsp;</td>
<td style="width: 328px; height: 25px;" >&nbsp;</td>
<td style="height: 25px">&nbsp;</td>
</tr>
<tr>
<td colspan="4" style="background-color: salmon"><table width="100%"
height="1016" border="0" cellpadding="0" cellspacing="0">
<tr>
<td colspan="3" style="height: 9px">&nbsp;</td>
</tr>
<tr>
<td style="width: 510px; background-color: white;"></td>
<td rowspan="7" style="width: 21px">&nbsp;</td>
<td width="293" rowspan="7" valign="top" style="background-
color: white"><table width="100%" height="263" border="0" cellpadding="0"
cellspacing="0">
<tr>
<td height="22" align="center" style="font-size: 15px;
color: red; font-style: normal; font-family: forte">&nbsp;<strong>Datos del
Video</strong></td>
</tr>
<tr>
<td height="88">
<table width="100%" height="96" border="0" cellpadding="1" cellspacing="1">
<tr>
<td rowspan="4" align="center" ><asp:Image ID="imgvid"
runat="server" Height="82px" Width="83px" /></td>
<td width="158" colspan="2" style="width: 100px; font-
size: 10pt; color: red; font-family: 'Californian FB';">
<strong>Usuario:</strong></td>
</tr>
<tr>
<td colspan="2" style="width: 100px"><asp:LinkButton
ID="lkusuario" runat="server" Font-Names="Arial Narrow" ToolTip="Información
Usuario" style="color: blue; font-family: 'Californian FB'" Font-Bold="True" ></
asp:LinkButton></td>
</tr>
<tr>
<td colspan="2"style="width: 100px; font-size: 10pt;
color: red; font-family: 'Californian FB';">
<strong>Fecha Video:</strong></td>
</tr>
<tr>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 129

<td colspan="2" style="width: 100px"><asp:Label


ID="lblfecha" runat="server" Width="66px" Font-Names="Arial Narrow" style="font-
family: 'Californian FB'; color: black;" Font-Bold="True"></asp:Label></td>
</tr>
<tr>
<td align="center" style="background-color: white"
><asp:LinkButton ID="btntodos" runat="server" Font-Names="Arial Narrow"
Width="81px" ToolTip="Videos del Usuario" style="font-family: 'Californian
FB'; text-decoration: line-through; color: blue;" Font-Bold="True">ver videos</
asp:LinkButton></td>
<td colspan="2"></td>
</tr>
</table></td>
</tr>
<tr>
<td height="88" style="background-color: white"></td>
</tr>
<tr>
<td style="height: 25px; font-size: 15pt; color: red; font-
family: forte; text-align: center;">
Videos Relacionados</td>
</tr>
<tr>
<td height="88">
<table width="100%" border="0" align="center"
cellpadding="1" cellspacing="1" >
<!—Para mostrar lo video relacionados-->
<%
—Parecido a lo que hicimos en la pagina Home
Dim dt As New System.Data.DataTable
Dim objdao As New Negocio.C_Video
Dim objent As New Entidad.video
objent.Nom_vid = lbltitulo.Text.Trim
dt = objdao.Busca_video(objent)
For i As Integer = 0 To dt.Rows.Count - 1
Dim dato As String = dt.Rows(i)(0).ToString
Dim titulo As String = dt.Rows(i)(1).ToString
%>
<tr>
<td rowspan="4" style="width: 98px">
<a href="Home2.aspx?var=<%Response.Write(dato)%>">
<embed id='Embed1' src='video/<% Response.
Write(dato) %>.avi'height='80' width='100' align="top" showcontrols='false'
autostart='0' style="height: 80px"> </embed>
</a>
</td>
<td >&nbsp;</td>
</tr>
<tr>
<td style="height: 23px" >&nbsp;
<a href="Home2.aspx?var=<%Response.Write(dato)%>"
style=" font-family:'Arial Narrow';color:teal">
<%Response.Write(titulo)%>

www.detodoprogramacion.org
130 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

</a>
</td>
</tr>
<tr>
<td >
&nbsp;&nbsp;<a href="Home2.aspx?var=<%Response.
Write(dato)%>" style="font-family: 'Berlin Sans FB'; text-decoration: line-
through; color: blue;">ver video</a>
</td>
</tr>
<tr>
<td >&nbsp;</td>
</tr>
<%Next%>
</table>
</td>
</tr>
</table></td>
</tr>
<tr>
<td style="width: 510px; background-color: white;" >
<!--Aquí mediante una funcion java script mostramos
el video ,del cual recibimos su codigo como
parametro -- >
<div id="media">
<script type="text/javascript">
var elVideo="video/"+cuerpo()+".avi";
mostrarprueba(elVideo);
</script>
</div>
</td>
</tr>
<tr>
<td height="42" style="width: 510px; background-color: white;">
<table border="0" cellpadding="1" cellspacing="1" style="width:
99%" >
<tr>
<td style="width: 98px;height: 35px;font-family:'Californian
FB'; color: black;" >
<strong>Nro de Visitas:</strong></td>
<td style="width: 51px;height: 35px;" ><asp:Label
ID="lblvisitas" runat="server" Text="lblvisitas" ForeColor="Red" style="font-
family: 'Californian FB'" Font-Bold="True"></asp:Label></td>
<td style="width: 50px;height: 35px;;font-
family:'Californian FB'; color: black;" >
<strong>Puntos:</strong></td>
<td style="height: 35px; width: 57px;"><asp:Label
ID="lblpuntos" runat="server" Text="lblpuntos" ForeColor="Red" style="font-family:
'Californian FB'" Font-Bold="True"></asp:Label></td>
<td style="height: 35px; width: 40px;"><asp:ImageButton
ID="btnafavor" runat="server" Height="33px" ImageUrl="img/c_voto.png" Width="32px"
AlternateText="Votar a Favor" /></td>
<td style="height: 35px; width: 20px;"><asp:ImageButton

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 131

ID="btnencontra" runat="server" Height="31px" ImageUrl="img/m_voto.png"


Width="29px" AlternateText="Votar en Contra" /></td>
<td style="width: 35px; height: 35px;" >
<a >&nbsp;</a><asp:LinkButton ID="btndescarga"
runat="server" style="font-family: 'Californian FB'; color: red;" Font-
Bold="True">Descargar</asp:LinkButton>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="25" style="width: 510px; background-color:
white;">
</td>
</tr>
<tr>
<td height="25" style="width: 510px; background-color: white;
font-size: 17pt; color: red; font-family: forte;">
Comentario de Video</td>
</tr>
<tr>
<td align="center" valign="top" style="width: 510px; height:
312px; background-color: white;">
<asp:DataList ID="dtmensajes" runat="server" CellPadding="4"
ForeColor="#333333" Width="506px" Height="709px" RepeatColumns="1"
RepeatDirection="Horizontal" ShowFooter="False" ShowHeader="False" Font-
Names="Bradley Hand ITC">
<FooterStyle BackColor="#5D7B9D" Font-Bold="True"
ForeColor="White" />
<SelectedItemStyle BackColor="#E2DED6" Font-Bold="True"
ForeColor="#333333" />
<ItemTemplate>
<table style="width: 460px">
<tr>
<td colspan="2">&nbsp;</td>
<td style="width: 25px"></td>
<td style="width: 100px"></td>
</tr>
<tr>
<td style="width: 89px">
<!—Aquí se esta editado un campo del DataList ,esta parte mostrara los comentarios
del usuario ,para ello el datalist ya fue llenado con datos ,previamente (eso
se vera en la programación),este campo es la imagen , donde se le asigna el
valor de la foto , que es un campo de la consulta que se esta realizando (ver
programación)-->
<asp:Image ID="Image3" runat="server" Height="58px" Width="59px" ImageUrl='<%#
Eval("nom_fot","~/img/{0}") %>' />
</td>
<td style="width: 91px;color: maroon; font-family:
Arial;"> Usuario:<br />
<!—-Lo mismo hacemos con el nick del usuario-->
<asp:Label ID="Label3" runat="server" Text='<%# Eval("nick_usu") %>' Font-
Names="Arial Narrow" ForeColor="Navy" Font-Size="12pt"></asp:Label></td>

www.detodoprogramacion.org
132 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

<td colspan="2">
<!—-Y aquí colocamos el comentario-->
<asp:TextBox ID="TextBox3" runat="server" Height="82px" TextMode="MultiLine"
Width="278px" Text='<%# Eval("des_com") %>' Enabled="False" Font-Names="Arial
Narrow"></asp:TextBox></td>
</tr>
<tr>
<td style="width: 89px; height: 21px;color: maroon;
font-family: Arial;"> Mensajes:</td>
<td style="width: 91px; height: 21px" align="left">
<!—-el numero de comentarios del usuario ,estos campos son de la consulta-->
<asp:Label ID="Label5" runat="server" Text='<%# Eval("nro") %>' Font-Names="Arial
Narrow" ForeColor="Red" Width="60px"></asp:Label></td>
<td style="width: 25px; height: 21px"></td>
<td style="width: 100px; height: 21px"></td>
</tr>
<tr>
<td style="width: 89px"></td>
<td style="width: 91px"></td>
<td style="width: 25px;color: maroon; font-family:
Arial;"> Fecha:</td>
<td style="width: 100px">
<!—-Y aquí colocamos la fecha-->
<asp:Label ID="Label6" runat="server" Text='<%# Eval("fec_com") %>' Width="234px"
Font-Names="Arial Narrow" ForeColor="Navy"></asp:Label></td>
</tr>
</table>
</ItemTemplate>
<AlternatingItemStyle BackColor="White" ForeColor="#284775" />
<ItemStyle BackColor="#F7F6F3" ForeColor="#333333" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True"
ForeColor="White" />
</asp:DataList>
<asp:Label ID="Label1" runat="server" Font-Names="Arial
Narrow" ForeColor="Black" style="font-family: 'Californian FB'" Font-
Bold="True"></asp:Label></td>
</tr>
<tr>
<td style="height: 185px; width: 510px; background-color: white;">
<table width="100%" >
<tr>
<td colspan="2" rowspan="1" style="font-size: 15pt; font-
family: forte;">
Tu Comentario</td>
</tr>
<tr>
<td colspan="2" rowspan="3" style="width:
608px"><asp:TextBox ID="txtcomentario" runat="server" Height="103px"
TextMode="MultiLine" Width="492px"></asp:TextBox> </td>
</tr>
<tr></tr><tr></tr>
<tr>
<td colspan="2" rowspan="1" style="width: 608px; text-

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 133

align: center">
<asp:Button ID="btngraba" runat="server" Text="Subir
Comentario" Width="217px" Font-Name="Arial Narrow" style="font-family:
'Californian FB'" Font-Bold="True" Font-Names="Arial Narrow"/></td>
</tr>
</table></td>
</tr>
</table>
</td>
</tr>

<tr>
<td colspan="4" style="background-color: black">&nbsp; &nbsp;</td>
</tr>
</table>
<p>&nbsp;</p>
</form>
<AlternatingItemStyle BackColor="White" />
<ItemStyle BackColor="#E3EAEB" />
<HeaderStyle BackColor="#1C5E55" Font-Bold="True"
ForeColor="White" />
</body>
</html>

Código de la programación
Imports System.Data
Imports Entidad
Imports Negocio

Partial Class homePrueba


Inherits System.Web.UI.Page

'Declaramos las variable de las Clases de las funciones que vamos


'a necesitar
Dim cu As New C_Usuario
Dim cv As New C_Video
Dim cc As New C_Comentario

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load

If Not Page.IsPostBack Then


'Para datos del video que se esta viendo
Dim x As String
'Recuperamos el parametro enviado
x = Request.QueryString("var")
Dim dt, d1, d2 As New DataTable
Dim objent As New Entidad.Video
objent.Cod_vid = x.Trim
'usamos las funciones ,busca_titulo(),nick_usuario(),
detalla_video()

www.detodoprogramacion.org
134 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

dt = cv.Busca_titulo(objent)
d1 = cv.Nick_Usuario(objent)
d2 = cv.Detalla_Video(objent)
'muestra el nombre del usuario
lkusuario.Text = d1.Rows(0).Item(0).ToString()
'muestra la fecha dandole un formato
lblfecha.Text =DateTime.Parse(d2.Rows(0).Item(3).ToString()).Date
'se muestra el nro de visitas
lblvisitas.Text = d2.Rows(0).Item(4).ToString()
'se muestra el nro de puntos
lblpuntos.Text = d2.Rows(0).Item(5).ToString()
'se muestra del usuario porpietario del video
imgvid.ImageUrl = Imagen(lkusuario.Text)
'para controlar el numeros de vistas
visitas()
'lo que lista los comentarios
comentarios()
If dt.Rows.Count > 0 Then
lbltitulo.Text = dt.Rows(0)(0)
Else
MsgBox("no se encontro Video")
End If
TextBox1.Text = ""
'Esto ya se explico antes
If Session("Usuario") = "desconectado" Or Session("Usuario") = "" Then
lblusuario.Visible = False
btnsession.Visible = False
btnpagina.Visible = False
Image1.Visible = False
btnafavor.Enabled = False
btnencontra.Enabled = False
btngraba.Enabled = False
btndescarga.Enabled = False
btnusuarios.Visible = False
Else
lblusuario.Text = Session("Usuario")
lblusuario.Visible = True
btnsession.Visible = True
btnpagina.Visible = True
btnregistro.Visible = False
btningresar.Visible = False
Image1.Visible = True
lkusuario.Visible = True
btngraba.Enabled = True
btnencontra.Enabled = True
btnusuarios.Visible = True
Verifica_Imagen()
End If
End If

End Sub
'Para la imagen del usuario al que le pertenece el video

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 135

Public Function Imagen(ByVal nick As String) As String


Dim dt As New DataTable
Dim u As New Entidad.Usuario
u.nick_usu = nick
dt = cu.Perfil_Usuario(u)
Dim i As Integer
i = Integer.Parse(dt.Rows(0).Item(0))
If i = 0 Then
Return ("~/img/Usuario.png")
Else
Return ("~/img/" + dt.Rows(0).Item(1).ToString())
End If
End Function

Sub Verifica_Imagen()
Dim dt As New DataTable
Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
dt = cu.Perfil_Usuario(u)
Dim i As Integer
i = Integer.Parse(dt.Rows(0).Item(0))
If i = 0 Then
Image1.ImageUrl = "~/img/Usuario.png"
Else
Image1.ImageUrl = "~/img/" + dt.Rows(0).Item(1).ToString()
End If
Image1.Height = 60
Image1.Width = 60
End Sub
Public Function Codigo(ByVal nick As String) As String
Dim u As New Entidad.Usuario
u.nick_usu = nick
Dim dt As New DataTable
dt = cu.Busca_Nick(u)
Dim cod As String
cod = dt.Rows(0).Item(0).ToString()
Return cod
End Function

'Aquí recuperamos el nro de vistas del video que se esta viendo


Sub visitas()
Dim v As New video
v.Cod_vid = Request.QueryString("var").Trim()
v.Num_vis = Convert.ToInt16(lblvisitas.Text) + 1
cv.Act_Visitas(v)
End Sub

'Aquí guardamos en el dataList los coemtarios del video


Sub comentarios()

Dim c As New Comentario


c.Cod_vid = Request.QueryString("var").Trim()

www.detodoprogramacion.org
136 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Dim dt As New DataTable


'enun datatable guardamos los comentarios
dt = cc.Lista_Comentarios(c)
'recien los guardamos en el datalist
dtmensajes.DataSource = dt
dtmensajes.DataBind()
'preguntamos por el nro de filas
If dtmensajes.Items.Count = 0 Then
Label1.Text = "No tiene comentarios registrados"
dtmensajes.Visible = False
Else
Label1.Text = "N° de Comentarios : " + dtmensajes.Items.Count.
ToString()
End If
End Sub

Protected Sub btnsession_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btnsession.Click
Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
u.est_usu = 0
cu.Est_Con_Usuario(u)
Session("Usuario") = "desconectado"
Response.Redirect("Home.aspx")
End Sub

Protected Sub btnpuntos_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnafavor.Click
'aquí votamos a favor del video
Dim v As New video
v.Cod_vid = Request.QueryString("var").Trim()
v.Pun_vid = Convert.ToInt16(lblpuntos.Text) + 1
cv.Act_Puntos(v)
'redirecionamos la pagina nuevamente
Response.Redirect("Home2.aspx?var=" + Request.QueryString("var").Trim())
End Sub

Protected Sub ImageButton1_Click(ByVal sender As Object, ByVal e As System.


Web.UI.ImageClickEventArgs) Handles btnencontra.Click
'aquí votamos en contra del video
Dim v As New video
v.Cod_vid = Request.QueryString("var").Trim()
v.Pun_vid = Convert.ToInt16(lblpuntos.Text) - 1
cv.Act_Puntos(v)
Response.Redirect("Home2.aspx?var=" + Request.QueryString("var").Trim())
End Sub

Protected Sub btntodos_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btntodos.Click
Response.Redirect("Usuario_Videos.aspx?cod=" + lkusuario.Text)
End Sub

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 137

Protected Sub btngraba_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btngraba.Click
'Grabamo un nuevo comentario
Dim c As New Comentario
c.Cod_com = cc.Generar_Comentario().Rows(0)(0)
c.Cod_usu = Codigo(Session("Usuario"))
c.Cod_vid = Request.QueryString("var").Trim()
c.Des_com = txtcomentario.Text.Trim()
cc.Graba_Comentario(c)
Response.Redirect("Home2.aspx?var=" + Request.QueryString("var").Trim())
End Sub

Protected Sub btndescarga_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btndescarga.Click
'para descargar el video solo se bede hacer referencia al
'sitio donde de encuentra almacenado
' “var” tine almacenado el codigo del video y los videos estan
'guardados con su codigo
Response.Redirect("video/" + Request.QueryString("var").Trim() + ".avi")
End Sub

Protected Sub btnhome_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnhome.Click
Response.Redirect("Home.aspx")
Session("Usuario") = Session("Usuario")
End Sub

Protected Sub btnregistro_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnregistro.Click
Response.Redirect("Registro_Usuario.aspx")
End Sub

Protected Sub btningresar_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btningresar.Click
Response.Redirect("Ingreso_Usuario.aspx")
End Sub

Protected Sub btnpagina_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnpagina.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Pagina_Usuario.aspx")
End Sub

Protected Sub btnusuarios_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnusuarios.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Usuarios_Conectados.aspx")
End Sub

Protected Sub lkusuario_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles lkusuario.Click
Response.Redirect("Inf_Usuario.aspx?cod=" + lkusuario.Text)
End Sub

www.detodoprogramacion.org
138 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Protected Sub btnbuscar_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnbuscar.Click
Response.Redirect("Listado_Videos.aspx?var=" + TextBox1.Text.Trim + "")
End Sub
End Class

La página Ingreso
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Ingreso_Usuario.aspx.vb"
Inherits="Ingreso_Usuario" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/


TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Ingreso Usuario</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><style
type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 139

-->
</style>
<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>
</head>
<body>
<form id="form1" runat="server">
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0" >
<tr>
<td rowspan="3"><img src="auxiliares/logo.png" alt="" width="345"
height="125" /></td>
<td height="79" style="width: 173px">&nbsp;</td>
<td rowspan="3" style="width: 81px">&nbsp;</td>
</tr>
<tr>
<td height="24" style="width: 173px">&nbsp;</td>
</tr>
<tr>
<td style="font-family:Arial Narrow;font-size:5;color:#333333; width:
173px; height: 21px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<script language ="javascript" type="text/javascript">
var hoy = new Date();
dia = hoy.getDate();
mes = hoy.getMonth();
anyo = hoy.getYear();
if (mes == "0") convertir_mes = "Enero";
else if (mes == "1") convertir_mes = "Febrero";
else if (mes == "2") convertir_mes = "Marzo";
else if (mes == "3") convertir_mes = "Abril";
else if (mes == "4") convertir_mes = "Mayo";
else if (mes == "5") convertir_mes = "Junio";
else if (mes == "6") convertir_mes = "Julio";
else if (mes == "7") convertir_mes = "Agosto";
else if (mes == "8") convertir_mes = "Septiembre";
else if (mes == "9") convertir_mes = "Octubre";
else if (mes == "10") convertir_mes = "Noviembre";
else convertir_mes = "Diciembre";
document.write ( "Lima "+ dia + " " + convertir_mes + " de " + anyo);
</script>
</td>
</tr>
<tr>
<td colspan="3" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td colspan="3">
<asp:ImageButton ID="btnhome" runat="server" AlternateText="Home"
ImageUrl="auxiliares/home.png" /><asp:ImageButton
ID="btnregistro" runat="server" AlternateText="Registro"
ImageUrl="auxiliares/registro.png" /></td>
</tr>
<tr>
<td colspan="3" bgcolor="#CCCCCC" style="height: 3px"></td>

www.detodoprogramacion.org
140 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

</tr>
<tr>
<td colspan="3">&nbsp;</td>
</tr>

<tr>
<td width="228" >
<table width="100%" border="0" cellpadding="1" cellspacing="1" >
<tr>
<td colspan="3" style="font-size: 15pt; color: red; font-family:
forte; text-align: center;" >
Datos del Usuario</td>
</tr>
<tr>
<td >&nbsp;</td>
<td colspan="2" >&nbsp;</td>
</tr>
<tr>
<td style="height: 26px" >&nbsp;<asp:Label ID="Label1"
runat="server" Text="Usuario:" Width="75px" ForeColor="#804000" Font-Names="Arial
Narrow" style="color: black; font-family: 'Californian FB'"></asp:Label></td>
<td colspan="2" style="height: 26px" ><asp:TextBox ID="txtusuario"
runat="server"></asp:TextBox></td>
</tr>
<tr>
<td >&nbsp;<asp:Label ID="Label2" runat="server" Text="Contraseña
:" ForeColor="#804000" Font-Names="Arial Narrow" style="color: black; font-family:
'Californian FB'"></asp:Label></td>
<td colspan="2" ><asp:TextBox ID="txtcontraseña" runat="server"
TextMode="Password" ></asp:TextBox></td>
</tr>
<tr>
<td >&nbsp;</td>
<td colspan="2"><asp:Label ID="lblmensaje" runat="server"
ForeColor="Red" Width="152px" Font-Names="Arial Narrow" style="font-family:
'Californian FB'"></asp:Label></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><asp:Button ID="btningresar" runat="server" Text="Ingresar"
Font-Name="Arial Narrow" style="font-family: 'Californian FB'" Font-Bold="True"
Font-Names="Arial Narrow"/></td>
<td style="width: 84px"><asp:Button ID="btncancelar"
runat="server" Text="Cancelar" Font-Name="Arial Narrow" style="font-family:
'Californian FB'" Font-Bold="True" Font-Names="Arial Narrow"/></td>
</tr>
<tr>
<td >&nbsp;</td>
<td colspan="2" >&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td colspan="2">&nbsp;</td>
</tr>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 141

</table> </td>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<td colspan="3" style="background-color: lightgrey" >&nbsp;</td>
</tr>
</table>
</form>
</body>
</html>

Programación
Imports System.Data
Imports Negocio
Imports Entidad
Partial Class Ingreso_Usuario
Inherits System.Web.UI.Page

Dim cu As New C_Usuario

Protected Sub btningresar_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btningresar.Click

Dim u As New Entidad.Usuario


u.nick_usu = txtusuario.Text.Trim()
u.pas_usu = txtcontraseña.Text.Trim()
Dim dt As New DataTable
dt = cu.Ingreso_Usuario(u)
If dt.Rows.Count > 0 Then
Dim usuario As String
usuario = dt.Rows(0).Item(0)
u.nick_usu = usuario
u.est_con = 1
cu.Est_Con_Usuario(u)
Session("Usuario") = usuario
Response.Redirect("Pagina_Usuario.aspx")
Else
lblmensaje.Text = "El usuario o contraseña son incorrectas"
End If

End Sub

Protected Sub btnhome_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnhome.Click
Response.Redirect("Home.aspx")
End Sub

Protected Sub btnregistro_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnregistro.Click
Response.Redirect("Registro_Usuario.aspx")
End Sub
End Class

www.detodoprogramacion.org
142 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Página Registro de Usuario


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Registro_Usuario.aspx.vb"
Inherits="Registro_Usuario" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/


TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Registro de Usuario</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
a:link {
color: #000099;
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #000099;
}
a:hover {

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 143

text-decoration: none;
color: #FF0000;
}
a:active {
text-decoration: none;
color: #000099;
}
-->
</style>
<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>
</head>
<body>
<form id="form1" runat="server">
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="346" rowspan="3"><span style="width: 382px"><img src="auxiliares/
logo.png" alt="" width="345" height="125" /></span></td>
<td height="87" style="width: 215px">&nbsp;</td>
<td style="width: 9px">&nbsp;</td>
</tr>
<tr>
<td style="width: 215px">&nbsp;</td>
<td style="width: 9px">&nbsp;</td>
</tr>
<tr>
<td style="font-family:Arial Narrow;font-size:5;color:#333333; width:
215px; height: 19px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<script language ="javascript" type="text/javascript">
var hoy = new Date();
dia = hoy.getDate();
mes = hoy.getMonth();
anyo = hoy.getYear();
if (mes == "0") convertir_mes = "Enero";
else if (mes == "1") convertir_mes = "Febrero";
else if (mes == "2") convertir_mes = "Marzo";
else if (mes == "3") convertir_mes = "Abril";
else if (mes == "4") convertir_mes = "Mayo";
else if (mes == "5") convertir_mes = "Junio";
else if (mes == "6") convertir_mes = "Julio";
else if (mes == "7") convertir_mes = "Agosto";
else if (mes == "8") convertir_mes = "Septiembre";
else if (mes == "9") convertir_mes = "Octubre";
else if (mes == "10") convertir_mes = "Noviembre";
else convertir_mes = "Diciembre";
document.write ( "Lima "+ dia + " " + convertir_mes + " de " + any
o);
</script>
</td>
<td style="height: 19px; width: 9px;">&nbsp;</td>
</tr>
<tr>
<td colspan="3" bgcolor="#CCCCCC" style="height: 3px"></td>

www.detodoprogramacion.org
144 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

</tr>
<tr>
<td colspan="3">
<asp:ImageButton ID="btnhome" runat="server" AlternateText="Home"
ImageUrl="auxiliares/home.png" /><asp:ImageButton
ID="btningresar" runat="server" AlternateText="Ingresar"
ImageUrl="auxiliares/ingresar.png" /></td>
</tr>
<tr>
<td colspan="3" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td colspan="3" style="color: salmon; background-color: salmon" >&nbsp;</td>
</tr>
<tr>
<td style="height: 385px" colspan="3" >
<table width="100%" border="0" align="center" cellpadding="0"
cellspacing="1" style="width: 84%">
<tr>
<td colspan="2" style="font-size: 15pt; color: red; font-family: forte;
height: 21px; background-color: gainsboro"></td>
</tr>
<tr>
<td colspan="2" align="center" style="height: 21px; font-size: 15pt;
color: red; font-family: forte; background-color: whitesmoke;" >
<strong>Datos del Usuario</strong></td>
</tr>
<tr>
<td colspan="2" align="center" style="height: 21px; font-size: 15pt;
color: red; font-family: forte; background-color: gainsboro;" >&nbsp;</td>
</tr>
<tr>
<td colspan="2" style="height: 21px; font-size: 14pt; color: black;
font-family: Forte; background-color: salmon;" >
Datos Personales</td>
</tr>
<tr>
<td colspan="2" style="height: 21px; font-size: 10pt; color: teal; font-
family: Arial; background-color: silver;" >&nbsp;</td>
</tr>
<tr>
<td style="font-size: 10pt; color: black; font-family: 'Californian FB';
width: 143px; background-color: whitesmoke;" >
<strong>Nombre :</strong></td>
<td width="510" style="width: 134px; font-size: 10pt; color: black;
font-family: 'Berlin Sans FB'; background-color: whitesmoke;" ><asp:TextBox
ID="txtnombre" runat="server" Width="212px" style="font-family: 'Californian
FB'"></asp:TextBox></td>
</tr>
<tr>
<td style="font-size: 10pt; color: black; font-family: 'Californian FB';
width: 143px; background-color: whitesmoke;" >
<strong>
Apellidos:</strong></td>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 145

<td style="width: 134px; font-size: 10pt; color: black; font-family:


'Berlin Sans FB'; background-color: whitesmoke;" ><asp:TextBox ID="txtapellidos"
runat="server" Width="212px" style="font-family: 'Californian FB'"></
asp:TextBox></td>
</tr>
<tr>
<td style="font-size: 10pt; color: black; font-family: 'Californian FB';
width: 143px; background-color: whitesmoke;" >
<strong>Fecha Nacimiento:</strong></td>
<td style="font-size: 10pt; color: black; font-family: 'Berlin Sans
FB'; background-color: whitesmoke;" ><asp:DropDownList ID="cmbaño" runat="server"
AutoPostBack="True" style="font-family: 'Californian FB'"></asp:DropDownList><asp
:DropDownList ID="cmbmes" runat="server" AutoPostBack="True" style="font-family:
'Californian FB'"></asp:DropDownList><asp:DropDownList ID="cbmdia" runat="server"
style="font-family: 'Californian FB'"></asp:DropDownList></td>
</tr>
<tr>
<td style="font-size: 10pt; color: black; font-family: 'Californian FB';
width: 143px; background-color: whitesmoke;" >
<strong>
Pais:</strong></td>
<td style="width: 134px; font-size: 10pt; color: black; font-family:
'Berlin Sans FB'; background-color: whitesmoke;" ><asp:DropDownList ID="cmbpais"
runat="server" style="font-family: 'Berlin Sans FB'"> </asp:DropDownList></td>
</tr>
<tr>
<td style="width: 143px; font-size: 10pt; color: black; font-family:
'Berlin Sans FB'; background-color: whitesmoke;" >&nbsp;</td>
<td style="width: 134px; font-size: 10pt; color: black; font-family:
'Berlin Sans FB'; background-color: whitesmoke;" >&nbsp;</td>
</tr>
<tr>
<td colspan="2" style="font-size: 12pt; color: black; font-family:
Forte; height: 21px; background-color: salmon;" >
Datos Cuenta</td>
</tr>
<tr>
<td colspan="2" style="font-size: 10pt; color: #804000; font-family:
Arial; height: 21px; background-color: silver;" >&nbsp;</td>
</tr>
<tr>
<td style="font-family: 'Californian FB'; width: 143px; background-
color: whitesmoke;" >
<strong>Nombre de Usuario :</strong></td>
<td valign="middle" style="width: 336px; background-color: whitesmoke;"
><asp:TextBox ID="txtnick" runat="server" style="font-family: 'Californian FB'"></
asp:TextBox>&nbsp;<asp:ImageButton ID="btnverifica1"
runat="server" AlternateText="Verifica Usuario" Height="25px"
ImageUrl="img/c_voto.png"
Width="25px" /></td>
</tr>
<tr>
<td style="width: 143px; background-color: whitesmoke;" >&nbsp;</td>
<td style="width: 336px; background-color: whitesmoke;" >

www.detodoprogramacion.org
146 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

<asp:Label ID="lblnick" runat="server" Width="155px" ForeColor="Red"


Font-Names="Arial Narrow" style="font-family: 'Californian FB'" Font-Bold="True"
></asp:Label>
<asp:LinkButton ID="btncambiar" runat="server" Visible="False"
style="font-family: 'Californian FB'; color: blue;">Cambiar</asp:LinkButton></td>
</tr>
<tr>
<td style="font-family: 'Californian FB'; width: 143px; background-
color: whitesmoke;" >
<strong>Correo de Usuario:</strong></td>
<td style="width: 336px; background-color: whitesmoke;" ><asp:TextBox
ID="txtcorreo" runat="server" Enabled="false" Width="195px" ></asp:TextBox>
<asp:ImageButton ID="btnverifca2" runat="server"
AlternateText="Verifica Correo"
Height="25px" ImageUrl="img/c_voto.png" Width="25px" /></td>
</tr>
<tr>
<td style="width: 143px; height: 20px; background-color: whitesmoke;"
>&nbsp;</td>
<td style="width: 336px; height: 20px; background-color: whitesmoke;"
><asp:Label ID="lblcorreo" runat="server" ForeColor="Red" Width="155px" Font-
Names="Arial Narrow" style="font-family: 'Californian FB'" Font-Bold="True"></
asp:Label>
<asp:LinkButton ID="btncambiar2" runat="server" Visible="False"
style="font-family: 'Californian FB'; color: blue;">Cambiar</asp:LinkButton></td>
</tr>
<tr>
<td style="font-family: 'Californian FB'; width: 143px; background-
color: whitesmoke;" >
<strong>Contraseña :</strong></td>
<td style="width: 336px; background-color: whitesmoke;" ><asp:TextBox
ID="txtcontraseña1" runat="server" TextMode="Password" style="font-family:
'Californian FB'"></asp:TextBox></td>
</tr>
<tr>
<td style="font-family: 'Californian FB'; width: 143px; background-
color: whitesmoke;">
<strong>Repite Contraseña:</strong></td>
<td style="width: 336px; background-color: whitesmoke;"><asp:TextBox
ID="txtcontraseña2" runat="server" TextMode="Password" style="font-family:
'Californian FB'"></asp:TextBox></td>
</tr>
<tr>
<td style="width: 143px; background-color: whitesmoke;"></td>
<td style="width: 336px; background-color: whitesmoke;"></td>
</tr>
<tr>
<td style="width: 143px; background-color: whitesmoke;" >&nbsp;</td>
<td style="width: 336px; background-color: whitesmoke;" ><asp:Button
ID="btngrabar" runat="server" Text="Grabar" Enabled="False" />
<asp:Button ID="btnlimpiar" runat="server" Text="Limpiar"
style="font-family: 'Californian FB'" Font-Bold="True" /></td>
</tr>
</table> &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 147

&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;</td>


</tr>
<tr>
<td colspan="3" style="background-color: black">&nbsp;</td>
</tr>
<tr>
<td style="color: #ff0000; font-family: 'Arial Narrow'; height:
13px;">&nbsp;</td>
<td colspan="2" style="color: #ff0000; font-family: 'Californian FB';
font-size: 11pt; height: 13px;">* Para poder Registrarse , es necesario que su
cuenta de correo y
<br />nombre de usuario sean verficados antes. </td>
</tr>
</table>
</form>
</body>
</html>

Código de la Programación
Imports Entidad
Imports Negocio
Imports System.Data
Partial Class Registro_Usuario
Inherits System.Web.UI.Page

Dim cp As New C_Pais


Dim cu As New C_Usuario

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
If Not Page.IsPostBack Then
Años()
Meses()
Dias()
Lista_Pais()

End If
End Sub

Protected Sub btngrabar_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btngrabar.Click

Dim codigo, nombre, apellidos, pais, nick, contraseña, correo As String


codigo = cu.Generar_Usuario().Rows(0).Item(0).ToString()
nombre = txtnombre.Text.Trim()
apellidos = txtapellidos.Text.Trim()
pais = cmbpais.SelectedValue.ToString()
nick = txtnick.Text.Trim()
contraseña = txtcontraseña1.Text.Trim()
correo = txtcorreo.Text.Trim()

Dim fecha As Date

www.detodoprogramacion.org
148 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

fecha = Convert.ToDateTime(cbmdia.SelectedItem.Text.ToString() + "/" +


(cmbmes.SelectedIndex + 1).ToString() + "/" + cmbaño.SelectedItem.Text.ToString())

Dim u As New Usuario()


u.cod_usu = codigo
u.nom_usu = nombre
u.ape_usu = apellidos
u.fec_nac = fecha
u.cod_pais = pais
u.nick_usu = nick
u.pas_usu = contraseña
u.cor_usu = correo

If Verifica_Contraseñas() = 0 Then
cu.Graba_Usuario(u)
Session("Usuario") = nick
Response.Redirect("Pagina_usuario.aspx")

Else
Response.Write("<script>alert('Las Contraseñas no coinciden')</
script>")

End If
End Sub

Protected Sub cmbaño_SelectedIndexChanged(ByVal sender As Object, ByVal e As


System.EventArgs) Handles cmbaño.SelectedIndexChanged
Dias()
End Sub

Protected Sub cmbmes_SelectedIndexChanged(ByVal sender As Object, ByVal e As


System.EventArgs) Handles cmbmes.SelectedIndexChanged
Dias()
End Sub

Protected Sub btncambiar_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btncambiar.Click
lblnick.Text = ""
txtnick.Enabled = True
txtcorreo.Enabled = False
btncambiar.Visible = False
btngrabar.Enabled = False
txtnick.Focus()

End Sub
Protected Sub btncambiar2_Click(ByVal sender As Object, ByVal e As System.
EventArgs) Handles btncambiar2.Click
lblcorreo.Text = ""
txtcorreo.Enabled = True
btncambiar2.Visible = False
btngrabar.Enabled = False
End Sub

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 149

Sub Lista_Pais()
Dim dt As New DataTable
dt = cp.Lista_pais_activos()
cmbpais.DataSource = dt
cmbpais.DataTextField = "nom_pais"
cmbpais.DataValueField = "cod_pais"
cmbpais.DataBind()
End Sub

Sub Años()
Dim i As Integer = 1920
For i = 1920 To 1992
cmbaño.Items.Add(i)
i = +i
Next

End Sub

Sub Meses()
Dim meses() As String = {"Enero", "Febrero", "Marzo", "Abril", "Mayo",
"Junio", "Julio" _
, "Agosto", "Septiembre", "Octubre", "Noviembre",
"Diciembre"}
Dim i As Integer = 0
For i = 0 To 11
cmbmes.Items.Add(meses(i))
i = +i
Next
End Sub

Sub Dias()
cbmdia.Items.Clear()
Dim dias, i As Integer
dias = Date.DaysInMonth(cmbaño.SelectedItem.Text, cmbmes.SelectedIndex +
1)
For i = 1 To dias
cbmdia.Items.Add(i)
i = +i
Next
End Sub

Sub Verifica_Nick()
Dim nick As String
nick = txtnick.Text
Dim e As New Entidad.Usuario
e.nick_usu = nick
Dim dt As New DataTable
dt = cu.Busca_Nick(e)
If dt.Rows.Count > 0 Then
lblnick.Text = "No disponible"
lblnick.ForeColor = Drawing.Color.Red
Else

www.detodoprogramacion.org
150 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

lblnick.Text = "Disponible"
lblnick.ForeColor = Drawing.Color.Green
txtnick.Enabled = False
txtcorreo.Enabled = True
btncambiar.Visible = True
txtcontraseña1.Focus()
End If
End Sub
Sub Verifica_Correo()
Dim correo As String
correo = txtcorreo.Text
Dim e As New Entidad.Usuario
e.cor_usu = correo
Dim dt As New DataTable
dt = cu.Busca_Correo(e)
If dt.Rows.Count > 0 Then
lblcorreo.Text = "No Disponible"
lblcorreo.ForeColor = Drawing.Color.Red

Else
lblcorreo.Text = "Disponible"
lblcorreo.ForeColor = Drawing.Color.Green
txtcorreo.Enabled = False
btncambiar2.Visible = True
btngrabar.Enabled = True
End If
End Sub

Public Function Verifica_Contraseñas() As Integer


Dim con1, con2 As String
con1 = txtcontraseña1.Text.Trim()
con2 = txtcontraseña2.Text.Trim()
If con1.Equals(con2) Then
Return 0
Else
Return 1
End If
End Function

Sub limpiar()
txtnombre.Text = ""
txtapellidos.Text = ""
txtcontraseña1.Text = ""
txtcontraseña2.Text = ""
txtcorreo.Text = ""
txtnick.Text = ""
txtnombre.Focus()
txtnick.Enabled = True
lblnick.Text = ""
txtcorreo.Enabled = False
lblcorreo.Text = ""
btncambiar.Visible = False

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 151

btncambiar2.Visible = False
End Sub
Protected Sub btnlimpiar_Click(ByVal sender As Object, ByVal e As System.
EventArgs) Handles btnlimpiar.Click
limpiar()
End Sub
Protected Sub btnhome_Click(ByVal sender As Object, ByVal e As System.Web.
UI.ImageClickEventArgs) Handles btnhome.Click
Response.Redirect("Home.aspx")
End Sub
Protected Sub btningresar_Click(ByVal sender As Object, ByVal e As System.Web.
UI.ImageClickEventArgs) Handles btningresar.Click
Response.Redirect("Ingreso_Usuario.aspx")
End Sub

Protected Sub btnverifica1_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnverifica1.Click
Verifica_Nick()
If btncambiar.Visible = True And btncambiar2.Visible = True Then
txtcorreo.Enabled = False
btngrabar.Enabled = True
End If
End Sub

Protected Sub btnverifca2_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnverifca2.Click
Verifica_Correo()
End Sub
End Class

www.detodoprogramacion.org
152 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Página del Usuario


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Pagina_Usuario.aspx.vb"
Inherits="Pagina_Usuario" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/


TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Página Usuario</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
a:link {
color: #000099;
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #000099;
}
a:hover {
text-decoration: none;
color: #FF0000;
}
a:active {
text-decoration: none;
color: #000099;
}
-->
</style>
<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>
</head>
<body>
<form id="form1" runat="server">
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td align="center" colspan="3" rowspan="3"><img src="auxiliares/logo.png"
alt="" width="345" height="125" /></td>
<td width="29%" height="83" align="center">&nbsp;</td>
<td width="27%" align="center"><asp:Image ID="Image1" runat="server"
Height="60px" Width="60px" /></td>
</tr>
<tr>
<td align="center">&nbsp;</td>
<td align="center">

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 153

<asp:Label ID="lblusuario" runat="server" ForeColor="Green" Width="1px"


Font-Names="Arial Narrow" style="color: black; font-family: 'Californian FB'"></
asp:Label> </td>
</tr>
<tr>
<td height="19" style="font-family:Arial Narrow;font-size:5;color:#333333;">
&nbsp;&nbsp;
<script language ="javascript" type="text/javascript">
var hoy = new Date();
dia = hoy.getDate();
mes = hoy.getMonth();
anyo = hoy.getYear();
if (mes == "0") convertir_mes = "Enero";
else if (mes == "1") convertir_mes = "Febrero";
else if (mes == "2") convertir_mes = "Marzo";
else if (mes == "3") convertir_mes = "Abril";
else if (mes == "4") convertir_mes = "Mayo";
else if (mes == "5") convertir_mes = "Junio";
else if (mes == "6") convertir_mes = "Julio";
else if (mes == "7") convertir_mes = "Agosto";
else if (mes == "8") convertir_mes = "Septiembre";
else if (mes == "9") convertir_mes = "Octubre";
else if (mes == "10") convertir_mes = "Noviembre";
else convertir_mes = "Diciembre";
document.write ( "Lima "+ dia + " " + convertir_mes + " de " +
anyo);
</script></td>
<td align="center">
<asp:LinkButton ID="btnsession" runat="server" Font-Names="Arial Narrow"
ToolTip="Cerrar Sesión" style="color: blue; text-decoration: line-through; font-
family: 'Californian FB';">[Salir]</asp:LinkButton> </td>
</tr>
<tr>
<td colspan="5" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td colspan="5" style="height: 19px">
<asp:ImageButton ID="btnhome" runat="server" AlternateText="Home"
ImageUrl="auxiliares/home.png" /><asp:ImageButton
ID="btnusuarios" runat="server" AlternateText="Usuarios
Conectados" ImageUrl="auxiliares/conectados.png" /></td>
</tr>
<tr>
<td colspan="5" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td colspan="5">&nbsp;</td>
</tr>
<tr>
<td colspan="5">
&nbsp;&nbsp;<asp:HyperLink ID="likmensaje" runat="server" Width="174px"
ForeColor="#804000" Font-Names="Arial Narrow" style="color: red; font-family:
'Californian FB'">[likmensaje]</asp:HyperLink></td>

www.detodoprogramacion.org
154 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

</tr>
<tr>
<td colspan="5">&nbsp;</td>
</tr>
<tr>
<td colspan="5" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td colspan="5" style="height: 19px">
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Mensajes_
Usuario.aspx"
Target="principal" ImageUrl="auxiliares/mensajes.png">Mensajes</
asp:HyperLink><asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/Cambia_
Contraseña.aspx"
Target="principal" ImageUrl="auxiliares/contraseña.
png">Contraseña</asp:HyperLink><asp:ImageButton
ID="ImageButton2" runat="server" ImageUrl="auxiliares/perfil.png"
/><asp:ImageButton
ID="ImageButton3" runat="server" ImageUrl="auxiliares/
imagen.png" /><asp:ImageButton
ID="ImageButton4" runat="server" ImageUrl="auxiliares/
mvideos.png" /><asp:HyperLink
ID="HyperLink3" runat="server" ImageUrl="auxiliares/
subir.png" NavigateUrl="~/Sube_Video.aspx"
Target="principal">HyperLink</asp:HyperLink></td>
</tr>
<tr>
<td colspan="5" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td colspan="5" >&nbsp;</td>
</tr>
<tr>
<td colspan="5" valign="middle">
<iframe name="principal" id="IFRAME1" style="width: 100%; border-top-style:
none; border-right-style: none; height: 576px; border-bottom-style: none;"></
iframe></td>
</tr>
</table>
</form>
</body>
</html>

Programación
mports Entidad
Imports Negocio
Imports System.Data
Partial Class Pagina_Usuario
Inherits System.Web.UI.Page

Dim cu As New Negocio.C_Usuario


Dim cm As New Negocio.C_Mensajes

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 155

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
If Not Page.IsPostBack Then
lblusuario.Text = Session("Usuario")
Nro_Mensajes()
Verifica_Imagen()
End If
End Sub

Protected Sub btnsession_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btnsession.Click
Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
u.est_usu = 0
cu.Est_Con_Usuario(u)
Session("Usuario") = "desconectado"
Response.Redirect("Home.aspx")

End Sub
Sub Verifica_Imagen()
Dim dt As New DataTable
Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
'u.nick_usu = "suzan"
dt = cu.Perfil_Usuario(u)
Dim i As Integer
i = Integer.Parse(dt.Rows(0).Item(0))
If i = 0 Then
Image1.ImageUrl = "~/img/Usuario.png"
Else
Image1.ImageUrl = "~/img/" + dt.Rows(0).Item(1).ToString()
End If
Image1.Height = 60
Image1.Width = 60
End Sub

Public Function Codigo(ByVal nick As String) As String


Dim u As New Entidad.Usuario
u.nick_usu = nick
Dim dt As New DataTable
dt = cu.Busca_Nick(u)
Dim cod As String
cod = dt.Rows(0).Item(0).ToString()
Return cod
End Function

Sub Nro_Mensajes()
Dim m As New Mensajes
m.cod_usu_rec = Codigo(Session("Usuario"))
Dim dt As New DataTable
dt = cm.Lista_Mensajes_Nuevos(m)
likmensaje.Text = "Mensajes (" + dt.Rows.Count.ToString() + " nuevos)"

www.detodoprogramacion.org
156 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

End Sub
Protected Sub btnhome_Click(ByVal sender As Object, ByVal e As System.Web.
UI.ImageClickEventArgs) Handles btnhome.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Home.aspx")
End Sub

Protected Sub btnusuarios_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnusuarios.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Usuarios_Conectados.aspx")
End Sub

Protected Sub ImageButton2_Click(ByVal sender As Object, ByVal e As System.


Web.UI.ImageClickEventArgs) Handles ImageButton2.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Perfil_Usuario.aspx")
End Sub

Protected Sub ImageButton3_Click(ByVal sender As Object, ByVal e As System.


Web.UI.ImageClickEventArgs) Handles ImageButton3.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Imagen_Usuario.aspx")
End Sub

Protected Sub ImageButton4_Click(ByVal sender As Object, ByVal e As System.


Web.UI.ImageClickEventArgs) Handles ImageButton4.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Videos_Lista.aspx")
End Sub
End Class

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 157

Página Mensajes
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Mensajes_Usuario.aspx.vb"
Inherits="Prueba" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/


TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Mensajes</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
a:link {
color: #000099;
}
a:visited {
color: #000099;
}
a:hover {
color: #FF0000;
}
a:active {
color: #000099;
}
-->
</style>
</head>
<body>
<form id="form1" runat="server">
<table border="0" align="center" cellpadding="0" cellspacing="0"
style="width: 8px; height: 554px">

<tr>
<td>&nbsp;</td>
<td colspan="4" rowspan="15">
<iframe style="height: 555px; width: 581px; position: relative;
visibility: visible; overflow: visible; left: 0; top: 0;" name="principal2"></
iframe> </td>
</tr>

<tr>
<td style="font-size: 14pt; font-family: Forte; text-decoration:
overline; text-align: center;">Panel de Mensajes</td>
</tr>
<tr>

www.detodoprogramacion.org
158 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

<td style="height: 1px; background-color: salmon">&nbsp;</td>


</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td align="center"><img src="auxiliares/contract.gif" width="44"
height="44" /></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>

<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/
Mensajes_Recibidos.aspx" Target="principal2" Width="126px" ImageUrl="auxiliares/
mrecibidos.png"></asp:HyperLink></td>
</tr>
<tr>
<td><asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/
Mensajes_Enviados.aspx" Target="principal2" Width="127px" ImageUrl="auxiliares/
menviados.png"></asp:HyperLink></td>
</tr>
<tr>
<td><asp:HyperLink ID="HyperLink3" runat="server" NavigateUrl="~/
Enviar_Mensajes.aspx" Target="principal2" Width="128px" ImageUrl="auxiliares/
emensaje.png"></asp:HyperLink></td>
</tr>
</table></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td rowspan="2" style="background-color: black">&nbsp;</td>
</tr>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 159

</table>
</form>
</body>
</html>

Codificación
Imports Entidad
Imports Negocio
Imports System.Data
Partial Class Prueba
Inherits System.Web.UI.Page
Dim cu As New Negocio.C_Usuario
Dim cm As New Negocio.C_Mensajes

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
Session("Codigo") = Codigo(Session("Usuario"))
Session("Usuario") = Session("Usuario")
End Sub

Public Function Codigo(ByVal nick As String) As String


Dim u As New Entidad.Usuario
u.nick_usu = nick
Dim dt As New DataTable
dt = cu.Busca_Nick(u)
Dim cod As String
cod = dt.Rows(0).Item(0).ToString()
Return cod
End Function

End Class

www.detodoprogramacion.org
160 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Página Mensajes Recibidos


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Mensajes_Recibidos.aspx.
vb" Inherits="Mensajes_Recibidos" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/


TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Mensajes Recibidos</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
a:link {
color: #000099;
}
a:visited {
color: #000099;
}
a:hover {
color: #FF0000;
}
a:active {
color: #000099;
}
-->
</style>
</head>
<body>
<form id="form1" runat="server">
<table align="center">
<tr>
<td colspan="6">&nbsp;</td>
</tr>
<tr>
<td colspan="6" style="height: 21px; font-size: 15pt; color: red;
font-family: Forte; background-color: lightgrey;">
Mensajes Nuevos</td>
</tr>
<tr>
<td colspan="6" style="font-size: 15pt; color: red; font-family:
Arial; height: 21px">
</td>
</tr>
<tr>
<td style="width: 100px">&nbsp;</td>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 161

<td colspan="4" rowspan="4">


<asp:GridView ID="grvmennue" runat="server"
AutoGenerateColumns="False" CellPadding="4"
ForeColor="Black" GridLines="Horizontal" Width="381px"
BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" Font-
Names="Californian FB">
<FooterStyle BackColor="#CCCC99" ForeColor="Black" />
<Columns>
<asp:TemplateField>
<EditItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</EditItemTemplate>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="nick_usu"
HeaderText="Usuario" />
<asp:BoundField DataField="asu_men"
HeaderText="Asunto" />
<asp:BoundField DataField="fec_men" HeaderText="Fecha"
/>
<asp:TemplateField HeaderText="Ver">
<ItemTemplate>
&nbsp;<asp:HyperLink ID="HyperLink2"
runat="server" NavigateUrl='<%# Eval("cod_men","Leer_Men_Re.aspx?cod={0}")
%>'>leer</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<SelectedRowStyle BackColor="#CC3333" Font-Bold="True"
ForeColor="White" />
<PagerStyle BackColor="White" ForeColor="Black"
HorizontalAlign="Right" />
<HeaderStyle BackColor="#333333" Font-Bold="True"
ForeColor="White" />
</asp:GridView>
<br />
<asp:Label ID="lblnuevos" runat="server" Font-Names="Arial
Narrow" Text="Label" Width="367px"></asp:Label><br />
</td>
<td style="width: 100px">&nbsp;</td>
</tr>
<tr>
<td style="width: 100px">&nbsp;</td>
<td style="width: 100px">&nbsp;</td>
</tr>
<tr>
<td style="width: 100px">&nbsp;</td>
<td style="width: 100px">&nbsp;</td>
</tr>
<tr>
<td style="width: 100px">&nbsp;</td>
<td style="width: 100px">&nbsp;</td>

www.detodoprogramacion.org
162 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

</tr>
<tr>
<td style="width: 100px; height: 21px;">&nbsp;</td>
<td style="width: 100px; height: 21px;">
<asp:Button ID="btnelimina1" runat="server" Text="Eliminar"
style="font-family: 'Berlin Sans FB'" /></td>
<td style="width: 100px; height: 21px;">&nbsp;</td>
<td style="width: 100px; height: 21px;">&nbsp;</td>
<td style="width: 100px; height: 21px;">&nbsp;</td>
<td style="width: 100px; height: 21px;">&nbsp;</td>
</tr>
<tr>
<td style="width: 100px; height: 21px">
</td>
<td style="width: 100px; height: 21px">
</td>
<td style="width: 100px; height: 21px">
</td>
<td style="width: 100px; height: 21px">
</td>
<td style="width: 100px; height: 21px">
</td>
<td style="width: 100px; height: 21px">
</td>
</tr>
<tr>
<td colspan="6" style="height: 21px; font-size: 15pt; color: red;
font-family: Forte; background-color: lightgrey;">
Todos los mensajes</td>
</tr>
<tr>
<td colspan="6" style="font-size: 15pt; color: red; font-family:
Arial; height: 21px">
</td>
</tr>
<tr>
<td style="width: 100px">&nbsp;</td>
<td colspan="4" rowspan="4">
<asp:GridView ID="grvmentod" runat="server"
AutoGenerateColumns="False" CellPadding="3"
ForeColor="Black" GridLines="Vertical" Width="381px"
BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px"
Font-Names="Californian FB">
<FooterStyle BackColor="#CCCCCC" />
<Columns>
<asp:TemplateField>
<EditItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</EditItemTemplate>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</ItemTemplate>
</asp:TemplateField>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 163

<asp:BoundField DataField="nick_usu"
HeaderText="Usuario" />
<asp:BoundField DataField="asu_men"
HeaderText="Asunto" />
<asp:BoundField DataField="fec_men" HeaderText="Fecha"
/>
<asp:TemplateField HeaderText="Ver">
<ItemTemplate>
&nbsp;<asp:HyperLink ID="HyperLink2"
runat="server" NavigateUrl='<%# Eval("cod_men","Leer_Men_Re.aspx?cod={0}")
%>'>leer</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<SelectedRowStyle BackColor="#000099" Font-Bold="True"
ForeColor="White" />
<PagerStyle BackColor="#999999" ForeColor="Black"
HorizontalAlign="Center" />
<HeaderStyle BackColor="Black" Font-Bold="True"
ForeColor="White" />
<AlternatingRowStyle BackColor="#CCCCCC" />
</asp:GridView>
<br />
<asp:Label ID="lbltodos" runat="server" Font-Names="Arial
Narrow" Text="Label" Width="368px" style="font-family: 'Berlin Sans FB'"></
asp:Label><br />
</td>
<td style="width: 100px">&nbsp;</td>
</tr>
<tr>
<td style="width: 100px">&nbsp;</td>
<td style="width: 100px">&nbsp;</td>
</tr>
<tr>
<td style="width: 100px">&nbsp;</td>
<td style="width: 100px">&nbsp;</td>
</tr>
<tr>
<td style="width: 100px">&nbsp;</td>
<td style="width: 100px">&nbsp;</td>
</tr>
<tr>
<td style="width: 100px">&nbsp;</td>
<td colspan="4" rowspan="1">
<asp:Button ID="btnelimina2" runat="server" Text="Eliminar"
Font-Names="Arial Narrow" style="font-family: 'Berlin Sans FB'" /></td>
<td style="width: 100px">&nbsp;</td>
</tr>
</table>
</form>
</body>
</html>

www.detodoprogramacion.org
164 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Programación
Imports Entidad
Imports Negocio
Imports System.Data
Partial Class Mensajes_Recibidos
Inherits System.Web.UI.Page

Dim cu As New Negocio.C_Usuario


Dim cm As New Negocio.C_Mensajes
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load
If Not Page.IsPostBack Then
Mensajes_Nuevos()
Mensajes_Todos()
End If
End Sub

Sub Mensajes_Nuevos()
Dim m As New Mensajes
m.cod_usu_rec = Session("Codigo")
grvmennue.DataSource = cm.Lista_Mensajes_Nuevos(m)
grvmennue.DataBind()
If grvmennue.Rows.Count = 0 Then
btnelimina1.Visible = False
lblnuevos.Text = "Usted no tiene mensajes nuevos"
Else
lblnuevos.Text = "N° de Mensajes : " + grvmennue.Rows.Count.ToString()
End If

End Sub

Sub Mensajes_Todos()
Dim m As New Mensajes
m.cod_usu_rec = Session("Codigo")
grvmentod.DataSource = cm.Lista_Mensajes_Todos(m)
grvmentod.DataBind()
If grvmentod.Rows.Count = 0 Then
btnelimina2.Visible = False
lbltodos.Text = "Usted no tiene mensajes"
Else
lbltodos.Text = "N° de Mensajes : " + grvmentod.Rows.Count.ToString()
End If

End Sub

Protected Sub btnelimina1_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btnelimina1.Click
For i As Integer = 0 To grvmennue.Rows.Count - 1
Dim chekc As New CheckBox
chekc = grvmennue.Rows(i).Cells(0).FindControl("CheckBox1")
Dim lin As New HyperLink

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 165

lin = grvmennue.Rows(i).Cells(4).FindControl("HyperLink2")
Dim cadena As String
cadena = lin.NavigateUrl.ToString()
Dim codigo As String
codigo = cadena.Substring(cadena.LastIndexOf("=") + 1, 8).ToString()
If chekc.Checked Then
Dim m As New Mensajes
m.cod_men = codigo
m.cod_usu_rec = Session("Codigo")
cm.Eliminar_Mensajes_Recibidos(m)
End If
Next
Mensajes_Nuevos()
End Sub

Protected Sub btnelimina2_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btnelimina2.Click
For i As Integer = 0 To grvmentod.Rows.Count - 1
Dim chekc As New CheckBox
chekc = grvmentod.Rows(i).Cells(0).FindControl("CheckBox1")
Dim lin As New HyperLink
lin = grvmentod.Rows(i).Cells(4).FindControl("HyperLink2")
Dim cadena As String
cadena = lin.NavigateUrl.ToString()
Dim codigo As String
codigo = cadena.Substring(cadena.LastIndexOf("=") + 1, 8).ToString()
If chekc.Checked Then
Dim m As New Mensajes
m.cod_men = codigo
m.cod_usu_rec = Session("Codigo")
cm.Eliminar_Mensajes_Recibidos(m)
End If
Next
Mensajes_Todos()
End Sub
Public Function Codigos(ByVal nick As String) As String
Dim u As New Entidad.Usuario
u.nick_usu = nick
Dim dt As New DataTable
dt = cu.Busca_Nick(u)
Dim cod As String
cod = dt.Rows(0).Item(0).ToString()
Return cod
End Function
End Class

www.detodoprogramacion.org
166 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Página Mensajes Enviados


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Mensajes_Enviados.aspx.
vb" Inherits="Mensajes_Enviados" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/


TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Mensajes Enviados</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
a:link {
color: #000099;
}
a:visited {
color: #000099;
}
a:hover {
color: #FF0000;
}
a:active {

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 167

color: #000099;
}
-->
</style>
</head>
<body>
<form id="form1" runat="server">
<table align="center">
<tr>
<td colspan="6" style="height: 21px">&nbsp;</td>
</tr>
<tr>
<td colspan="6" style="font-family: 'Lucida Calligraphy';
background-color: salmon">
<strong style="font-size: 15pt; font-family: forte">Mensajes
Enviados</strong></td>
</tr>
<tr>
<td colspan="6" style="height: 21px">&nbsp;</td>
</tr>
<tr>
<td style="width: 11px">&nbsp;</td>
<td colspan="4" rowspan="4">
<asp:GridView ID="grvmenenv" runat="server"
AutoGenerateColumns="False" CellPadding="4"
ForeColor="Black" GridLines="Horizontal" Width="381px"
BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" Font-
Names="Californian FB">
<FooterStyle BackColor="#CCCC99" ForeColor="Black" />
<Columns>
<asp:TemplateField>
<EditItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server"
/></EditItemTemplate>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server"
/></ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="nick_usu"
HeaderText="Usuario" />
<asp:BoundField DataField="asu_men"
HeaderText="Asunto" />
<asp:BoundField DataField="fec_men" HeaderText="Fecha"
/>
<asp:TemplateField HeaderText="Ver">
<ItemTemplate>
&nbsp;<asp:HyperLink ID="HyperLink2"
runat="server" NavigateUrl='<%# Eval("cod_men","Leer_Men_En.aspx?cod={0}")
%>'>leer</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<SelectedRowStyle BackColor="#CC3333" Font-Bold="True"

www.detodoprogramacion.org
168 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

ForeColor="White" />
<PagerStyle BackColor="White" ForeColor="Black"
HorizontalAlign="Right" />
<HeaderStyle BackColor="#333333" Font-Bold="True"
ForeColor="White" />
</asp:GridView>
<br />
<asp:Label ID="lblenviados" runat="server" Font-Names="Arial
Narrow" Text="Label" Width="368px" style="font-family: 'Berlin Sans FB'"></
asp:Label><br />
</td>
<td>&nbsp;</td>
</tr>
<tr>
<td style="width: 11px">&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td style="width: 11px">&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td style="width: 11px">&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td style="width: 11px">&nbsp;</td>
<td colspan="4"><asp:Button ID="btnelimina1" runat="server"
Text="Eliminar" Font-Names="Arial Narrow" style="font-family: 'Berlin Sans FB'"
/></td>
<td>&nbsp;</td>
</tr>
</table>
</form>
</body>
</html>

Programación
Imports Entidad
Imports Negocio
Imports System.Data
Partial Class Mensajes_Enviados
Inherits System.Web.UI.Page

Dim cu As New Negocio.C_Usuario


Dim cm As New Negocio.C_Mensajes

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
If Not Page.IsPostBack Then
Mensajes_Enviados()
End If

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 169

End Sub

Sub Mensajes_Enviados()
Dim m As New Mensajes
m.cod_usu_env = Session("Codigo")
grvmenenv.DataSource = cm.Lista_Mensajes_Escritos(m)
grvmenenv.DataBind()
If grvmenenv.Rows.Count = 0 Then
grvmenenv.Visible = False
lblenviados.Text = "Usted no tiene mensajes "
Else
lblenviados.Text = "N° de mensajes : " + grvmenenv.Rows.Count.
ToString()
End If

End Sub
Protected Sub btnelimina1_Click(ByVal sender As Object, ByVal e As System.
EventArgs) Handles btnelimina1.Click
For i As Integer = 0 To grvmenenv.Rows.Count - 1
Dim chekc As New CheckBox
chekc = grvmenenv.Rows(i).Cells(0).FindControl("CheckBox1")
Dim lin As New HyperLink
lin = grvmenenv.Rows(i).Cells(4).FindControl("HyperLink2")
Dim cadena As String
cadena = lin.NavigateUrl.ToString()
Dim codigo As String
codigo = cadena.Substring(cadena.LastIndexOf("=") + 1, 8).ToString()
If chekc.Checked Then
Dim m As New Mensajes
m.cod_men = codigo
m.cod_usu_env = Session("Codigo")
cm.Eliminar_Mensajes_Enviados(m)
End If
Next
Mensajes_Enviados()
End Sub
End Class

www.detodoprogramacion.org
170 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Página Leer Mensajes Enviados


<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Leer Mensajes Enviados</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
.Estilo1 {color: #FFFFFF}
-->
</style>
</head>
<body>
<form id="form1" runat="server">
<table width="60%" border="0" align="center" cellpadding="1"
cellspacing="1">
<tr>
<td style="width: 100px">
<asp:Label ID="Label1" runat="server" ForeColor="White"
Text="espacioss"></asp:Label>&nbsp;</td>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 171

<td style="background-color: black;" colspan="3">&nbsp; &nbsp;</td>


</tr>
<tr>
<td style="width: 100px">&nbsp;</td>
<td style="font-size: 15pt; font-family: forte; background-color:
silver; text-align: center;" colspan="3">&nbsp;Mensaje&nbsp;</td>
</tr>
<tr>
<td style="width: 100px">&nbsp;</td>
<td style="width: 100px; height: 22px; background-color:
whitesmoke;">&nbsp;</td>
<td style="width: 100px; height: 22px; background-color:
whitesmoke;">&nbsp;</td>
<td colspan="1" style="width: 100px; height: 22px; background-color:
whitesmoke">&nbsp;</td>
</tr>
<tr>
<td style="width: 100px">&nbsp;</td>
<td style="width: 100px; height: 22px; background-color:
whitesmoke;">De:</td>
<td style="width: 100px; height: 22px; background-color:
whitesmoke"><asp:Label ID="lblusuario" runat="server" Width="150px"
ForeColor="Gray" Font-Names="Arial Narrow"></asp:Label></td>
<td style="width: 100px; height: 22px; background-color:
whitesmoke;">&nbsp;</td>
</tr>
<tr>
<td style="width: 100px; height: 22px;">&nbsp;</td>
<td style="font-family: 'Californian FB'; height: 22px; width: 100px;
background-color: whitesmoke;">Asunto:</td>
<td style="height: 22px; width: 100px; background-color:
whitesmoke;"><asp:Label ID="lblasunto" runat="server" Width="150px"
ForeColor="Gray" Font-Names="Arial Narrow"></asp:Label></td>
<td style="width: 100px; height: 22px; background-color:
whitesmoke;">&nbsp;</td>
</tr>
<tr>
<td style="width: 100px; height: 22px;">&nbsp;</td>
<td style="font-family: 'Californian FB'; width: 100px; height: 22px;
background-color: whitesmoke;">Fecha:</td>
<td style="width: 100px; height: 22px; background-color:
whitesmoke"><asp:Label ID="lblfecha" runat="server" Width="150px" ForeColor="Gray"
Font-Names="Arial Narrow"></asp:Label></td>
<td style="width: 100px; height: 22px; background-color:
whitesmoke;">&nbsp;</td>
</tr>
<tr>
<td style="width: 100px">&nbsp;</td>
<td style="font-family: 'Californian FB'; width: 100px; height: 22px;
background-color: whitesmoke;">Mensaje:</td>
<td style="width: 100px; height: 22px; background-color:
whitesmoke">&nbsp;</td>
<td colspan="1" style="width: 100px; height: 22px; background-color:
whitesmoke">&nbsp;</td>

www.detodoprogramacion.org
172 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

</tr>
<tr>
<td rowspan="3" style="width: 100px">&nbsp;</td>
<td colspan="3" rowspan="1" style="width: 100px; height: 22px;
background-color: whitesmoke">
<asp:TextBox ID="txtmensaje" runat="server" Height="159px"
ReadOnly="True" TextMode="MultiLine" Width="415px"></asp:TextBox> </td>
</tr>
<tr>
<td colspan="3" rowspan="1" style="background-color: silver">
</td>
</tr>
</table>
</form>
</body>
</html>

Código de programación
Imports Entidad
Imports Negocio
Imports System.Data

Partial Class Leer_Men_En


Inherits System.Web.UI.Page

Dim cu As New Negocio.C_Usuario


Dim cm As New Negocio.C_Mensajes

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
If Not Page.IsPostBack Then
Muestra_Mensaje()
End If
End Sub

Sub Muestra_Mensaje()
Dim m As New Mensajes
m.cod_men = Request.Params("cod").ToString()
m.cod_usu_env = Session("Codigo")
Dim dt As New DataTable
dt = cm.Detalle_Mensaje_Enviados(m)
lblusuario.Text = dt.Rows(0).Item(0).ToString()
lblasunto.Text = dt.Rows(0).Item(1).ToString()
lblfecha.Text = dt.Rows(0).Item(2).ToString()
txtmensaje.Text = dt.Rows(0).Item(3).ToString()

End Sub

End Class

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 173

Página Leer Mensajes Recibidos


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Leer_Men_Re.aspx.vb"
Inherits="Leer_Mensaje" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/


TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Leo Mensaje</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
a:link {
color: #000099;
text-decoration: none;
}
a:visited {
text-decoration: none;

www.detodoprogramacion.org
174 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

color: #000099;
}
a:hover {
text-decoration: none;
color: #FF0000;
}
a:active {
text-decoration: none;
color: #000099;
}
-->
</style>
</head>
<body>
<form id="form1" runat="server">
<table width="60%" border="0" align="center" cellpadding="1"
cellspacing="1">
<tr>
<td height="21" style="width: 100px">
<asp:Label ID="Label1" runat="server" ForeColor="White"
Text="espacioss"></asp:Label></td>
<td style="background-color: black;" colspan="4">
&nbsp;</td>
</tr>
<tr>
<td style="width: 100px">&nbsp;</td>
<td style="font-size: 15pt; font-family: forte; background-color:
silver; text-align: center;" colspan="4">
&nbsp;Mensaje</td>
</tr>
<tr>
<td style="font-size: 11pt; width: 100px; color: navy; font-family:
'Arial Narrow'; height: 23px"></td>
<td style="height: 23px; background-color: whitesmoke;">&nbsp;</td>
<td colspan="2" style="height: 23px; background-color:
whitesmoke;">&nbsp;</td>
</tr>
<tr>
<td style="font-size: 11pt; width: 100px; color: navy; font-
family: 'Arial Narrow'; height: 21px"></td>
<td style="font-family: 'Californian FB'; background-color:
whitesmoke;">De:</td>
<td colspan="2" style="background-color: whitesmoke;">
<asp:Label ID="lblusuario" runat="server" Width="150px"
ForeColor="Gray" Font-Names="Arial Narrow"></asp:Label> </td>
</tr>
<tr>
<td style="font-size: 11pt; width: 100px; color: navy; font-
family: 'Arial Narrow';height: 21px;"></td>
<td style="font-family: 'Californian FB'; background-color:
whitesmoke;">Asunto:</td>
<td colspan="2" style="background-color: whitesmoke;">
<asp:Label ID="lblasunto" runat="server" Width="150px"

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 175

ForeColor="Gray" Font-Names="Arial Narrow"></asp:Label> </td>


</tr>
<tr>
<td style="font-size: 11pt; width: 100px; color: navy; font-
family: 'Arial Narrow';height: 21px;"></td>
<td style="font-family: 'Californian FB'; background-color:
whitesmoke;">Fecha:</td>
<td colspan="2" style="background-color: whitesmoke">
<asp:Label ID="lblfecha" runat="server" Width="150px"
ForeColor="Gray" Font-Names="Arial Narrow"></asp:Label> </td>
</tr>
<tr>
<td style="font-size: 11pt; width: 100px; color: navy; font-
family: 'Arial Narrow'; height: 21px;"></td>
<td style="font-family: 'Californian FB'; background-color:
whitesmoke;">Mensaje:</td>
<td colspan="2" style="background-color: whitesmoke"></td>
</tr>
<tr>
<td colspan="1"></td>
<td colspan="4" style="background-color: whitesmoke; text-
align: center"><asp:TextBox ID="txtmensaje" runat="server" Height="159px"
TextMode="MultiLine"
Width="450px" ReadOnly="True" Font-Names="Arial Narrow"></
asp:TextBox></td>
</tr>
<tr>
<td colspan="1"></td>
<td colspan="4" style="background-color: whitesmoke">&nbsp;</td>
</tr>
<tr>
<td colspan="1" rowspan="5" style="height: 21px"></td>
<td colspan="4" rowspan="5" style="height: 21px; background-color:
silver;">&nbsp;<asp:LinkButton ID="btresponder" runat="server" style="color:
blue; font-family: 'Californian FB'; text-decoration: line-through">Responder</
asp:LinkButton></td>
</tr>
</table>
</form>
</body>
</html>

Código de programación
Imports Entidad
Imports Negocio
Imports System.Data
Partial Class Leer_Mensaje
Inherits System.Web.UI.Page

Dim cu As New Negocio.C_Usuario


Dim cm As New Negocio.C_Mensajes
Protected Sub btresponder_Click(ByVal sender As Object, ByVal e As System.

www.detodoprogramacion.org
176 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

EventArgs) Handles btresponder.Click


Session("Usuario") = Session("Usuario")
Session("Destinatario") = lblusuario.Text
Response.Redirect("Enviar_Mensajes.aspx")
End Sub
Sub Muestra_Mensaje()
Dim m As New Mensajes
m.cod_men = Request.Params("cod").ToString()
m.cod_usu_rec = Session("Codigo")
Dim dt As New DataTable
dt = cm.Detalle_Mensaje_Recibidos(m)
lblusuario.Text = dt.Rows(0).Item(0).ToString()
lblasunto.Text = dt.Rows(0).Item(1).ToString()
lblfecha.Text = dt.Rows(0).Item(2).ToString()
txtmensaje.Text = dt.Rows(0).Item(3).ToString()
End Sub
Sub Mensaje_leido()
Dim m As New Mensajes
m.cod_men = Request.Params("cod").ToString()
m.cod_usu_rec = Session("Codigo")
cm.Actualiza_Mensajes_Leidos(m)
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
If Not Page.IsPostBack Then
Muestra_Mensaje()
Mensaje_leido()
End If
End Sub
End Class

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 177

Página Enviar Mensaje


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Enviar_Mensajes.aspx.vb"
Inherits="Escribir_Mensaje" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/


TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Escribir Mensaje</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
.Estilo1 {color: #FFFFFF}
-->
</style>
</head>
<body>
<form id="form1" runat="server">
<table width="70%" border="0" align="center" cellpadding="1" cellspacing="1"
style="width: 45%">
<tr>
<td colspan="6" style="background-color: whitesmoke">&nbsp;</td>
</tr>
<tr>
<td height="20" style="background-color: silver; text-align:
center;" colspan="6">
<span style="font-size: 15pt; color: black; font-family: forte;
background-color: silver">
Envio de Mensajes</span></td>
</tr>
<tr>
<td colspan="6">&nbsp;</td>
</tr>
<tr>
<td style="background-color: whitesmoke;">&nbsp;</td>
<td style=" font-family:'Californian FB'; width: 65px; background-
color: whitesmoke;">
<strong>Para:</strong></td>
<td width="196" colspan="2" style="background-color:
whitesmoke"><asp:TextBox ID="txtreceptor" runat="server" Width="191px"
style="font-family: 'Californian FB'"></asp:TextBox></td>
<td colspan="2" style="background-color: whitesmoke">
<asp:ImageButton ID="btnusuario" runat="server" Height="40px"
ImageUrl="auxiliares/Usuario4.png" Width="37px" AlternateText="Lista de Usuarios"
/></td>
</tr>

www.detodoprogramacion.org
178 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

<tr>
<td style="background-color: whitesmoke;">&nbsp;</td>
<td style=" font-family:'Californian FB'; width: 65px; background-
color: whitesmoke;">
<strong>De:</strong></td>
<td colspan="2" style="background-color: whitesmoke" ><asp:Label
ID="txtenvia" runat="server" Width="154px" style="font-family: 'Californian FB'"
Font-Bold="True"></asp:Label></td>
<td width="64" rowspan="4" valign="top" style="background-color:
whitesmoke">&nbsp;<span class="Estilo1">asdsadas</span></td>
<td width="64" rowspan="4" valign="top" style="background-color:
whitesmoke"><asp:ListBox ID="lblusuarios" runat="server" AutoPostBack="True"
Height="121px" Visible="False"
Width="119px" style="position: relative; font-family:
'Californian FB';" Font-Bold="True"></asp:ListBox></td>
</tr>
<tr>
<td style="background-color: whitesmoke;">&nbsp;</td>
<td style=" font-family:'Californian FB'; width: 65px; background-
color: whitesmoke;">
<strong>Asunto:</strong></td>
<td colspan="2" style="background-color: whitesmoke"><asp:TextBox
ID="txtasunto" runat="server" style="font-family: 'Californian FB'" Font-
Bold="True"></asp:TextBox></td>
</tr>
<tr>
<td style="background-color: whitesmoke;">&nbsp;</td>
<td style=" font-family:'Californian FB'; width: 65px; background-
color: whitesmoke;">
<strong>Mensaje:</strong></td>
<td colspan="2" style="background-color: whitesmoke">&nbsp;</td>
</tr>
<tr>
<td style="background-color: whitesmoke;">&nbsp;</td>
<td colspan="3" style="background-color: whitesmoke;"><asp:TextBox
ID="txtmensaje" runat="server" Height="154px" TextMode="MultiLine"
Width="283px"></asp:TextBox> </td>
</tr>
<tr>
<td style="width: 29px">&nbsp;</td>
<td style="width: 65px">&nbsp;</td>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<td style="background-color: silver; text-align: center;"
colspan="6">&nbsp;
<asp:Button ID="btnenviar" runat="server" Text="Enviar" Font-
Names="Arial Narrow" style="font-family: 'Californian FB'" Font-Bold="True" />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;&nbsp;
<asp:Button ID="btncancelar" runat="server" Text="Cancelar"
Font-Names="Arial Narrow" style="font-family: 'Californian FB'" Font-Bold="True"
/>&nbsp;</td>
</tr>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 179

</table>
</form>
</body>
</html>

Código de la Programación
mports Entidad
Imports Negocio
Imports System.Data
Partial Class Escribir_Mensaje
Inherits System.Web.UI.Page

Dim cu As New Negocio.C_Usuario


Dim cm As New Negocio.C_Mensajes

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
If Not Page.IsPostBack Then

txtenvia.Text = Session("Usuario")
txtreceptor.Text = Session("Destinatario")
End If
End Sub

Protected Sub btnenviar_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btnenviar.Click
Session("Destinatario") = ""
Dim m As New Mensajes
m.cod_men = cm.Generar_Mensajes().Rows(0).Item(0).ToString()
m.asu_men = txtasunto.Text
m.cod_usu_rec = Codigo(txtreceptor.Text)
m.cod_usu_env = Codigo(txtenvia.Text)
m.des_men = txtmensaje.Text
Response.Write("<script>alert('" + cm.Graba_Mensajes(m) + "')</script>")

End Sub

Public Function Codigo(ByVal nick As String) As String


Dim u As New Entidad.Usuario
u.nick_usu = nick
Dim dt As New DataTable
dt = cu.Busca_Nick(u)
Dim cod As String
cod = dt.Rows(0).Item(0).ToString()
Return cod
End Function
Protected Sub lblusuarios_SelectedIndexChanged(ByVal sender As Object, ByVal e
As System.EventArgs) Handles lblusuarios.SelectedIndexChanged

www.detodoprogramacion.org
180 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

txtreceptor.Text = ""
txtreceptor.Text = lblusuarios.SelectedItem.Text
End Sub

Protected Sub btnusuario_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnusuario.Click
lblusuarios.Visible = True
lblusuarios.DataSource = cu.Lista_Usuario()
lblusuarios.DataTextField = "nick_usu"
lblusuarios.DataBind()
End Sub
End Class

Página Contraseña
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Cambia_Contraseña.aspx.
vb" Inherits="Cambia_Contraseña" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/


TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Cambio de Contraseña</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><style

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 181

type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
-->
</style></head>
<body>
<form id="form1" runat="server">
<table width="70%" border="0" align="center" cellpadding="1" cellspacing="1"
>
<tr>
<td style="height: 19px; background-color: black;"
colspan="4">&nbsp;</td>
</tr>
<tr>
<td align="center" style="height: 19px; font-size: 15pt; color:
red; font-family: forte; background-color: silver;" colspan="4">&nbsp;Cambio de
Contraseña</td>
</tr>
<tr>
<td colspan="4" style="background-color: black">
&nbsp;</td>
</tr>
<tr>
<td rowspan="5" align="center" style="width: 271px; color: #0066ff;
font-family: 'Arial Narrow'; background-color: whitesmoke;" ><img src="auxiliares/
computo1.gif" width="114" height="123" /></td>
<td style="width: 329px; color: #0066ff; font-family: 'Arial
Narrow'; background-color: whitesmoke;" ><asp:Label ID="Label1" runat="server"
Text="Usuario:" Width="75px" Font-Names="Arial Narrow" ForeColor="#0066FF"
style="color: black; font-family: 'Californian FB'" Font-Bold="True"></asp:Label>
</td>
<td colspan="2" style="width: 271px; color: #0066ff; font-family:
'Arial Narrow'; background-color: whitesmoke" ><asp:TextBox ID="txtusuario"
runat="server" Enabled="False"></asp:TextBox> </td>
</tr>
<tr>
<td style="width: 329px; color: black; font-family: 'Californian FB';
background-color: whitesmoke;" >
<strong>Contraseña Anterior :</strong></td>
<td colspan="2" style="width: 271px; color: #0066ff; font-family:
'Arial Narrow'; background-color: whitesmoke" ><asp:TextBox ID="txtantigua"
runat="server" TextMode="Password"></asp:TextBox> </td>
</tr>
<tr>
<td style="width: 329px; color: black; font-family: 'Californian FB';
background-color: whitesmoke;" >
<strong>Contraseña Nueva :</strong></td>
<td colspan="2" style="width: 271px; color: #0066ff; font-family: 'Arial
Narrow'; background-color: whitesmoke" ><asp:TextBox ID="txtnueva" runat="server"

www.detodoprogramacion.org
182 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

TextMode="Password"></asp:TextBox></td>
</tr>
<tr>
<td style="width: 329px; color: #0066ff; font-family: 'Arial Narrow';
background-color: whitesmoke;" >&nbsp;</td>
<td colspan="2" style="width: 271px; color: #0066ff; font-family: 'Arial
Narrow'; background-color: whitesmoke" >&nbsp;</td>
</tr>
<tr>
<td style="width: 329px; color: #0066ff; font-family: 'Arial Narrow';
background-color: whitesmoke; height: 24px;" >&nbsp;</td>
<td width="64" style="width: 271px; color: #0066ff; font-family: 'Arial
Narrow'; background-color: whitesmoke; height: 24px;"><asp:Button ID="btningresar"
runat="server" Text="Cambiar" Font-Names="Arial Narrow" style="font-family:
'Californian FB'" Font-Bold="True" /></td>
<td width="167" style="width: 271px; color: #0066ff; font-family: 'Arial
Narrow'; background-color: whitesmoke; height: 24px;"><asp:Button ID="btncancelar"
runat="server" Text="Cancelar" Font-Names="Arial Narrow" style="font-family:
'Californian FB'" Font-Bold="True" /></td>
</tr>
<tr>
<td style="height: 21px; background-color: silver; text-align: right;"
colspan="4" >&nbsp;
<asp:Label ID="lblmensaje" runat="server" ForeColor="Red"
Width="152px" Font-Names="Arial Narrow" style="color: red; font-family:
'Californian FB'"></asp:Label></td>
</tr>
</table>
</form>
</body>
</html>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 183

Código de la Página
mports Entidad
Imports Negocio
Imports System.Data
Partial Class Cambia_Contraseña
Inherits System.Web.UI.Page
Dim cu As New C_Usuario
Protected Sub btningresar_Click(ByVal sender As Object, ByVal e As System.
EventArgs) Handles btningresar.Click
Dim u As New Entidad.Usuario
u.nick_usu = txtusuario.Text
u.pas_usu = txtantigua.Text
Dim dt As New DataTable
dt = cu.Conf_Password(u)
If dt.Rows.Count > 0 Then
u.pas_usu = txtnueva.Text
cu.Actualiza_Password(u)
lblmensaje.Text = "La operación fue completada con exito"
txtusuario.Text = Session("Usuario")
Else
lblmensaje.Text = "La contraseña antigua no coincide"
txtusuario.Text = Session("Usuario")
End If

End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
If Not Page.IsPostBack Then
txtusuario.Text = Session("Usuario")
End If
End Sub

Protected Sub btncancelar_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btncancelar.Click
txtusuario.Text = Session("Usuario")
txtnueva.Text = ""
txtantigua.Text = ""
End Sub

Public Function Codigo(ByVal nick As String) As String


Dim u As New Entidad.Usuario
u.nick_usu = nick
Dim dt As New DataTable
dt = cu.Busca_Nick(u)
Dim cod As String
cod = dt.Rows(0).Item(0).ToString()
Return cod
End Function

End Class

www.detodoprogramacion.org
184 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Página Perfil
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Perfil_Usuario.aspx.vb"
Inherits="Perfil_Usuario" %>

<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0,


Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Namespace="System.Web.UI" TagPrefix="asp" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit"


TagPrefix="cc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/


TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Perfil de Usuario</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
a:link {
color: #000099;
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #000099;
}
a:hover {
text-decoration: none;
color: #FF0000;
}
a:active {
text-decoration: none;
color: #000099;
}
-->
</style>
<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>
</head>
<body>
<form id="form1" runat="server">
<table width="80%" border="0" align="center" cellpadding="0"
cellspacing="0">

<tr>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 185

<td width="347" rowspan="3" ><img src="auxiliares/logo.png" alt=""


width="345" height="125" /> </td>
<td height="91" colspan="2"></td>
<td align="center" style="width: 153px" >
<asp:Image ID="Image1" runat="server" Height="60px" Width="60px"
/>
</td>
</tr>
<tr>
<td colspan="2" style="height: 19px" ></td>
<td align="center" style="width: 153px; height: 19px" >
<asp:Label ID="lblusuario" runat="server" forecolor="Green"
width="1px" Font-Names="Arial Narrow" style="color: black; font-family:
'Californian FB'"></asp:Label> </td>
</tr>
<tr>
<td colspan="2" style="font-family:Arial Narrow;font-
size:5;color:#333333; height: 2px;">&nbsp;&nbsp;
<script language ="javascript" type="text/javascript">
var hoy = new Date();
dia = hoy.getDate();
mes = hoy.getMonth();
anyo = hoy.getYear();
if (mes == "0") convertir_mes = "Enero";
else if (mes == "1") convertir_mes = "Febrero";
else if (mes == "2") convertir_mes = "Marzo";
else if (mes == "3") convertir_mes = "Abril";
else if (mes == "4") convertir_mes = "Mayo";
else if (mes == "5") convertir_mes = "Junio";
else if (mes == "6") convertir_mes = "Julio";
else if (mes == "7") convertir_mes = "Agosto";
else if (mes == "8") convertir_mes = "Septiembre";
else if (mes == "9") convertir_mes = "Octubre";
else if (mes == "10") convertir_mes = "Noviembre";
else convertir_mes = "Diciembre";
document.write ( "Lima "+ dia + " " + convertir_mes + " de " + anyo);
</script></td>
<td align="center" style="width: 153px; height: 2px;" >
<asp:LinkButton ID="btndesconectarse" runat="server" Font-
Names="Arial Narrow" ToolTip="Cerrar Sessión" style="color: blue; font-family:
'Californian FB'; text-decoration: line-through">[Cerrar]</asp:LinkButton>
</td>
</tr>
<tr>
<td colspan="4" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td colspan="4" style="height: 19px">
<asp:ImageButton ID="btnhome" runat="server"
AlternateText="Home" ImageUrl="auxiliares/home.png" /><asp:ImageButton
ID="btnusuarios" runat="server" AlternateText="Usuarios
Conectados" ImageUrl="auxiliares/conectados.png" />&nbsp;
</td>

www.detodoprogramacion.org
186 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

</tr>
<tr>
<td colspan="4" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td colspan="4" style="height: 19px">
</td>
</tr>
<tr>
<td colspan="4" style="height: 19px">&nbsp;&nbsp;
<asp:HyperLink ID="likmensaje" runat="server" Font-
Names="Arial Narrow" ForeColor="#804000"
Width="174px" style="color: red; font-family: 'Californian
FB'">[likmensaje]</asp:HyperLink></td>
</tr>
<tr>
<td colspan="4" style="height: 19px">
</td>
</tr>
<tr>
<td colspan="4" bgcolor="#CCCCCC" style="height: 3px">
</td>
</tr>
<tr>
<td colspan="4" >
<asp:HyperLink ID="HyperLink1" runat="server"
ImageUrl="auxiliares/mensajes.png"
NavigateUrl="~/Pagina_Usuario.aspx" Target="_
parent">Mensajes</asp:HyperLink><asp:HyperLink
ID="HyperLink2" runat="server" ImageUrl="auxiliares/
contraseña.png" NavigateUrl="~/Pagina_Usuario.aspx"
Target="_parent">Contraseña</
asp:HyperLink><asp:ImageButton ID="ImageButton3" runat="server"
ImageUrl="auxiliares/imagen.png"
/><asp:ImageButton ID="ImageButton4" runat="server"
ImageUrl="auxiliares/mvideos.png"
/><asp:HyperLink ID="HyperLink3" runat="server"
ImageUrl="auxiliares/subir.png"
NavigateUrl="~/Pagina_Usuario.aspx" Target="_parent">HyperLink</asp:HyperLink></
td>
</tr>
<tr>
<td bgcolor="#cccccc" colspan="4" style="height: 3px">
</td>
</tr>
<tr>
<td style="width: 100px; height: 19px; background-color: salmon;">
</td>
<td colspan="2" style="height: 19px; width: 100px; background-
color: salmon;">
</td>
<td style="width: 153px; height: 19px; background-color: salmon;">
</td>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 187

</tr>
<tr>
<td colspan="4" style="height: 494px">
<table width="80%" align="center" >
<tr>
<td style="font-size: 13pt; color: red; font-family:
Forte; height: 21px; text-decoration: line-through;" colspan="4">
Perfil de Usuario</td>
</tr>
<tr>
<td colspan="4" style="font-size: 12pt; color: red;
font-family: Arial; height: 21px; background-color: black;">&nbsp;</td>
</tr>
<tr>
<td width="47" style="width: 7px">
<asp:Label ID="Label1" runat="server" ForeColor="White"
Text="Label"></asp:Label></td>
<td width="200"></td>
<td colspan="2"></td>
</tr>
<tr>
<td colspan="2" style="height: 21px; font-size: 12pt;
color: black; font-family: Forte; background-color: salmon;">
Datos Personales</td>
<td colspan="2" style="height: 21px; background-color:
silver;">&nbsp;</td>
</tr>
<tr>
<td style="width: 7px; background-color: whitesmoke;"
></td>
<td ></td>
<td colspan="2" ></td>
</tr>
<tr>
<td style="width: 7px; background-color: whitesmoke;"
></td>
<td style="font-size: 10pt; color: black; font-family:
'Californian FB'" >
<strong>Nombres:</strong></td>
<td colspan="2"><asp:TextBox ID="txtnombre"
runat="server" Width="212px"></asp:TextBox></td>
</tr>
<tr>
<td style="width: 7px; background-color: whitesmoke;"></td>
<td style="font-size: 10pt; color: black; font-family:
'Californian FB'" >
<strong>Apellidos :</strong></td>
<td colspan="2" ><asp:TextBox
ID="txtapellidos" runat="server" Width="212px"></asp:TextBox></td>
</tr>
<tr>
<td style="width: 7px; background-color: whitesmoke;" ></td>
<td style="font-size: 10pt; color: black; font-family:

www.detodoprogramacion.org
188 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

'Californian FB'" >


<strong>Fecha de Nacimiento :</strong></td>
<td colspan="2" >
<asp:DropDownList ID="cmbaño" runat="server"
AutoPostBack="True" style="font-family: 'Californian FB'"></asp:DropDownList>
<asp:DropDownList ID="cmbmes" runat="server"
AutoPostBack="True" style="font-family: 'Californian FB'"></asp:DropDownList>
<asp:DropDownList ID="cbmdia" runat="server"
style="font-family: 'Californian FB'"></asp:DropDownList>
</td>
</tr>
<tr>
<td style="width: 7px; background-color: whitesmoke;"
></td>
<td style="font-size: 10pt; color: black; font-family:
'Californian FB'" >
<strong>Pais:</strong></td>
<td colspan="2" ><asp:DropDownList
ID="cmbpais" runat="server" style="font-family: 'Californian FB'"></
asp:DropDownList></td>
</tr>
<tr>
<td style="width: 7px; background-color: whitesmoke;" ></td>
<td ></td>
<td colspan="2"></td>
</tr>
<tr>
<td colspan="2" style="font-size: 12pt; color: black; font-
family: Forte; height: 21px; background-color: salmon;">
Datos Cuenta</td>
<td colspan="2" style="background-color:
silver"></td>
</tr>
<tr>
<td style="height: 21px; width: 7px; background-color:
whitesmoke;" ></td>
<td style="height: 21px" ></td>
<td colspan="2" style="height: 21px" ></td>
</tr>
<tr>
<td style="width: 7px; height: 21px; background-color:
whitesmoke;" ></td>
<td style="font-size: 10pt; color: black; font-family:
'Californian FB'; height: 26px;" >
<strong>Usuario:</strong></td>
<td colspan="2" style="height: 26px"><asp:TextBox
ID="txtnick" runat="server" Enabled="False" style="font-family: 'Californian
FB'"></asp:TextBox></td>
</tr>
<tr>
<td style="width: 7px; height: 21px; background-color:
whitesmoke;" ></td>
<td style="font-size: 10pt; color: black; font-family:
'Californian FB'; height: 21px;" >

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 189

<strong>Correo:</strong></td>
<td colspan="2" style="height: 21px" >
<asp:TextBox ID="txtcorreo" runat="server"
Enabled="False" style="font-family: 'Californian FB'" Width="258px"></
asp:TextBox></td>
</tr>
<tr>
<td style="height: 21px; width: 7px;
background-color: whitesmoke;" ></td>
<td style="height: 21px" ></td>
<td colspan="2" style="height: 21px"></td>
</tr>
<tr>
<td style="height: 21px; width: 7px; background-color:
whitesmoke;" ></td>
<td style="height: 20px" ></td>
<td width="83" style="height: 20px"><asp:Button
ID="btngraba" runat="server" Text="Actualizar" style="font-family: 'Californian
FB'" font-bold="True" /></td>
<td width="276" style="height: 20px;"><asp:Button
ID="btncancelar" runat="server" Text="Cancelar" Font-Names="Arial Narrow"
style="font-family: 'Californian FB'" font-bold="True" /></td>
</tr>
<tr>
<td style="height: 21px; width: 7px; background-color:
whitesmoke;" ></td>
<td style="height: 21px" ></td>
<td colspan="2" style="height: 21px"></td>
</tr>
<tr>
<td style="height: 21px; width: 7px;"></td>
<td style="height: 21px"></td>
<td colspan="2" style="height: 21px"><asp:Label
ID="lblmensaje" runat="server" Width="372px" Font-Names="Arial Narrow"
style="font-size: 10pt; color: red; font-family: 'Californian FB'"></asp:Label></
td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="background-color: black;" colspan="4">&nbsp;
&nbsp;&nbsp;</td>
</tr>
</table>
</form>
</body>
</html>

www.detodoprogramacion.org
190 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Código de la Programación
Imports Entidad
Imports Negocio
Imports System.Data
Partial Class Perfil_Usuario
Inherits System.Web.UI.Page

Dim cu As New C_Usuario


Dim cp As New C_Pais
Dim dt As New DataTable
Dim cm As New Negocio.C_Mensajes

Protected Sub btnactualizar_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btngraba.Click
Try

Dim nombre, apellidos, pais, nick, correo As String


Dim fecha As Date
nombre = txtnombre.Text.Trim()
apellidos = txtapellidos.Text.Trim()
pais = cmbpais.SelectedValue.ToString()
nick = txtnick.Text.Trim()
fecha = Convert.ToDateTime(cbmdia.SelectedItem.Text.ToString() + "/" +
(cmbmes.SelectedIndex + 1).ToString() + "/" + cmbaño.SelectedItem.Text.ToString())

Dim u As New Usuario()


u.nick_usu = nick
u.nom_usu = nombre
u.ape_usu = apellidos
u.fec_nac = fecha
u.cod_pais = pais

lblmensaje.Text = cu.Actualiza_Usuario(u)
Limpia()
Catch ex As Exception

End Try
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
If Not Page.IsPostBack Then
Años()
Meses()
Dias()
Lista_Pais()
Perfil()
lblusuario.Text = Session("Usuario")
Verifica_Imagen()
Nro_Mensajes()
End If

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 191

End Sub

Protected Sub btndesconectarse_Click(ByVal sender As Object, ByVal e As


System.EventArgs) Handles btndesconectarse.Click
Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
u.est_usu = 0
cu.Est_Con_Usuario(u)
Session("Usuario") = "desconectado"
Response.Redirect("Home.aspx")
End Sub
Protected Sub btncancelar_Click(ByVal sender As Object, ByVal e As System.
EventArgs) Handles btncancelar.Click
Limpia()
End Sub

Protected Sub cmbaño_SelectedIndexChanged(ByVal sender As Object, ByVal e As


System.EventArgs) Handles cmbaño.SelectedIndexChanged
Dias()
End Sub

Protected Sub cmbmes_SelectedIndexChanged(ByVal sender As Object, ByVal e As


System.EventArgs) Handles cmbmes.SelectedIndexChanged
Dias()
End Sub
Sub Lista_Pais()
cmbpais.Items.Clear()
Dim dt As New DataTable
dt = cp.Lista_pais_activos()
cmbpais.DataSource = dt
cmbpais.DataTextField = "nom_pais"
cmbpais.DataValueField = "cod_pais"
cmbpais.DataBind()
End Sub
Sub Años()
cmbaño.Items.Clear()
Dim i As Integer
For i = 1920 To 1992
cmbaño.Items.Add(i)
i = +i
Next
End Sub
Sub Meses()
cmbmes.Items.Clear()
Dim meses() As String = {"Enero", "Febrero", "Marzo", "Abril", "Mayo",
"Junio", "Julio" _
, "Agosto", "Septiembre", "Octubre", "Noviembre",
"Diciembre"}
cmbmes.Items.Clear()
Dim i As Integer = 0
For i = 1 To 12
cmbmes.Items.Add(meses(i - 1))
i = +i

www.detodoprogramacion.org
192 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Next
End Sub
Sub Dias()
cbmdia.Items.Clear()
Dim dias, i As Integer
dias = Date.DaysInMonth(cmbaño.SelectedItem.Text, cmbmes.SelectedIndex +
1)
For i = 1 To dias
cbmdia.Items.Add(i)
i = +i
Next
End Sub
Sub Perfil()

Try
Dim u As New Entidad.Usuario
txtnick.Text = Session("Usuario")
Dim e As New Entidad.Usuario
e.nick_usu = txtnick.Text
txtcorreo.Text = cu.Lista_Correo(e).Rows(0)(1)
u.nick_usu = Session("Usuario")
dt = cu.Perfil_Usuario(u)
txtnombre.Text = dt.Rows(0).Item(2).ToString()
txtapellidos.Text = dt.Rows(0).Item(3).ToString()
cbmdia.Items.FindByText((dt.Rows(0).Item(4).ToString()).Substring(0,
2)).Selected = True
cmbpais.Items.FindByText(dt.Rows(0).Item(5).ToString()).Selected =
True

Catch ex As Exception

End Try

End Sub
Sub Limpia()
txtnombre.Text = ""
txtapellidos.Text = ""
txtcorreo.Text = ""
txtnombre.Focus()
Lista_Pais()
Años() : Meses() : Dias()
End Sub
Sub Verifica_Imagen()

Dim dt As New DataTable


Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
'u.nick_usu = "suzan"
dt = cu.Perfil_Usuario(u)
Dim i As Integer
i = Integer.Parse(dt.Rows(0).Item(0))
If i = 0 Then

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 193

Image1.ImageUrl = "~/img/Usuario.png"
Else
Image1.ImageUrl = "~/img/" + dt.Rows(0).Item(1).ToString()
End If
Image1.Height = 60
Image1.Width = 60

End Sub
Public Function Codigo(ByVal nick As String) As String
Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
Dim dt As New DataTable
dt = cu.Busca_Nick(u)
Dim cod As String
cod = dt.Rows(0).Item(0).ToString()
Return cod
End Function

Protected Sub btnhome_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnhome.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Home.aspx")
End Sub

Protected Sub btnusuarios_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnusuarios.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Usuarios_Conectados.aspx")
End Sub

Sub Nro_Mensajes()
Dim m As New Mensajes
m.cod_usu_rec = Codigo(Session("Usuario"))
Dim dt As New DataTable
dt = cm.Lista_Mensajes_Nuevos(m)
likmensaje.Text = "Mensajes (" + dt.Rows.Count.ToString() + " nuevos)"
End Sub

Protected Sub ImageButton3_Click(ByVal sender As Object, ByVal e As System.


Web.UI.ImageClickEventArgs) Handles ImageButton3.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Imagen_Usuario.aspx")
End Sub

Protected Sub ImageButton4_Click(ByVal sender As Object, ByVal e As System.


Web.UI.ImageClickEventArgs) Handles ImageButton4.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Videos_Lista.aspx")
End Sub
End Class

www.detodoprogramacion.org
194 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Página Imagen del Usuario


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Imagen_Usuario.aspx.vb"
Inherits="Imagen_Usuario" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/


TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Imagen Usuario</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
a:link {
color: #000099;
text-decoration: none;

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 195

}
a:visited {
color: #000099;
text-decoration: none;
}
a:hover {
color: #FF0000;
text-decoration: none;
}
a:active {
color: #000099;
text-decoration: none;
}
-->
</style>
<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>

</head>
<body>
<form id="form1" runat="server">
<table width="765" border="0" align="center" cellpadding="0"
cellspacing="0">
<tr>
<td rowspan="3" style="width: 323px" ><img src="auxiliares/logo.
png" alt="" width="345" height="125" /></td>
<td height="91" style="width: 334px"></td>
<td align="center" style="width: 156px" >
<asp:Image ID="Image1" runat="server" Height="60px"
Width="60px" /></td>
</tr>
<tr>
<td style="height: 19px; width: 334px;" ></td>
<td align="center" style="width: 156px; height: 19px" >
<asp:Label ID="lblusuario" runat="server" forecolor="Green"
width="1px" Font-Names="Arial Narrow" style="color: red; font-family: 'Californian
FB'" Font-Bold="True"></asp:Label> </td>
</tr>
<tr>
<td style="font-family:Arial Narrow;font-
size:12;color:#333333;width: 334px;">&nbsp;&nbsp;
<script language ="javascript" type="text/javascript">
var hoy = new Date();
dia = hoy.getDate();
mes = hoy.getMonth();
anyo = hoy.getYear();
if (mes == "0") convertir_mes = "Enero";
else if (mes == "1") convertir_mes = "Febrero";
else if (mes == "2") convertir_mes = "Marzo";
else if (mes == "3") convertir_mes = "Abril";
else if (mes == "4") convertir_mes = "Mayo";
else if (mes == "5") convertir_mes = "Junio";
else if (mes == "6") convertir_mes = "Julio";
else if (mes == "7") convertir_mes = "Agosto";

www.detodoprogramacion.org
196 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

else if (mes == "8") convertir_mes = "Septiembre";


else if (mes == "9") convertir_mes = "Octubre";
else if (mes == "10") convertir_mes = "Noviembre";
else convertir_mes = "Diciembre";
document.write ( "Lima "+ dia + " " + convertir_mes + " de " +
anyo);
</script></td>
<td align="center" style="width: 156px; height: 2px;" >
<asp:LinkButton ID="btndesconectarse" runat="server" Font-
Names="Arial Narrow" ToolTip="Cerrar Sessión" style="color: blue; font-family:
'Californian FB'; text-decoration: line-through">[Cerrar]</asp:LinkButton>
</td>
</tr>
<tr>
<td colspan="3" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td colspan="3" style="height: 19px">
<asp:ImageButton ID="btnhome" runat="server"
AlternateText="Home" ImageUrl="auxiliares/home.png" /><asp:ImageButton
ID="btnusuarios" runat="server" AlternateText="Usuarios
Conectados" ImageUrl="auxiliares/conectados.png" />&nbsp; </td>
</tr>
<tr>
<td colspan="3" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td colspan="3" style="height: 19px"> </td>
</tr>
<tr>
<td colspan="3" style="height: 19px">&nbsp;&nbsp;
<asp:HyperLink ID="likmensaje" runat="server" Font-
Names="Arial Narrow" ForeColor="#804000"
Width="174px" style="color: black; font-family:
'Californian FB'" Font-Bold="True">[likmensaje]</asp:HyperLink></td>
</tr>
<tr>
<td colspan="3" style="height: 19px"> </td>
</tr>
<tr>
<td colspan="3" bgcolor="#CCCCCC" style="height: 3px">
</td>
</tr>
<tr>
<td colspan="3" style="height: 19px" >
<asp:HyperLink ID="HyperLink1" runat="server"
ImageUrl="auxiliares/mensajes.png"
NavigateUrl="~/Pagina_Usuario.aspx" Target="_
parent">Mensajes</asp:HyperLink><asp:HyperLink
ID="HyperLink2" runat="server" ImageUrl="auxiliares/
contraseña.png" NavigateUrl="~/Pagina_Usuario.aspx"
Target="_parent">Contraseña</
asp:HyperLink><asp:ImageButton ID="ImageButton2" runat="server"

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 197

ImageUrl="auxiliares/perfil.png" /><asp:ImageButton
ID="ImageButton4" runat="server"
ImageUrl="auxiliares/mvideos.png"
/><asp:HyperLink ID="HyperLink3" runat="server"
ImageUrl="auxiliares/subir.png"
NavigateUrl="~/Pagina_Usuario.aspx" Target="_parent">HyperLink</asp:HyperLink></
td>
</tr>
<tr>
<td bgcolor="#cccccc" colspan="3" style="height: 3px">
</td>
</tr>
<tr>
<td style="width: 323px; height: 19px"> </td>
<td style="height: 19px; width: 334px;"> </td>
<td style="width: 156px; height: 19px"> </td>
</tr>
<tr>
<td colspan="3" style="height: 278px">
<table border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td colspan="3" align="center" style="font-size: 13pt; color:
black; font-style: normal; font-family: forte; height: 19px; background-color:
whitesmoke;">
Tu Imagen</td>
</tr>
<tr>
<td style="font-size: 10pt; color: maroon; font-style: normal;
font-family: Arial; background-color: silver; height: 16px;" colspan="3">
&nbsp;</td>
</tr>
<tr>
<td style="text-align: center; font-size: 10pt; color: mediumblue;
font-style: normal; font-family: 'Californian FB';" >
&nbsp;<strong>Imagen Actual</strong></td>
<td colspan="2" style="text-align: center" >
<asp:Image ID="imgusuario" runat="server" Height="100px" Width="100px"
/></td>
</tr>
<tr>
<td style="width: 116px; height: 19px;"> </td>
<td colspan="2" >
</td>
</tr>
<tr>
<td style="width: 116px; height: 19px"> </td>
<td colspan="2"> </td>
</tr>
<tr>
<td style="width: 116px; font-size: 10pt; color: black; font-family:
'Californian FB';">&nbsp;<strong>Nueva Imagen</strong></td>
<td colspan="3">
&nbsp;<asp:FileUpload ID="btnexamina" runat="server" Font-

www.detodoprogramacion.org
198 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Names="Arial Narrow" style="font-family: 'Californian FB'" Font-Bold="True"


/>&nbsp;&nbsp;</td>
</tr>
<tr>
<td style="width: 116px; height: 19px;">&nbsp;</td>
<td colspan="2" style="width: 133px; height: 19px;">&nbsp;</td>
</tr>
<tr>
<td style="width: 116px; height: 24px;">&nbsp;</td>
<td style="width: 133px; height: 24px; text-align:
center;">&nbsp;<asp:Button ID="btnaceptar" runat="server" Text="Aceptar"
style="font-family: 'Californian FB'" Font-Bold="True" /></td>
<td style="width: 133px; height: 24px;"><asp:Button ID="btncancelar"
runat="server" Text="Cancelar" Font-Names="Arial Narrow" style="font-family:
'Californian FB'" Font-Bold="False" /></td>
</tr>
<tr>
<td style="width: 116px; height: 19px; background-color:
whitesmoke;">&nbsp;</td>
<td colspan="2" style="width: 116px; height: 19px; background-color:
whitesmoke;">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>

Código de la Programación
Imports Entidad
Imports Negocio
Imports System.Data
Partial Class Imagen_Usuario
Inherits System.Web.UI.Page

Dim cu As New C_Usuario


Dim cp As New C_Pais
Dim cm As New C_Mensajes
Dim nombre, extencion As String

Protected Sub btnaceptar_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btnaceptar.Click
Try
Dim sFile As String
sFile = String.Empty 'cadena vacia
Dim unidad As String
unidad = Request.PhysicalPath.ToString().Substring(0, 2)
Dim aplicacion As String
aplicacion = Request.ApplicationPath.ToString()
Dim strPathFile As String

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 199

strPathFile = unidad + "\\Proyecto\" + aplicacion + "\\img\\"


Dim ruta As String
Dim tamaño As Integer
nombre = Codigo(Session("Usuario"))
ruta = btnexamina.PostedFile.FileName
tamaño = ruta.Length
extencion = ruta.Substring(tamaño - 4, 4)
sFile = System.IO.Path.GetFileName(nombre + extencion)
btnexamina.PostedFile.SaveAs(strPathFile + "\\" + sFile)
Response.Write("<script>alert('Subido Correctamente')</script>")
Actualiza_Foto(1)
Verifica_Imagen()

Catch ex As Exception
Response.Write("<script>alert('" + ex.Message.ToString() + "')</
script>")
End Try

End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
If Not Page.IsPostBack Then
lblusuario.Text = Session("Usuario")
Verifica_Imagen()
Nro_Mensajes()
End If
End Sub

Protected Sub btndesconectarse_Click(ByVal sender As Object, ByVal e As


System.EventArgs) Handles btndesconectarse.Click
Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
u.est_usu = 0
cu.Est_Con_Usuario(u)
Session("Usuario") = "desconectado"
Response.Redirect("Home.aspx")
End Sub
Sub Verifica_Imagen()

Dim dt As New DataTable


Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
'u.nick_usu = "suzan"
dt = cu.Perfil_Usuario(u)
Dim i As Integer
i = Integer.Parse(dt.Rows(0).Item(0))
If i = 0 Then
imgusuario.ImageUrl = "~/img/Usuario.png"
Image1.ImageUrl = "~/img/Usuario.png"
Else
imgusuario.ImageUrl = "~/img/" + dt.Rows(0).Item(1).ToString()

www.detodoprogramacion.org
200 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Image1.ImageUrl = "~/img/" + dt.Rows(0).Item(1).ToString()


End If
imgusuario.Width = 100
imgusuario.Height = 100
Image1.Width = 60
Image1.Height = 60

End Sub

Public Function Codigo(ByVal nick As String) As String


Dim u As New Entidad.Usuario
u.nick_usu = nick
Dim dt As New DataTable
dt = cu.Busca_Nick(u)
Dim cod As String
cod = dt.Rows(0).Item(0).ToString()
Return cod
End Function

Sub Actualiza_Foto(ByVal fot As Integer)


Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
u.fot_usu = fot
u.nom_fot = nombre + extencion
cu.Act_foto_Usuario(u)
End Sub

Protected Sub btnhome_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnhome.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Home.aspx")
End Sub

Protected Sub btnusuarios_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnusuarios.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Pagina_Usuario.aspx")
End Sub

Protected Sub ImageButton4_Click(ByVal sender As Object, ByVal e As System.


Web.UI.ImageClickEventArgs) Handles ImageButton4.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Videos_Lista.aspx")
End Sub

Protected Sub ImageButton2_Click(ByVal sender As Object, ByVal e As System.


Web.UI.ImageClickEventArgs)
Session("Usuario") = Session("Usuario")
Response.Redirect("Perfil_Usuario.aspx")
End Sub
Sub Nro_Mensajes()
Dim m As New Mensajes

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 201

m.cod_usu_rec = Codigo(Session("Usuario"))
Dim dt As New DataTable
dt = cm.Lista_Mensajes_Nuevos(m)
likmensaje.Text = "Mensajes (" + dt.Rows.Count.ToString() + " nuevos)"
End Sub
End Class

Página Videos Lista


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Videos_Lista.aspx.vb"
Inherits="Videos_Lista" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/


TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Video de Usuario</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}

www.detodoprogramacion.org
202 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

a:link {
color: #000099;
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #000099;
}
a:hover {
text-decoration: none;
color: #FF0000;
}
a:active {
text-decoration: none;
color: #000099;
}
-->
</style>
<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>

</head>
<body>
<form id="form1" runat="server">
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0" >
<tr>
<td align="center" rowspan="3"><img src="auxiliares/logo.png" alt=""
width="345" height="125" /></td>
<td width="35%" height="83" colspan="-1" align="center" >&nbsp;</td>
<td width="20%" colspan="-1" align="center" ><asp:Image ID="Image1"
runat="server" Height="60px" Width="60px" /></td>
</tr>
<tr>
<td colspan="-1" align="center" >&nbsp;</td>
<td colspan="-1" align="center" >
<asp:Label ID="lblusuario" runat="server" ForeColor="Green" Width="1px"
Font-Names="Arial Narrow" style="color: red; font-family: 'Californian FB'" Font-
Bold="True"></asp:Label> </td>
</tr>
<tr>
<td height="19" colspan="-1" style="font-family:Arial Narrow;font-
size:5;color:#333333;">&nbsp;</td>
<td colspan="-1" align="center">
<asp:LinkButton ID="btnsession" runat="server" Font-Names="Arial Narrow"
ToolTip="Cerrar Sesión" style="color: blue; font-family: 'Californian FB'; text-
decoration: line-through" Font-Bold="True">[Salir]</asp:LinkButton> </td>
</tr>
<tr>
<td colspan="3" bgcolor="#CCCCCC"></td>
</tr>
<tr>
<td colspan="3">
<asp:ImageButton ID="btnhome" runat="server" AlternateText="Home"
ImageUrl="auxiliares/home.png" /><asp:ImageButton

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 203

ID="btnusuarios" runat="server" AlternateText="Usuarios


Conectados" ImageUrl="auxiliares/conectados.png" /> </td>
</tr>
<tr>
<td colspan="3" bgcolor="#CCCCCC" ></td>
</tr>
<tr>
<td colspan="3" style="background-color: salmon">&nbsp;</td>
</tr>
<tr>
<td colspan="3">
&nbsp;&nbsp;<asp:HyperLink ID="likmensaje" runat="server" Width="174px"
ForeColor="#804000" Font-Names="Arial Narrow" style="color: red; font-family:
'Californian FB'" Font-Bold="True">[likmensaje]</asp:HyperLink></td>
</tr>
<tr>
<td colspan="3">&nbsp;</td>
</tr>
<tr>
<td colspan="3" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td colspan="3" style="height: 19px">
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Pagina_
Usuario.aspx"
Target="_parent" ImageUrl="auxiliares/mensajes.png">Mensajes</
asp:HyperLink><asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/Pagina_
Usuario.aspx"
Target="_parent" ImageUrl="auxiliares/contraseña.png">Contraseña</
asp:HyperLink><asp:ImageButton
ID="ImageButton2" runat="server" ImageUrl="auxiliares/perfil.png"
/><asp:ImageButton
ID="ImageButton3" runat="server" ImageUrl="auxiliares/
imagen.png" /><asp:HyperLink ID="HyperLink3" runat="server" ImageUrl="auxiliares/
subir.png" NavigateUrl="~/Pagina_Usuario.aspx"
Target="_parent">HyperLink</asp:HyperLink> </
td>
</tr>
<tr>
<td colspan="3" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td colspan="3" style="height: 19px" >&nbsp;</td>
</tr>
<tr>
<td colspan="3" style="height: 27px; font-size: 15pt; font-family:
forte;">
Videos del Usuario</td>
</tr>
<tr>
<td colspan="3">&nbsp;</td>
</tr>
<tr>

www.detodoprogramacion.org
204 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

<td colspan="3" style="font-size: 13pt; color: red; font-family:


forte; background-color: lightgrey; text-align: center;">
Datos del Video</td>
</tr>
<tr>
<td colspan="3" style="height: 10px; background-color: whitesmoke;
text-align: center;"> </td>
</tr>
<tr>
<td colspan="4" style="text-align: center; height: 193px; background-
color: whitesmoke;">
<asp:GridView ID="grvvideos" runat="server"
AutoGenerateColumns="False" CellPadding="3"
ForeColor="Black" GridLines="Vertical" Height="146px"
Width="567px" CaptionAlign="Top" HorizontalAlign="Center" BackColor="White"
BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" Font-Bold="False"
Font-Names="Californian FB">
<FooterStyle BackColor="#CCCCCC" />
<Columns>
<asp:TemplateField>
<EditItemTemplate><asp:CheckBox ID="CheckBox1"
runat="server" /></EditItemTemplate>
<ItemTemplate><asp:CheckBox ID="CheckBox1"
runat="server" /></ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="cod_vid"
HeaderText="Codigo" />
<asp:BoundField DataField="nom_vid" HeaderText="Nombre
" />
<asp:BoundField DataField="nom_gen"
HeaderText="Genero" />
<asp:CommandField ShowSelectButton="True"
SelectText="Detalles" />
</Columns>
<RowStyle HorizontalAlign="Left" VerticalAlign="Middle" />
<SelectedRowStyle BackColor="#000099" Font-Bold="True"
ForeColor="White" HorizontalAlign="Center" />
<PagerStyle BackColor="#999999" ForeColor="Black"
HorizontalAlign="Center" />
<HeaderStyle BackColor="Black" Font-Bold="True"
ForeColor="White" HorizontalAlign="Center" VerticalAlign="Middle" />
<AlternatingRowStyle BackColor="#CCCCCC" />
</asp:GridView>
&nbsp; </td>
</tr>
<tr>
<td rowspan="1" align="center" style="font-size: 12pt; color: red;
font-family: Arial;
height: 21px">&nbsp;
<asp:Label ID="lblfilas" runat="server" Font-Names="Arial Narrow"
Text="Label" Width="115px" style="font-family: 'Californian FB'" Font-
Bold="True"></asp:Label></td>
<td rowspan="1" style="font-size: 12pt; color: red; font-family: Arial;
height: 21px"><asp:Button ID="btneliminar" runat="server"
Text="Eliminar" Font-Names="Arial Narrow" style="font-family: 'Californian FB'"

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 205

Font-Bold="True" /></td>
<td rowspan="1" style="font-size: 12pt; color: red; font-family:
Arial;
height: 21px">&nbsp;</td>
</tr>
<tr>
<td colspan="4" rowspan="1" style="font-size: 12pt; color: red; font-
family: Arial;
height: 21px"> </td>
</tr>

<tr>
<td colspan="4" rowspan="1" style="font-size: 13pt;color: red; font-
family: forte; height: 21px; background-color: lightgrey; text-align: center;">
Detalle del Video</td>
</tr>
<tr>
<td colspan="4" rowspan="1" style="height: 8px; background-color:
whitesmoke; text-align: center;"> </td>
</tr>
<tr>
<td colspan="4" rowspan="1" style="height: 193px; background-
color: whitesmoke; text-align: center">
<asp:GridView ID="grvdetalle" runat="server"
AutoGenerateColumns="False" CellPadding="4"
ForeColor="Black" GridLines="Vertical" Height="1px"
Width="542px" CaptionAlign="Top" HorizontalAlign="Center" PageSize="1"
BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px">
<FooterStyle BackColor="#CCCC99" ForeColor="Black" />
<Columns>
<asp:BoundField DataField="fec_vid" HeaderText="Fecha"
/>
<asp:BoundField DataField="dur_vid"
HeaderText="Duracion" />
<asp:BoundField DataField="num_vis"
HeaderText="N&#176; Visitas" />
<asp:BoundField DataField="pun_vid"
HeaderText="N&#176; Ptos" />
<asp:TemplateField>
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server"
NavigateUrl='<%# Eval("cod_vid","Home2.aspx?var={0}") %>'
Text="Ver"></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<RowStyle HorizontalAlign="Justify" VerticalAlign="Middle"
/>
<SelectedRowStyle BackColor="#CC3333" Font-Bold="True"
ForeColor="White" HorizontalAlign="Center" />
<PagerStyle BackColor="White" ForeColor="Black"
HorizontalAlign="Right" />
<HeaderStyle BackColor="#333333" Font-Bold="True"
ForeColor="White" HorizontalAlign="Center" />

www.detodoprogramacion.org
206 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

</asp:GridView> </td>
</tr>
<tr>
<td colspan="4" rowspan="1" style="height: 232px; background-
color: white" >
<table width="100%" >
<tr>
<td style="height: 23px; width: 59px;">&nbsp;</td>
<td style="height: 23px"></td>
<td style="height: 23px"></td>
<td style="height: 23px"></td>
</tr>
<tr>
<td colspan="1" style="height: 23px; font-
size: 13pt; color: black; font-family: forte; background-color: lightgrey;">
</td>
<td colspan="3" style="height: 23px; font-size: 13pt;
color: black; font-family: forte; background-color: lightgrey;">
Mantenimiento del Video</td>
</tr>
<tr>
<td style="height: 23px; width: 59px;">
</td>
<td style="height: 23px">
</td>
<td style="height: 23px">
</td>
<td style="height: 23px">
</td>
</tr>
<tr>
<td style="font-size: 10pt; color: navy; font-family:
Arial; width: 59px;"> </td>
<td style="font-size: 10pt; color: black; font-family:
'Californian FB';">
<strong>Codigo:</strong></td>
<td colspan="2" style="height: 21px">
<asp:TextBox ID="txtcodigo" runat="server"
Enabled="False" style="font-family: 'Californian FB'"></asp:TextBox>
</td>
</tr>
<tr>
<td style="font-size: 10pt; color: navy; font-family:
Arial; width: 59px;"> </td>
<td style="font-size: 10pt; color: black; font-family:
'Californian FB';">
<strong>
Nombre:</strong></td>
<td colspan="2" style="height: 21px">
<asp:TextBox ID="txtnombre" runat="server"
Width="413px"></asp:TextBox></td>
</tr>
<tr>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 207

<td style="font-size: 10pt; color: navy; font-family:


Arial; width: 59px;"> </td>
<td style="font-size: 10pt; color: black; font-family:
'Californian FB';">
<strong>
Genero:</strong></td>
<td style="height: 21px">
<asp:DropDownList ID="cmdgenero" runat="server"
style="font-family: 'Californian FB'"></asp:DropDownList></td>
<td style="height: 21px"></td>
</tr>
<tr>
<td style="width: 59px"> </
td>
<td ></td>
<td ><asp:Button ID="btnaceptar" runat="server"
Text="Aceptar" style="font-family: 'Californian FB'" Font-Bold="True" /></td>
<td ><asp:Button ID="bncancelar" runat="server"
Text="Cancelar" style="font-family: 'Californian FB'" Font-Bold="True" /></td>
</tr>
<tr>
<td style="width: 59px; height: 21px;">
</td>
<td style="height: 21px" ></td>
<td style="height: 21px" ></td>
<td style="height: 21px" ></td>
</tr>
</table> </td>
</tr>
</table>
</form>
</body>
</html>

Programación
Imports Entidad
Imports Negocio
Imports System.Data
Partial Class Videos_Lista
Inherits System.Web.UI.Page

Dim cv As New Negocio.C_Video


Dim cg As New Negocio.C_Genero
Dim cu As New Negocio.C_Usuario
Dim cm As New Negocio.C_Mensajes
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load
If Not Page.IsPostBack Then
lista()
genero()
Session("Usuario") = Session("Usuario")
Verifica_Imagen()

www.detodoprogramacion.org
208 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Nro_Mensajes()
End If
End Sub

Protected Sub grvvideos_SelectedIndexChanged(ByVal sender As Object, ByVal e


As System.EventArgs) Handles grvvideos.SelectedIndexChanged
txtcodigo.Text = grvvideos.SelectedRow.Cells(1).Text
txtnombre.Text = grvvideos.SelectedRow.Cells(2).Text
Dim v As New Entidad.Video
v.Cod_vid = txtcodigo.Text
Dim dt As New DataTable
dt = cv.Detalla_Video(v)
grvdetalle.DataSource = dt
grvdetalle.DataBind()
End Sub

Protected Sub btnaceptar_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btnaceptar.Click
Dim v As New Entidad.video
v.Cod_vid = txtcodigo.Text
v.Nom_vid = (txtnombre.Text).ToUpper()
v.Cod_gen = cmdgenero.SelectedValue.ToString()
cv.Actualiza_Video(v)
lista()
Response.Write("<script>alert('La operación fue realizada exitosamente')</
script>")
txtcodigo.Text = ""
txtnombre.Text = ""
End Sub
Sub genero()
Dim dt As New DataTable
dt = cg.Lista_genero_activos()
cmdgenero.DataSource = dt
cmdgenero.DataValueField = "cod_gen"
cmdgenero.DataTextField = "nom_gen"
cmdgenero.DataBind()
End Sub
Sub lista()
Dim v As New video
v.Nick_usu = Session("Usuario")
' v.Nick_usu = "suzan"
Dim dt As New DataTable
dt = cv.Videos_Usuario(v)
grvvideos.DataSource = dt
grvvideos.DataBind()
If grvvideos.Rows.Count > 0 Then
lblfilas.Text = "N° de Videos : " + grvvideos.Rows.Count.ToString()
Else
lblfilas.Text = "Ud. no tiene videos"
End If
End Sub

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 209

Protected Sub btneliminar_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btneliminar.Click
For i As Integer = 0 To grvvideos.Rows.Count - 1
Dim chekc As New CheckBox
chekc = grvvideos.Rows(i).Cells(0).FindControl("CheckBox1")

If chekc.Checked Then
Dim v As New Video
v.Cod_vid = grvvideos.Rows(i).Cells(1).Text
cv.Elimina_Video(v)
End If
Next
lista()
End Sub
Sub Verifica_Imagen()

Dim dt As New DataTable


Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
dt = cu.Perfil_Usuario(u)
Dim i As Integer
i = Integer.Parse(dt.Rows(0).Item(0))
If i = 0 Then
Image1.ImageUrl = "~/img/Usuario.png"
Else
Image1.ImageUrl = "~/img/" + dt.Rows(0).Item(1).ToString()
End If
Image1.Height = 60
Image1.Width = 60
End Sub

Public Function Codigo(ByVal nick As String) As String


Dim u As New Entidad.Usuario
u.nick_usu = nick
Dim dt As New DataTable
dt = cu.Busca_Nick(u)
Dim cod As String
cod = dt.Rows(0).Item(0).ToString()
Return cod
End Function

Protected Sub btnhome_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnhome.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Home.aspx")
End Sub

Protected Sub btnusuarios_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnusuarios.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Usuarios_Conectados.aspx")
End Sub

www.detodoprogramacion.org
210 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Protected Sub ImageButton2_Click(ByVal sender As Object, ByVal e As System.


Web.UI.ImageClickEventArgs) Handles ImageButton2.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Perfil_Usuario.aspx")
End Sub

Protected Sub ImageButton3_Click(ByVal sender As Object, ByVal e As System.


Web.UI.ImageClickEventArgs) Handles ImageButton3.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Imagen_Usuario.aspx")
End Sub
Sub Nro_Mensajes()
Dim m As New Mensajes
m.cod_usu_rec = Codigo(Session("Usuario"))
Dim dt As New DataTable
dt = cm.Lista_Mensajes_Nuevos(m)
likmensaje.Text = "Mensajes (" + dt.Rows.Count.ToString() + " nuevos)"
End Sub

Protected Sub btnsession_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btnsession.Click
Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
u.est_usu = 0
cu.Est_Con_Usuario(u)
Session("Usuario") = "desconectado"
Response.Redirect("Home.aspx")
End Sub

Protected Sub bncancelar_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles bncancelar.Click

End Sub
End Class

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 211

www.detodoprogramacion.org
212 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Página Sube Video


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Sube_Video.aspx.vb"
Inherits="Sube_Video" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/


TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Sube Video</title>
</head>
<body>
<form id="form1" runat="server">
<table width="60%" border="0" align="center" cellpadding="1"
cellspacing="1">
<tr>
<td colspan="4" style="width: 100px; height: 23px; background-
color: black;"></td>
</tr>
<tr>
<td colspan="4" align="center" style="font-size: 15pt; color:
black; font-family: Forte; background-color: lightgrey; text-decoration:
underline">
&nbsp;Sube tu video</td>
</tr>
<tr style="color: #000000">
<td style="width: 100px; height: 21px"></td>
<td style="width: 100px; height: 21px"></td>
<td colspan="2" style="height: 21px"></td>
</tr>
<tr style="color: #000000">
<td rowspan="5" style="font-size: 10pt; color: navy; font-family:
Arial;"><img src="auxiliares/Articulos.png" width="128" height="128" /></td>
<td style="font-size: 10pt; color: black; font-family:
'Californian FB'; width: 100px;">
<strong>Código:</strong></td>
<td colspan="2" style="height: 21px"><asp:TextBox ID="txtcodigo"
runat="server" Enabled="False"></asp:TextBox></td>
</tr>
<tr>
<td style="font-size: 10pt; color: black; font-family: 'Californian
FB'; width: 100px;">
<strong>Nombre:</strong></td>
<td colspan="2" style="height: 21px"><asp:TextBox ID="txtnombre"
runat="server" Width="413px"></asp:TextBox></td>
</tr>
<tr>
<td style="font-size: 10pt; color: black; font-family: 'Californian
FB'; width: 100px;">
<strong>Duración:</strong></td>
<td style="width: 100px; height: 21px"><asp:TextBox
ID="txtduracion" runat="server" Width="83px"></asp:TextBox></td>
<td style="width: 100px; height: 21px"></td>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 213

</tr>
<tr>
<td style="font-size: 10pt; color: black; font-family: 'Californian
FB'; width: 100px;">
<strong>Género:</strong></td>
<td style="width: 100px; height: 21px"><asp:DropDownList
ID="cmdgenero" runat="server" style="font-family: 'Californian FB'" Font-
Bold="True"></asp:DropDownList></td>
<td style="width: 100px; height: 21px"><asp:Button ID="btngrabar"
runat="server" Text="Registra" style="font-family: 'Californian FB'" Font-
Bold="True" /></td>
</tr>
<tr>
<td style="font-size: 10pt; color: black; font-family: 'Californian
FB'; width: 100px;">
<strong>Video:</strong></td>
<td colspan="2" style="height: 26px"><asp:FileUpload
ID="btnexamina" runat="server" Font-Names="Arial Narrow" style="font-family:
'Californian FB'" Font-Bold="True" />
<asp:Button ID="btnsube" runat="server" Enabled="False"
Text="Subir" Font-Names="Arial Narrow" /></td>
</tr>
<tr>
<td style="width: 100px; background-color: lightgrey;"></td>
<td style="width: 100px; background-color: lightgrey;"></td>
<td style="width: 100px; background-color: lightgrey;"></td>
<td style="width: 100px; background-color: lightgrey;"></td>
</tr>
</table>
</form>
</body>
</html>

Código
mports Entidad
Imports Negocio
Imports System.Data
Partial Class Sube_Video
Inherits System.Web.UI.Page

Dim cv As New C_Video


Dim cg As New C_Genero
Dim nombre, extencion As String
Protected Sub btngrabar_Click(ByVal sender As Object, ByVal e As System.
EventArgs) Handles btngrabar.Click
graba()
btnsube.Enabled = True

End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
If Not Page.IsPostBack Then

www.detodoprogramacion.org
214 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

txtcodigo.Text = cv.Generar_Video().Rows(0)(0)
generos()
End If
End Sub

Sub generos()
Dim dt As New DataTable
dt = cg.Lista_genero_activos()
cmdgenero.DataSource = dt
cmdgenero.DataTextField = "nom_gen"
cmdgenero.DataValueField = "cod_gen"
cmdgenero.DataBind()
End Sub
Sub graba()
Dim v As New Video
v.Cod_vid = txtcodigo.Text
v.Nom_vid = txtnombre.Text.ToUpper()
v.Dur_vid = txtduracion.Text
v.Nick_usu = Session("Usuario")
v.Cod_gen = cmdgenero.SelectedValue.ToString()
cv.Graba_Video(v)
End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btnsube.Click
Dim sFile As String
sFile = String.Empty
Dim unidad As String
unidad = Request.PhysicalPath.ToString().Substring(0, 2)
Dim aplicacion As String
aplicacion = Request.ApplicationPath.ToString()
Dim strPathFile As String
strPathFile = unidad + "\\Proyecto\" + aplicacion + "\\video\\"
Dim ruta As String
Dim tamaño As Integer
nombre = txtcodigo.Text
ruta = btnexamina.PostedFile.FileName
tamaño = ruta.Length
extencion = ruta.Substring(tamaño - 4, 4)
sFile = System.IO.Path.GetFileName(nombre + extencion)
btnexamina.PostedFile.SaveAs(strPathFile + "\\" + sFile)

limpiar()
End Sub
Sub limpiar()
txtcodigo.Text = cv.Generar_Video().Rows(0)(0)
txtduracion.Text = ""
txtnombre.Text = ""
btnsube.Enabled = False
End Sub
End Class

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 215

Página Usuarios Videos


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Usuario_Videos.aspx.vb"
Inherits="Usuario_Videos" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/


TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Canal del Usuario</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
a:link {
color: #000099;
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #000099;
}
a:hover {
text-decoration: none;
color: #FF0000;
}
a:active {

www.detodoprogramacion.org
216 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

text-decoration: none;
color: #000099;
}
-->
</style>
</head>
<body>
<form id="form1" runat="server">
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0" >
<tr>
<td colspan="2" rowspan="3"><img src="auxiliares/logo.png" alt=""
width="345" height="125" /></td>
<td width="29%" height="91">&nbsp;</td>
<td width="145" height="85" align="center">
<asp:Image ID="Image1" runat="server" Height="60px" Width="60px" />
</td>
</tr>
<tr>
<td >&nbsp;</td>
<td align="center">
<asp:Label ID="lblusuario" runat="server" Visible="False" Width="122px"
ForeColor="Green" style="color: red; font-family: 'Californian FB'" Font-
Bold="True">Desconectado</asp:Label></td>
</tr>
<tr>
<td valign="middle" style="font-family:Arial Narrow;font-
size:5;color:#333333; height: 18px;">
<script language ="javascript" type="text/javascript">
var hoy = new Date();
dia = hoy.getDate();
mes = hoy.getMonth();
anyo = hoy.getYear();
if (mes == "0") convertir_mes = "Enero";
else if (mes == "1") convertir_mes = "Febrero";
else if (mes == "2") convertir_mes = "Marzo";
else if (mes == "3") convertir_mes = "Abril";
else if (mes == "4") convertir_mes = "Mayo";
else if (mes == "5") convertir_mes = "Junio";
else if (mes == "6") convertir_mes = "Julio";
else if (mes == "7") convertir_mes = "Agosto";
else if (mes == "8") convertir_mes = "Septiembre";
else if (mes == "9") convertir_mes = "Octubre";
else if (mes == "10") convertir_mes = "Noviembre";
else convertir_mes = "Diciembre";
document.write ( "Lima "+ dia + " " + convertir_mes + " de " +
anyo);
</script>
</td>
<td align="center" style="height: 18px">
<asp:LinkButton ID="btnsession" runat="server" Visible="False"
style="color: blue; font-family: 'Californian FB'; text-decoration: line-through"
Font-Bold="True" >[Salir]</asp:LinkButton>
</td>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 217

</tr>
<tr>
<td colspan="4" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td colspan="4">
<asp:ImageButton ID="btnhome" runat="server" AlternateText="Home"
ImageUrl="auxiliares/home.png" /><asp:ImageButton
ID="btnregistro" runat="server" AlternateText="Registro"
ImageUrl="auxiliares/registro.png" /><asp:ImageButton
ID="btningresar" runat="server" AlternateText="Ingresar"
ImageUrl="auxiliares/ingresar.png" /><asp:ImageButton
ID="btnpagina" runat="server" AlternateText="Página Usuario"
ImageUrl="auxiliares/usuario.png" /><asp:ImageButton
ID="btnusuarios" runat="server" AlternateText="Usuarios
Conectados" ImageUrl="auxiliares/conectados.png" /> </td>
</tr>
<tr>
<td colspan="4" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td width="17%" style="background-color: salmon" >&nbsp;</td>
<td width="36%" style="background-color: salmon" >&nbsp;</td>
<td style="background-color: salmon" >&nbsp;</td>
<td style="background-color: salmon" >&nbsp;</td>
</tr>
<tr>
<td colspan="2" align="center" valign="middle">
&nbsp;<asp:TextBox ID="TextBox1" runat="server" Width="335px"
style="font-family: 'Californian FB'"></asp:TextBox>&nbsp;
</td>
<td >
<asp:ImageButton ID="btnbuscar" runat="server" AlternateText="Buscar"
BorderColor="#D4D0C8"
Height="30" ImageUrl="auxiliares/buscar.png" Width="30" /></td>
<td >&nbsp;</td>
</tr>
<tr>
<td colspan="2" align="center" valign="middle">&nbsp;</td>
<td >&nbsp;</td>
<td >&nbsp;</td>
</tr>
<tr>
<td colspan="2" align="center" valign="middle" style="font-size: 15pt;
color: red; font-family: forte">
Lista de Videos</td>
<td >&nbsp;</td>
<td >&nbsp;</td>
</tr>
<tr>
<td colspan="2">&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>

www.detodoprogramacion.org
218 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

</tr>
<tr>
<td colspan="2" align="left" valign="middle">
<%
Dim a As String
a = Request.Params("cod").ToString()
lblnick.Text = "Nombre de Usuario : " + a
%>
<asp:Label ID="lblnick" runat="server" Font-Names="Arial Narrow"
ForeColor="#804000" style="color: red; font-family: 'Californian FB'" Font-
Bold="True"></asp:Label></td>
<td >&nbsp;</td>
<td >&nbsp;</td>
</tr>
<tr>
<td colspan="2">&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="4">
<table width="80%" border="0" align="left" cellpadding="1"
cellspacing="1">
<%
Dim nick As String
nick = Request.Params("cod").ToString()
Dim dt As New System.Data.DataTable
Dim objdao As New Negocio.C_Video
Dim objent As New Entidad.Video
objent.Nick_usu = nick
dt = objdao.Videos_Usuario(objent)
For i As Integer = 0 To dt.Rows.Count - 1
Dim dato As String = dt.Rows(i)(0).ToString()
Dim titulo As String = dt.Rows(i)(1).ToString()
%>
<tr>
<td width="16%" rowspan="4">
<a href="Home2.aspx?var=<%Response.Write(dato)%>">
<embed id="media" align="top" autostart="0"
showcontrols="false" src="video/<%Response.Write(dato)%>.avi"
style="width: 100px; height: 80px"></embed>
</a>
</td>
<td width="84%" style="height: 20px">&nbsp;</td>
</tr>
<tr>
<td >&nbsp;
<a href="Home2.aspx?var=<%Response.Write(dato)%>" style="
font-family:'Arial Narrow';color:teal">
<%Response.Write(titulo)%>
</a>
</td>
</tr>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 219

<tr>
<td ><a href="Home2.aspx?var=<%Response.Write(dato)%>" style="font-
family: 'Californian FB'; text-decoration: line-through; color: blue;">
<strong>&nbsp;&nbsp;ver video </strong></a></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<%Next%>
</table> </td>
</tr>
<tr>
<td style="background-color: silver" colspan="4">&nbsp; &nbsp;&nbsp;</td>
</tr>
<tr>
<td colspan="4" style="background-color: black">&nbsp; &nbsp;&nbsp;</td>
</tr>
</table>
</form>
</body>
</html>

Programación
Imports Entidad
Imports Negocio
Imports System.Data
Partial Class Usuario_Videos
Inherits System.Web.UI.Page
Dim cu As New C_Usuario
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load
If Not Page.IsPostBack Then
If Session("Usuario") = "desconectado" Or Session("Usuario") = "" Then
lblusuario.Visible = False
btnsession.Visible = False
btnpagina.Visible = False
btnusuarios.Visible = False
Image1.Visible = False
Else
lblusuario.Text = Session("Usuario")
lblusuario.Visible = True
btnsession.Visible = True
btnpagina.Visible = True
btnregistro.Visible = False
btningresar.Visible = False
Image1.Visible = True
btnusuarios.Visible = True
Verifica_Imagen()
End If
End If
End Sub

www.detodoprogramacion.org
220 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Sub Verifica_Imagen()
Dim dt As New DataTable
Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
'u.nick_usu = "suzan"
dt = cu.Perfil_Usuario(u)
Dim i As Integer
i = Integer.Parse(dt.Rows(0).Item(0))
If i = 0 Then
Image1.ImageUrl = "~/img/Usuario.png"
Else
Image1.ImageUrl = "~/img/" + dt.Rows(0).Item(1).ToString()
End If
Image1.Height = 60
Image1.Width = 60
End Sub
Protected Sub btnsession_Click(ByVal sender As Object, ByVal e As System.
EventArgs) Handles btnsession.Click
Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
u.est_usu = 0
cu.Est_Con_Usuario(u)
Session("Usuario") = "desconectado"
Response.Redirect("Home.aspx")
End Sub

Protected Sub btnbuscar_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnbuscar.Click
Response.Redirect("Listado_Videos.aspx?var=" + TextBox1.Text.Trim + "")
End Sub

Protected Sub btnregistro_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnregistro.Click
Response.Redirect("Registro_Usuario.aspx")
End Sub

Protected Sub btningresar_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btningresar.Click
Response.Redirect("Ingreso_Usuario.aspx")
End Sub

Protected Sub btnpagina_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnpagina.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Pagina_Usuario.aspx")
End Sub

Protected Sub btnusuarios_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnusuarios.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Usuarios_Conectados.aspx")
End Sub

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 221

Protected Sub btnhome_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnhome.Click
Response.Redirect("Home.aspx")
Session("Usuario") = Session("Usuario")
End Sub
End Class

Página Usuarios Conectados


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Usuarios_Conectados.aspx.
vb" Inherits="Usuarios_Conectados" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/


TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Usuarios Conectados</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
body {

www.detodoprogramacion.org
222 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
a:link {
color: #000099;
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #000099;
}
a:hover {
text-decoration: none;
color: #FF0000;
}
a:active {
text-decoration: none;
color: #000099;
}
-->
</style>
</head>
<body>
<form id="form1" runat="server">
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0"
style="color: red">
<tr>
<td colspan="2" rowspan="3"><img src="auxiliares/logo.png" alt=""
width="345" height="125" /></td>
<td height="87" style="width: 443px">&nbsp;</td>
<td width="197" align="center"><asp:Image ID="Image2" runat="server"
Height="60px" Width="60px"/></td>
</tr>
<tr>
<td style="width: 443px; height: 19px">&nbsp;</td>
<td align="center" style="height: 19px">
<asp:Label ID="lblusuario" runat="server" ForeColor="Green" Width="1px"
style="color: red; font-family: 'Californian FB'" Font-Bold="True"></asp:Label>
</td>
</tr>
<tr>
<td valign="middle" style="font-family:Arial Narrow;font-
size:5;color:#333333; width: 443px;">&nbsp;&nbsp;
<script language ="javascript" type="text/javascript">
var hoy = new Date();
dia = hoy.getDate();
mes = hoy.getMonth();
anyo = hoy.getYear();
if (mes == "0") convertir_mes = "Enero";
else if (mes == "1") convertir_mes = "Febrero";
else if (mes == "2") convertir_mes = "Marzo";

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 223

else if (mes == "3") convertir_mes = "Abril";


else if (mes == "4") convertir_mes = "Mayo";
else if (mes == "5") convertir_mes = "Junio";
else if (mes == "6") convertir_mes = "Julio";
else if (mes == "7") convertir_mes = "Agosto";
else if (mes == "8") convertir_mes = "Septiembre";
else if (mes == "9") convertir_mes = "Octubre";
else if (mes == "10") convertir_mes = "Noviembre";
else convertir_mes = "Diciembre";
document.write ( "Lima "+ dia + " " + convertir_mes + " de " +
anyo);
</script>
</td>
<td align="center" style="height: 20px">
<asp:LinkButton ID="btnsession" runat="server" Font-
Names="Arial Narrow" ToolTip="Cerrar Sesión" style="color: blue; font-family:
'Californian FB'; text-decoration: line-through" Font-Bold="True">[Salir]</
asp:LinkButton> </td>
</tr>
<tr>
<td colspan="4" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr style="color: #000000">
<td colspan="4" align="left" style="color: #000000; height: 18px">
<asp:ImageButton ID="btnhome" runat="server" AlternateText="Home"
ImageUrl="auxiliares/home.png" /><asp:ImageButton
ID="btnpagina" runat="server" ImageUrl="auxiliares/
usuario.png" /><asp:ImageButton
ID="btnusuarios" runat="server"
AlternateText="Usuarios Conectados" ImageUrl="auxiliares/conectados.png" /></td>
</tr>
<tr style="color: #000000">
<td colspan="4" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td style="height: 19px; background-color: salmon;">&nbsp;</td>
<td style="height: 19px; background-color: salmon;">&nbsp;</td>
<td style="height: 19px; background-color: salmon; width:
443px;">&nbsp;</td>
<td style="height: 19px; background-color: salmon;">&nbsp;</td>
</tr>
<tr>
<td colspan="2" style="height: 19px">
<asp:TextBox ID="TextBox1" runat="server" Width="335px" style="font-
family: 'Californian FB'" Font-Bold="True"></asp:TextBox> </td>
<td style="width: 443px; height: 19px">
<asp:ImageButton ID="btnbuscar" runat="server"
AlternateText="Buscar" BorderColor="#D4D0C8"
Height="30" ImageUrl="auxiliares/buscar.png" Width="30" />
</td>
<td style="height: 19px">&nbsp;</td>
</tr>
<tr>

www.detodoprogramacion.org
224 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

<td colspan="2">&nbsp;</td>
<td style="height: 19px; width: 443px;">&nbsp;</td>
<td style="height: 19px">&nbsp;</td>
</tr>
<tr>
<td style="width: 53px; height: 19px">&nbsp;</td>
<td style="font-size: 15pt; font-family: forte">
Usuarios Conectados</td>
<td style="width: 443px; height: 19px">&nbsp;</td>
<td style="height: 19px">&nbsp;</td>
</tr>
<tr>
<td style="height: 19px">&nbsp;</td>
<td style="height: 19px">&nbsp;</td>
<td style="height: 19px; width: 443px;">&nbsp;</td>
<td style="height: 19px">&nbsp;</td>
</tr>
<tr>
<td style="height: 20px">&nbsp;</td>
<td colspan="2" rowspan="7" style="text-align: center">
<asp:GridView ID="grvmennue" runat="server"
AutoGenerateColumns="False"
CellPadding="3" ForeColor="Black" GridLines="Vertical"
Width="496px" BackColor="White" BorderColor="#999999" BorderStyle="Solid"
BorderWidth="1px" Font-Bold="True" Font-Names="Californian FB">
<FooterStyle BackColor="#CCCCCC" />
<Columns>
<asp:TemplateField HeaderText="Imagen">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server"></
asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Image ID="Image1" runat="server"
Height="72px" Width="69px" ImageUrl='<%# Eval("nom_fot","~/img/{0}") %>' />
</ItemTemplate>
<HeaderStyle Font-Names="Arial Narrow" />
</asp:TemplateField>
<asp:BoundField DataField="nick_usu"
HeaderText="Usuario" >
<ControlStyle Font-Names="Arial Black" />
<HeaderStyle Font-Names="Arial Narrow" />
</asp:BoundField>
<asp:BoundField DataField="nom_pais" HeaderText="Pais"
>
<HeaderStyle Font-Names="Arial Narrow" />
</asp:BoundField>
<asp:TemplateField HeaderText="Ver">
<ItemTemplate>
<asp:HyperLink ID="HyperLink2" runat="server"
NavigateUrl='<%# Eval("nick_usu","Inf_Usuario.aspx?cod={0}") %>'>Visitar</
asp:HyperLink>
</ItemTemplate>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 225

</asp:TemplateField>
</Columns>
<SelectedRowStyle BackColor="#000099" Font-Bold="True"
ForeColor="White" />
<PagerStyle BackColor="#999999" ForeColor="Black"
HorizontalAlign="Center" />
<HeaderStyle BackColor="Black" Font-Bold="True"
ForeColor="White" />
<AlternatingRowStyle BackColor="#CCCCCC" />
</asp:GridView> </td>
</tr>
<tr>
<td style="height: 20px">&nbsp;</td>
</tr>
<tr>
<td style="height: 20px">&nbsp;</td>
</tr>
<tr>
<td style="height: 20px">&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td style="height: 19px; background-color: silver;"
colspan="4">&nbsp; &nbsp;&nbsp;</td>
</tr>
</table>

</form>
</body>
</html>

Programación
Imports Entidad
Imports Negocio
Imports System.Data
Partial Class Usuarios_Conectados
Inherits System.Web.UI.Page
Dim cu As New Negocio.C_Usuario
Dim cm As New Negocio.C_Mensajes

Protected Sub btnsession_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btnsession.Click
Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")

www.detodoprogramacion.org
226 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

u.est_usu = 0
cu.Est_Con_Usuario(u)
Session("Usuario") = "desconectado"
Response.Redirect("Home.aspx")
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
If Not Page.IsPostBack Then
lblusuario.Text = Session("Usuario")
Verifica_Imagen()
lista_usuarios()
End If
End Sub
Sub Verifica_Imagen()

Dim dt As New DataTable


Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
dt = cu.Perfil_Usuario(u)
Dim i As Integer
i = Integer.Parse(dt.Rows(0).Item(0))
If i = 0 Then
Image2.ImageUrl = "~/img/Usuario.png"
Else
Image2.ImageUrl = "~/img/" + dt.Rows(0).Item(1).ToString()
End If
Image2.Height = 60
Image2.Width = 60
End Sub

Public Function Codigo(ByVal nick As String) As String


Dim u As New Entidad.Usuario
u.nick_usu = nick
Dim dt As New DataTable
dt = cu.Busca_Nick(u)
Dim cod As String
cod = dt.Rows(0).Item(0).ToString()
Return cod
End Function

Sub lista_usuarios()
grvmennue.DataSource = cu.Usuarios_Conectados()
grvmennue.DataBind()
End Sub

Protected Sub btnhome_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnhome.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Home.aspx")
End Sub

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 227

Protected Sub btnpagina_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnpagina.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Pagina_Usuario.aspx")
End Sub

Protected Sub btnusuarios_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnusuarios.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Usuarios_Conectados.aspx")
End Sub

Protected Sub btnbuscar_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnbuscar.Click
Response.Redirect("Listado_Videos.aspx?var=" + TextBox1.Text.Trim + "")
End Sub

End Class

www.detodoprogramacion.org
228 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Página Listado de Videos


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Listado_Videos.aspx.vb"
Inherits="listado" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/


TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Listado de Videos</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
a:link {
color: #000099;
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #000099;
}
a:hover {
text-decoration: none;
color: #FF0000;
}
a:active {
text-decoration: none;
color: #000099;
}
-->
</style>
<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>

</head>
<body>
<form id="form1" runat="server">
<table width="80%" border="0" align="center" cellpadding="0"
cellspacing="0" >
<tr>
<td width="43%" rowspan="3"><img src="auxiliares/logo.png" alt=""
width="345" height="125" /></td>
<td width="38%" height="85">&nbsp;</td>
<td width="19%" align="center"><asp:Image ID="Image1" runat="server"
Height="60px" Width="60px" /></td>
</tr>
<tr>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 229

<td style="height: 20px">&nbsp;</td>


<td align="center" style="height: 20px">
<asp:Label ID="lblusuario" runat="server" Visible="False"
Width="86px" ForeColor="Green" Font-Names="Arial Narrow" style="color: black;
font-family: 'Californian FB'">Desconectado</asp:Label> </td>
</tr>
<tr>
<td valign="middle" style="font-family:Arial Narrow;font-
size:5;color:#333333; height: 20px;">&nbsp;&nbsp;
<script language ="javascript" type="text/javascript">
var hoy = new Date();
dia = hoy.getDate();
mes = hoy.getMonth();
anyo = hoy.getYear();
if (mes == "0") convertir_mes = "Enero";
else if (mes == "1") convertir_mes = "Febrero";
else if (mes == "2") convertir_mes = "Marzo";
else if (mes == "3") convertir_mes = "Abril";
else if (mes == "4") convertir_mes = "Mayo";
else if (mes == "5") convertir_mes = "Junio";
else if (mes == "6") convertir_mes = "Julio";
else if (mes == "7") convertir_mes = "Agosto";
else if (mes == "8") convertir_mes = "Septiembre";
else if (mes == "9") convertir_mes = "Octubre";
else if (mes == "10") convertir_mes = "Noviembre";
else convertir_mes = "Diciembre";
document.write ( "Lima "+ dia + " " + convertir_mes + " de " +
anyo);
</script> </td>
<td align="center" style="height: 20px">
<asp:LinkButton ID="btnsession" runat="server" Visible="False"
Font-Names="Arial Narrow" style="font-family: 'Californian FB'; text-decoration:
line-through">[Salir]</asp:LinkButton> </td>
</tr>
<tr>
<td height="2" colspan="4" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td style="height: 19px" colspan="3">
<asp:ImageButton ID="btnhome" runat="server"
AlternateText="Home" ImageUrl="auxiliares/home.png" /><asp:ImageButton
ID="btnregistro" runat="server" AlternateText="Registro"
ImageUrl="auxiliares/registro.png" /><asp:ImageButton
ID="btningresar" runat="server"
AlternateText="Ingresar" ImageUrl="auxiliares/ingresar.png" /><asp:ImageButton
ID="btnpagina" runat="server"
ImageUrl="auxiliares/usuario.png" /><asp:ImageButton
ID="btnusuarios" runat="server"
AlternateText="Usuarios Conectados" ImageUrl="~/auxiliares/conectados.png" /></td>
</tr>

<tr>
<td colspan="3" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>

www.detodoprogramacion.org
230 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

<tr>
<td style="background-color: salmon" colspan="3">&nbsp; &nbsp;</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>&nbsp;
<asp:TextBox ID="TextBox1" runat="server" Width="335px"></
asp:TextBox></td>
<td><asp:ImageButton ID="btnbuscar" runat="server"
AlternateText="Buscar" BorderColor="#D4D0C8"
Height="30" ImageUrl="auxiliares/buscar.png" Width="30" /></
td>
<td>&nbsp;</td>
</tr>
<tr>
<td style="height: 20px">&nbsp;
<asp:Label ID="Label1" runat="server" ForeColor="Gray" Font-
Names="Arial Narrow" style="font-family: 'Californian FB'"></asp:Label>
</td>
<td style="height: 20px">&nbsp;</td>
<td style="height: 20px">&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td align="center" style="font-size: 14pt; color: red; font-family:
forte">
Lista de Videos</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="3">
<table width="80%" border="0" align="left" cellpadding="1"
cellspacing="1">
<%
Dim dt As New System.Data.DataTable
Dim objdao As New Negocio.C_Video

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 231

Dim objent As New Entidad.video


Dim x2 As String
x2 = TextBox1.Text.ToUpper.Trim
If TextBox1.Text <> "" Then
objent.Nom_vid = TextBox1.Text.ToUpper.Trim
dt = objdao.Busca_video(objent)
End If
If x2 <> "" Then
objent.Nom_vid = x2
dt = objdao.Busca_video(objent)
End If
For i As Integer = 0 To dt.Rows.Count - 1
Dim dato As String = dt.Rows(i)(0).ToString()
Dim titulo As String = dt.Rows(i)(1).ToString()
%>
<tr>
<td width="17%" rowspan="4">
<a href="Home2.aspx?var=<%Response.Write(dato)%>">
<embed id="media" align="top" autostart="0", height="80"
showcontrols="false" src="video/<% Response.Write(dato) %>.avi"
style="height: 80px" width="100"></embed>
</a>
</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;
<a href="Home2.aspx?var=<%Response.Write(dato)%>" style=" font-
family:'Arial Narrow';color:teal">
<%Response.Write(titulo)%>
</a>
</td>
</tr>
<tr>
<td><a href="Home2.aspx?var=<%Response.Write(dato)%>"
style="color: black; font-family: 'Californian FB'; text-decoration: line-
through">&nbsp;&nbsp;ver video</a></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<%Next%>
</table>
</td>
</tr>
<tr>
<td style="background-color: salmon" colspan="3">&nbsp; &nbsp;</
td>
</tr>
<tr>
<td style="height: 19px; background-color: black"
colspan="3">&nbsp; &nbsp;

www.detodoprogramacion.org
232 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

</td>
</tr>
</table>
</form>
</body>
</html>

Código
Imports Entidad
Imports Negocio
Imports System.Data
Partial Class listado
Inherits System.Web.UI.Page
Dim x As String
Dim x2 As String
Dim cu As New C_Usuario

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
If Not Page.IsPostBack Then
x = Request.QueryString("var")
TextBox1.Text = x
If Session("Usuario") = "desconectado" Or Session("Usuario") = "" Then
lblusuario.Visible = False
btnsession.Visible = False
btnpagina.Visible = False
Image1.Visible = False
Else
lblusuario.Text = Session("Usuario")
lblusuario.Visible = True
btnsession.Visible = True
btnpagina.Visible = True
btnregistro.Visible = False
btningresar.Visible = False
Image1.Visible = True
btnusuarios.Visible = True
Verifica_Imagen()
End If
End If
If TextBox1.Text <> "" Then
x2 = TextBox1.Text.ToUpper.Trim()
Label1.Visible = False
Else
Label1.ForeColor = Drawing.Color.Black
Label1.Text = "Ingrese Nombre de Video"
End If
End Sub

Sub Verifica_Imagen()
Dim dt As New DataTable
Dim u As New Entidad.Usuario

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 233

u.nick_usu = Session("Usuario")
dt = cu.Perfil_Usuario(u)
Dim i As Integer
i = Integer.Parse(dt.Rows(0).Item(0))
If i = 0 Then
Image1.ImageUrl = "~/img/Usuario.png"
Else
Image1.ImageUrl = "~/img/" + dt.Rows(0).Item(1).ToString()
End If
Image1.Height = 60
Image1.Width = 60
End Sub
Protected Sub btnsession_Click(ByVal sender As Object, ByVal e As System.
EventArgs) Handles btnsession.Click
Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
u.est_usu = 0
cu.Est_Con_Usuario(u)
Session("Usuario") = "desconectado"
Response.Redirect("Home.aspx")
End Sub

Protected Sub btnbuscar_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnbuscar.Click
Response.Redirect("Listado_Videos.aspx?var=" + TextBox1.Text.Trim + "")
End Sub

Protected Sub btnhome_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnhome.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Home.aspx")
End Sub

Protected Sub btnregistro_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnregistro.Click
Response.Redirect("Registro_Usuario.aspx")
End Sub

Protected Sub btningresar_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btningresar.Click
Response.Redirect("Ingreso_Usuario.aspx")
End Sub

Protected Sub btnpagina_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnpagina.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Pagina_Usuario.aspx")
End Sub

Protected Sub btnusuarios_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnusuarios.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Usuarios_Conectados.aspx")

www.detodoprogramacion.org
234 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

End Sub
End Class

Página Información de Usuario


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Inf_Usuario.aspx.vb"
Inherits="Inf_Usuario" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/


TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Información de Usuario</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
a:link {
text-decoration: none;
color: #000099;
}

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 235

a:visited {
text-decoration: none;
color: #000099;
}
a:hover {
text-decoration: none;
color: #FF0000;
}
a:active {
text-decoration: none;
color: #000099;
}
-->
</style>
<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>
</head>
<body>
<form id="form1" runat="server">
<table border="0" align="center" cellpadding="0" cellspacing="0"
style="width: 86%; height: 502px" >
<tr>
<td width="43%" rowspan="3"><img src="auxiliares/logo.png" alt=""
width="345" height="125" /></td>
<td width="47%" height="87" >&nbsp;</td>
<td align="center" style="width: 107px"><asp:Image ID="Image1"
runat="server" Height="60px" Width="60px" /></td>
</tr>
<tr>
<td style="height: 19px">&nbsp;</td>
<td align="center" style="width: 107px; height: 19px;"><asp:Label
ID="lblusuario" runat="server" Width="136px" ForeColor="Green" style="color: red;
font-family: 'Californian FB'"></asp:Label></td>
</tr>
<tr>
<td style="font-family:Arial Narrow;font-
size:5;color:#333333; height: 20px;">&nbsp;&nbsp;
<script language ="javascript" type="text/javascript">
var hoy = new Date();
dia = hoy.getDate();
mes = hoy.getMonth();
anyo = hoy.getYear();
if (mes == "0") convertir_mes = "Enero";
else if (mes == "1") convertir_mes = "Febrero";
else if (mes == "2") convertir_mes = "Marzo";
else if (mes == "3") convertir_mes = "Abril";
else if (mes == "4") convertir_mes = "Mayo";
else if (mes == "5") convertir_mes = "Junio";
else if (mes == "6") convertir_mes = "Julio";
else if (mes == "7") convertir_mes = "Agosto";
else if (mes == "8") convertir_mes = "Septiembre";
else if (mes == "9") convertir_mes = "Octubre";
else if (mes == "10") convertir_mes = "Noviembre";
else convertir_mes = "Diciembre";

www.detodoprogramacion.org
236 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

document.write ( "Lima "+ dia + " " + convertir_mes + " de " +


anyo);
</script>
</td>
<td align="center" style="width: 107px; height:
20px"><asp:LinkButton ID="btnsession" runat="server" Font-Names="Arial Narrow"
ToolTip="Cerrar Sesión" style="color: blue; font-family: 'Californian FB'; text-
decoration: line-through" >[Salir]</asp:LinkButton></td>
</tr>
<tr>
<td colspan="3" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td colspan="3" style="height: 21px">
<asp:ImageButton ID="btnhome" runat="server"
AlternateText="Home" ImageUrl="auxiliares/home.png" /><asp:ImageButton
ID="btnregistro" runat="server" AlternateText="Registro"
ImageUrl="auxiliares/registro.png" /><asp:ImageButton
ID="btningresar" runat="server"
AlternateText="Ingresar" ImageUrl="auxiliares/ingresar.png" /><asp:ImageButton
ID="btnpagina" runat="server"
AlternateText="Página Usuario" ImageUrl="auxiliares/usuario.png"
/><asp:ImageButton
ID="btnusuarios" runat="server"
AlternateText="Usuarios Conectados" ImageUrl="auxiliares/conectados.png" /></td>
</tr>
<tr>
<td colspan="3" bgcolor="#CCCCCC" style="height: 3px"></td>
</tr>
<tr>
<td colspan="3" style="background-color: salmon">&nbsp;</td>
</tr>
<tr>
<td >&nbsp;
<asp:TextBox ID="TextBox1" runat="server" Width="335px"></
asp:TextBox>
</td>
<td ><asp:ImageButton ID="btnbuscar" runat="server"
AlternateText="Buscar" BorderColor="#D4D0C8"
Height="30" ImageUrl="auxiliares/buscar.png" Width="30" />
</td>
<td style="width: 107px" >&nbsp;</td>
</tr>
<tr>
<td colspan="3" style="height: 19px">&nbsp;</td>
</tr>
<tr>
<td colspan="3" style="height: 246px; background-color: #fa8072;"
>
<table width="100%" border="0" align="center" cellpadding="0"
cellspacing="0" >
<tr>
<td width="15%" style="height: 20px; background-color: white"
>&nbsp;</td>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 237

<td colspan="3" style="font-size: 13pt; font-family: forte;


background-color: white" >
Datos del Usuario</td>
<td width="29%" style="background-color: white" >&nbsp;</td>
<td width="15%" style="background-color: #ffffff" >&nbsp;</td>
<td width="6%" style="background-color: #ffffff" >&nbsp;</td>
</tr>
<tr>
<td style="height: 20px; background-color: white" >&nbsp;</td>
<td width="16%" style="background-color: white" >&nbsp;</td>
<td width="5%" colspan="1" style="background-color:
white">&nbsp;</td>
<td width="14%" style="background-color: white" >&nbsp;</td>
<td style="background-color: white" >&nbsp;</td>
<td style="background-color: #ffffff" >&nbsp;</td>
<td style="background-color: #ffffff" >&nbsp;</td>
</tr>
<tr>
<td style="height: 20px; background-color: white" >&nbsp;</td>
<td rowspan="6" align="center" style="background-color:
white"><asp:Image ID="imgusu" runat="server" Height="120px" Width="105px" /></td>
<td style="background-color: white" >&nbsp;</td>
<td style="font-family: 'Californian FB'; background-color: wh
ite;">&nbsp;&nbsp;<strong>Nombre :</strong></td>
<td style="background-color: white; font-family: 'Californian
FB'; height: 20px;"><asp:Label ID="lblnombre" runat="server" ForeColor="#8080FF"
Font-Names="Arial Narrow" Width="140px" style="font-family: 'Californian FB'"></
asp:Label> </td>
<td style="background-color: #ffffff">&nbsp;</td>
<td style="background-color: #ffffff" >&nbsp;</td>
</tr>
<tr>
<td style="height: 20px; background-color: white" >&nbsp;</td>
<td style="background-color: white" >&nbsp;</td>
<td style="font-family: 'Californian FB'; background-color: wh
ite;">&nbsp;&nbsp;<strong>Apellidos :</strong></td>
<td style="background-color: white; font-family:
'Californian FB'; height: 20px;" ><asp:Label ID="lblapellidos" runat="server"
ForeColor="#8080FF" Font-Names="Arial Narrow" Width="140px" style="font-family:
'Californian FB'"></asp:Label> </td>
<td style="background-color: #ffffff" >&nbsp;</td>
<td style="background-color: #ffffff" >&nbsp;</td>
</tr>
<tr>
<td style="height: 20px; background-color: white" >&nbsp;</td>
<td style="background-color: white" >&nbsp;</td>
<td style="font-family: 'Californian FB'; background-color:
white;">
<strong>&nbsp;&nbsp;Fec. Nac :</strong></td>
<td style="background-color: white; font-family:
'Californian FB'; height: 20px;"><asp:Label ID="lblnacimiento" runat="server"
ForeColor="#8080FF" Font-Names="Arial Narrow" Width="140px" style="font-family:
'Californian FB'"></asp:Label> </td>
<td style="background-color: #ffffff;">&nbsp;</td>

www.detodoprogramacion.org
238 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

<td style="background-color: #ffffff" >&nbsp;</td>


</tr>
<tr>
<td style="height: 20px; background-color: white" >&nbsp;</td>
<td style="background-color: white" >&nbsp;</td>
<td style="font-family: 'Californian FB'; background-color: wh
ite;">&nbsp;&nbsp;<strong>Pais :</strong></td>
<td style="background-color: white; font-family: 'Californian
FB'; height: 20px;"><asp:Label ID="lblpais" runat="server" ForeColor="#8080FF"
Font-Names="Arial Narrow" Width="140px" style="font-family: 'Californian FB'"></
asp:Label></td>
<td style="background-color: #ffffff">&nbsp;</td>
<td style="background-color: #ffffff" >&nbsp;</td>
</tr>
<tr>
<td style="height: 20px; background-color: white" >&nbsp;</td>
<td style="height: 20px; background-color: white" >&nbsp;</td>
<td style="font-family: 'Californian FB'; height: 20px;
background-color: white;">&nbsp;&nbsp;<strong>Correo :</strong></td>
<td style="height: 20px; background-color: white; font-family:
'Californian FB';" ><asp:Label ID="lblcorreo" runat="server" ForeColor="#8080FF"
Font-Names="Arial Narrow" Width="140px" style="font-family: 'Californian FB'"></
asp:Label> </td>
<td style="height: 20px; background-color: #ffffff" >&nbsp;</
td>
<td style="height: 20px; background-color: #ffffff" >&nbsp;</
td>
</tr>
<tr>
<td style="height: 20px; background-color: white" >&nbsp;</td>
<td style="height: 20px; background-color: white" >&nbsp;</td>
<td style="font-family: 'Californian FB'; height: 20px;
background-color: white;">&nbsp;&nbsp;<strong>Fec. Reg :</strong></td>
<td style="height: 20px; background-color: white; font-family:
'Californian FB';"><asp:Label ID="lblregistro" runat="server" ForeColor="#8080FF"
Font-Names="Arial Narrow" Width="140px" style="font-family: 'Californian FB'"></
asp:Label> </td>
<td style="background-color: #ffffff;">&nbsp;</td>
<td style="background-color: #ffffff" >&nbsp;</td>
</tr>
<tr>
<td style="height: 20px; background-color: white" >&nbsp;</td>
<td align="center" style="background-color: white"><asp:Label
ID="lblnick" runat="server" ForeColor="Maroon" Font-Names="Arial Narrow"
style="color: blue; font-family: 'Californian FB'; text-decoration: line-
through;"></asp:Label> </td>
<td style="background-color: white" >&nbsp;</td>
<td style="background-color: white" >&nbsp;<asp:LinkButton
ID="LinkButton1" runat="server" Font-Names="Arial Narrow" style="color:
mediumblue; font-family: 'Berlin Sans FB'; text-decoration: line-through">ver
videos</asp:LinkButton></td>
<td style="background-color: white" >&nbsp;</td>
<td style="background-color: #ffffff" >&nbsp;</td>
<td style="background-color: #ffffff" >&nbsp;</td>

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 239

</tr>
<tr>
<td style="height: 20px; background-color: white" >&nbsp;</td>
<td style="background-color: white" >&nbsp;</td>
<td style="background-color: white" >&nbsp;</td>
<td colspan="3" rowspan="2" style="background-color:
#ffffff">
<asp:Label ID="Label1" runat="server" Font-Names="Arial
Narrow" ForeColor="Red" Text="* para ver mas información ,es necesario que
se registre" Width="325px" style="font-family: 'Californian FB'"></asp:Label>
</td>
<td style="background-color: #ffffff" >&nbsp;</td>
</tr>
<tr>
<td style="height: 20px; background-color: white" >&nbsp;</td>
<td style="height: 20px; background-color: white" >&nbsp;</td>
<td style="height: 20px; background-color: white" >&nbsp;</td>
<td style="background-color: #ffffff" >&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>

Programación
Imports Entidad
Imports Negocio
Imports System.Data
Partial Class Inf_Usuario
Inherits System.Web.UI.Page
Dim cu As New Negocio.C_Usuario
Dim cm As New Negocio.C_Mensajes

Protected Sub btnsession_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btnsession.Click
Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
u.est_usu = 0
cu.Est_Con_Usuario(u)
Session("Usuario") = "desconectado"
Response.Redirect("Home.aspx")
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
If Not Page.IsPostBack Then
If Session("Usuario") = "desconectado" Or Session("Usuario") = "" Then
lblusuario.Visible = False

www.detodoprogramacion.org
240 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

btnsession.Visible = False
btnpagina.Visible = False
Image1.Visible = False
datos_usuario()
lblcorreo.Visible = False
lblapellidos.Visible = False
lblnacimiento.Visible = False
btnusuarios.Visible = False
Else
lblusuario.Text = Session("Usuario")
lblusuario.Visible = True
btnsession.Visible = True
btnpagina.Visible = True
btnregistro.Visible = False
btningresar.Visible = False
Image1.Visible = True
btnusuarios.Visible = True
Label1.Visible = False
Verifica_Imagen()
datos_usuario()
End If
End If
End Sub
Sub Verifica_Imagen()

Dim dt As New DataTable


Dim u As New Entidad.Usuario
u.nick_usu = Session("Usuario")
dt = cu.Perfil_Usuario(u)
Dim i As Integer
i = Integer.Parse(dt.Rows(0).Item(0))
If i = 0 Then
Image1.ImageUrl = "~/img/Usuario.png"
Else
Image1.ImageUrl = "~/img/" + dt.Rows(0).Item(1).ToString()
End If
Image1.Height = 60
Image1.Width = 60
End Sub

Public Function Codigo(ByVal nick As String) As String


Dim u As New Entidad.Usuario
u.nick_usu = nick
Dim dt As New DataTable
dt = cu.Busca_Nick(u)
Dim cod As String
cod = dt.Rows(0).Item(0).ToString()
Return cod
End Function

Sub datos_usuario()
Dim dt As New DataTable

www.detodoprogramacion.org
Capítulo 1: Aplicación de manejo de imágenes y videos - Youtube 241

Dim e As New Usuario


e.nick_usu = Request.Params("cod").ToString()
dt = cu.Perfil_Usuario(e)
imgusu.ImageUrl = "~/img/" + dt.Rows(0).Item(1).ToString()
lblnombre.Text = dt.Rows(0).Item(2).ToString()
lblapellidos.Text = dt.Rows(0).Item(3).ToString()
lblnacimiento.Text = DateTime.Parse(dt.Rows(0).Item(4).ToString()).Date
lblpais.Text = dt.Rows(0).Item(5).ToString()
lblcorreo.Text = dt.Rows(0).Item(6).ToString()
lblnick.Text = dt.Rows(0).Item(7).ToString()
lblregistro.Text = DateTime.Parse(dt.Rows(0).Item(8).ToString()).Date
End Sub

Protected Sub btnpagina_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnpagina.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Pagina_Usuario.aspx")
End Sub

Protected Sub btnhome_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnhome.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Home.aspx")
End Sub

Protected Sub btnregistro_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnregistro.Click
Response.Redirect("Registro_Usuario.aspx")
End Sub

Protected Sub btningresar_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btningresar.Click
Response.Redirect("Ingreso_Usuario.aspx")
End Sub

Protected Sub btnbuscar_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnbuscar.Click
Response.Redirect("Listado_Videos.aspx?var=" + TextBox1.Text.Trim + "")

End Sub

Protected Sub btnusuarios_Click(ByVal sender As Object, ByVal e As System.Web.


UI.ImageClickEventArgs) Handles btnusuarios.Click
Session("Usuario") = Session("Usuario")
Response.Redirect("Usuarios_Conectados.aspx")
End Sub

Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles LinkButton1.Click
Response.Redirect("Usuario_Videos.aspx?cod=" + lblnick.Text)
End Sub
End Class

www.detodoprogramacion.org
242 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

www.detodoprogramacion.org
CAPÍTULO

Aplicación de Proceso
2 de Banca Virtual

PROCESO BANCA VIRTUAL


Lo primero que debemos hacer es crear la base de datos, para lo cual vamos a ejecutar el siguiente
script (esto se encuentra en el archivo SCRIPT_BDBANCAVIRTUAL):
CREATE DATABASE dbBancaVirtual
GO
USE dbBancaVirtual
GO
-- Creacion de Tabla Clientes
CREATE TABLE clientes (
cli_id int IDENTITY(1,1) NOT NULL,
cli_nombre varchar(100) NULL,
cli_telfijo varchar(20) NULL,
cli_telmovil varchar(15) NULL,
cli_ruc varchar(11) NULL,
cli_direccion varchar(150) NULL,
cli_claveacceso varchar(4) NOT NULL,
cli_clavedigital varchar(6) NOT NULL,
cli_email varchar(50) NOT NULL
)
go
ALTER TABLE clientes ADD PRIMARY KEY (cli_id ASC)
go
-- Creacion de la Tabla Cuentas
CREATE TABLE cuentas (
cta_id int IDENTITY(1,1) NOT NULL,
cta_numero char(12) NOT NULL,
cta_codcta char(5) NULL,
cta_saldo decimal(10,2) NULL,
tcta_id int NULL,
tarj_id int NULL
)
go
ALTER TABLE cuentas ADD PRIMARY KEY (cta_id ASC)
go
--Creacion de la Tabla Movimiento
CREATE TABLE movimientos (
mov_id int IDENTITY(1,1) NOT NULL,
mov_fecha datetime NOT NULL,
mov_salanterior decimal(10,2) NULL,

www.detodoprogramacion.org
244 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

mov_salactual decimal(10,2) NULL,


mov_monto decimal(10,2) NULL,
tmov_id int NOT NULL,
cta_id int NULL
)
go
ALTER TABLE movimientos ADD PRIMARY KEY (mov_id ASC)
go
-- Creacion de la Tabla Tarjetas
CREATE TABLE tarjetas (
tarj_id int IDENTITY(1,1) NOT NULL,
tarj_numero varchar(16) NULL,
tarj_descripcion varchar(30) NULL,
tarj_clave char(4) NULL,
cli_id int NULL
)
go
ALTER TABLE tarjetas ADD PRIMARY KEY (tarj_id ASC)
go
-- Creacion de la Tabla Tipo de Cambio
CREATE TABLE tipo_cambio (
tcbo_id int IDENTITY(1,1) NOT NULL,
tcbo_moneda char(1) NULL,
tcbo_compra decimal(10,2) NULL,
tcbo_venta decimal(10,2) NULL
)
go
ALTER TABLE tipo_cambio ADD PRIMARY KEY (tcbo_id ASC)
go
-- Creacion de la Tabla Tipo cuentas
CREATE TABLE tipo_cuentas (
tcta_id int IDENTITY(1,1) NOT NULL,
tcta_descripcion varchar(30) NOT NULL,
tcta_moneda char(1) NOT NULL
)
go
ALTER TABLE tipo_cuentas ADD PRIMARY KEY (tcta_id ASC)
go
-- Creacion de la tabla tipo movimiento
CREATE TABLE tipo_movimientos (
tmov_id int IDENTITY(1,1) NOT NULL,
tmov_descripcion varchar(60) NULL
)
go
ALTER TABLE tipo_movimientos ADD PRIMARY KEY (tmov_id ASC)
go
-- Creacion de la Tabla Usuario
CREATE TABLE usuarios (
usu_id int IDENTITY(1,1) NOT NULL,
usu_nombres varchar(50) NULL,
usu_email varchar(30) NULL,
usu_clave varchar(10) NULL,

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 245

usu_estado char(1) NULL


)
go

ALTER TABLE usuarios ADD PRIMARY KEY (usu_id ASC)


go

ALTER TABLE cuentas ADD FOREIGN KEY (tarj_id)


REFERENCES tarjetas (tarj_id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
go

ALTER TABLE cuentas


ADD FOREIGN KEY (tcta_id)
REFERENCES tipo_cuentas (tcta_id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
go

ALTER TABLE movimientos ADD FOREIGN KEY (cta_id)


REFERENCES cuentas (cta_id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
go

ALTER TABLE movimientos ADD FOREIGN KEY (tmov_id)


REFERENCES tipo_movimientos (tmov_id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
go

ALTER TABLE tarjetas ADD FOREIGN KEY (cli_id)


REFERENCES clientes (cli_id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
Go

Ahora vamos a ejecutar el script de inserción para los datos de las tablas (SCRIPT_INSERCION):

-------------------------------------------------------------------------
INSERCION DE DATA PARA LA BDBANCO --------------------------------

use dbBancaVirtual
go

-- TABLA CLIENTES ----------------------------------------------------------------


--------------------------------------

INSERT INTO CLIENTES(cli_nombre,cli_telfijo,cli_telmovil,cli_ruc,cli_direccion,cli_

www.detodoprogramacion.org
246 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

claveacceso,cli_clavedigital,cli_email)
VALUES ('FATIMA SANCHEZ HUACHEZ','3852478','','56325236234','Av. La Marina
1234','1234','123456','laura@gmail.com.pe');
INSERT INTO CLIENTES(cli_nombre,cli_telfijo,cli_telmovil,cli_ruc,cli_direccion,cli_
claveacceso,cli_clavedigital,cli_email)
VALUES ('YURI PANDO','4819005','958364752','57896325487','Av. Pardo
456','1234','123456','alejandromoreno@gmail.com.pe');
INSERT INTO CLIENTES(cli_nombre,cli_telfijo,cli_telmovil,cli_ruc,cli_direccion,cli_
claveacceso,cli_clavedigital,cli_email)
VALUES ('VICTOR SANCHEZ','3578962','','10257800985','Av. Angamos
2547','1234','123456','claudia_lee@gmail.com.pe');
INSERT INTO CLIENTES(cli_nombre,cli_telfijo,cli_telmovil,cli_ruc,cli_direccion,cli_
claveacceso,cli_clavedigital,cli_email)
VALUES ('JAVIER PAJUELO','2578638','','10524788301','Av. España
354','1234','123456','castañeda-blas@gmail.com.pe');
INSERT INTO CLIENTES(cli_nombre,cli_telfijo,cli_telmovil,cli_ruc,cli_direccion,cli_
claveacceso,cli_clavedigital,cli_email)
VALUES ('HENRY CHAVEZ','5786320','','20045876582','Av. Faucett
2547','1234','123456','percyobrendo@gmail.com.pe');
INSERT INTO CLIENTES(cli_nombre,cli_telfijo,cli_telmovil,cli_ruc,cli_direccion,cli_
claveacceso,cli_clavedigital,cli_email)
VALUES ('LUIS GARCIA VALDEZ','5753524','','20478534014','Jr. Callao
247','1234','123456','miguel-narva@gmail.com.pe');
INSERT INTO CLIENTES(cli_nombre,cli_telfijo,cli_telmovil,cli_ruc,cli_direccion,cli_
claveacceso,cli_clavedigital,cli_email)
VALUES ('KATI MORENO LAVADO','3578502','','20450041785','Av. Panamá
2334','1234','123456','monica-gonza@gmail.com.pe');
INSERT INTO CLIENTES(cli_nombre,cli_telfijo,cli_telmovil,cli_ruc,cli_direccion,cli_
claveacceso,cli_clavedigital,cli_email)
VALUES ('CARLOS SEGURA','4825735','','10250088534','Av. Tacna
2457','1234','123456','jhon-morales@gmail.com.pe');
INSERT INTO CLIENTES(cli_nombre,cli_telfijo,cli_telmovil,cli_ruc,cli_direccion,cli_
claveacceso,cli_clavedigital,cli_email)
VALUES ('HELLEN PINEDA DAVILA','3578465','','10258743578','Av. Arenales
1234','1234','123456','mpaico@gmail.com.pe');
INSERT INTO CLIENTES(cli_nombre,cli_telfijo,cli_telmovil,cli_ruc,cli_direccion,cli_
claveacceso,cli_clavedigital,cli_email)
VALUES ('LIS PERALDO','3578524','','10582240535','Av. La Marina
3574','1234','123456','miguelramiro@gmail.com.pe');
go

select * from clientes


go

------------------------------------------------------------------------ TIPO DE
CUENTAS ---------------------------------------------------

INSERT INTO tipo_cuentas(tcta_descripcion, tcta_moneda) VALUES('CTA AHORROS', 'S')


INSERT INTO tipo_cuentas(tcta_descripcion, tcta_moneda) VALUES('CTA AHORROS', 'D')
INSERT INTO tipo_cuentas(tcta_descripcion, tcta_moneda) VALUES('CTA CORRIENTE',
'S')
INSERT INTO tipo_cuentas(tcta_descripcion, tcta_moneda) VALUES('CTA CORRIENTE',
'D')
INSERT INTO tipo_cuentas(tcta_descripcion, tcta_moneda) VALUES('CTS', 'S')
INSERT INTO tipo_cuentas(tcta_descripcion, tcta_moneda) VALUES('CTS', 'D')

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 247

INSERT INTO tipo_cuentas(tcta_descripcion, tcta_moneda) VALUES('DEPOSITO A PLAZO


FIJO', 'S')
INSERT INTO tipo_cuentas(tcta_descripcion, tcta_moneda) VALUES('DEPOSITO A PLAZO
FIJO', 'D')
GO

SELECT * FROM TIPO_CUENTAS


GO

------------------------------------------------------------------------ INSERTAR
TARJETAS -------------------------------------------------

INSERT INTO tarjetas(tarj_numero, tarj_descripcion, tarj_clave, cli_id)


VALUES('5248540105056382', 'CREDIMAS', '753', 1 )
INSERT INTO tarjetas(tarj_numero, tarj_descripcion, tarj_clave, cli_id)
VALUES('4213550355687431', 'DEBITO', '0315', 2 )
INSERT INTO tarjetas(tarj_numero, tarj_descripcion, tarj_clave, cli_id)
VALUES('4213550377896452', 'CREDIMAS', '8954', 3 )
INSERT INTO tarjetas(tarj_numero, tarj_descripcion, tarj_clave, cli_id)
VALUES('4752378933254774', 'DEBITO', '1234', 4 )
INSERT INTO tarjetas(tarj_numero, tarj_descripcion, tarj_clave, cli_id)
VALUES('2558744322566654', 'CREDIMAS', '4321', 5 )
INSERT INTO tarjetas(tarj_numero, tarj_descripcion, tarj_clave, cli_id)
VALUES('1475226854746332', 'DEBITO', '9512', 6 )
INSERT INTO tarjetas(tarj_numero, tarj_descripcion, tarj_clave, cli_id)
VALUES('2547896325412547', 'CREDIMAS', '9632', 7 )
INSERT INTO tarjetas(tarj_numero, tarj_descripcion, tarj_clave, cli_id)
VALUES('3742145874569852', 'DEBITO', '7412', 8 )
INSERT INTO tarjetas(tarj_numero, tarj_descripcion, tarj_clave, cli_id)
VALUES('5897462448553321', 'CREDIMAS', '7896', 9 )
INSERT INTO tarjetas(tarj_numero, tarj_descripcion, tarj_clave, cli_id)
VALUES('4520252102541189', 'DEBITO', '9874', 10 )
go

select * from tarjetas


go
------------------------------------------------------------------------ INSERTAR
CUENTAS --------------------------------------------------

INSERT INTO cuentas(cta_numero, cta_codCTA, cta_saldo, tcta_id, tarj_id)


VALUES('191-10521-19', '12345', 1000, 1, 1)
INSERT INTO cuentas(cta_numero, cta_codCTA, cta_saldo, tcta_id, tarj_id)
VALUES('191-12507-09', '98741', 1200, 2, 2)
INSERT INTO cuentas(cta_numero, cta_codCTA, cta_saldo, tcta_id, tarj_id)
VALUES('191-18912-08', '96321', 350, 3, 3)
INSERT INTO cuentas(cta_numero, cta_codCTA, cta_saldo, tcta_id, tarj_id)
VALUES('191-19395-02', '98753', 250, 4, 4)
INSERT INTO cuentas(cta_numero, cta_codCTA, cta_saldo, tcta_id, tarj_id)
VALUES('192-13054-00', '35784', 370, 5, 5)
go

www.detodoprogramacion.org
248 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

select * from cuentas

------------------------------------------------------------------------ INSERTAR
TIPO_CAMBIO ----------------------------------------------

INSERT INTO tipo_cambio(tcbo_moneda, tcbo_compra, tcbo_venta) VALUES('D', 2.84,


2.85)
GO

SELECT * FROM TIPO_CAMBIO

---------------------------------------------------------------------- -- INSERTAR
USUARIOS -------------------------------------------------

INSERT INTO usuarios (usu_nombres, usu_email, usu_clave, usu_estado)


VALUES('administrador', 'admin@bancavirtual.com', '12345', '1')
GO

SELECT * FROM USUARIOS


GO
----------------------------------
-- Tipo movimiento
----------------------------------
insert into tipo_movimientos values('RETIRO POR CAJERO')
insert into tipo_movimientos values('INGRESO GANADO')
insert into tipo_movimientos values('COM. SALDO MINIMO')
insert into tipo_movimientos values('RETIRO POR CAJA OTRO BANCO')
insert into tipo_movimientos values('IMPUESTO ITF')
insert into tipo_movimientos values('TRANSLADO OTRA CUENTA')
insert into tipo_movimientos values('DEPOSITO POR VENTANILLA')
insert into tipo_movimientos values('TRANSFERENCIA BANCARIA (RETIRO)')
insert into tipo_movimientos values('TRANSFERENCIA BANCARIA (DEPOSITO)')

go
----------------------------------
-- Movimientos
----------------------------------
insert into movimientos values('2010/04/01',2000,1500,500,1,1)
insert into movimientos values('2010/04/06',1500,1400,100,1,1)
insert into movimientos values('2010/04/08',1400,1310,90,1,1)
insert into movimientos values('2010/04/12',1310,1200,110,1,1)
insert into movimientos values('2010/04/04',1200,1000,200,1,1)
go
insert into movimientos values('2010/02/02',2000,1500,500,1,2)
insert into movimientos values('2010/03/07',1500,1400,100,1,2)
insert into movimientos values('2010/04/09',1400,1200,200,1,2)
go
insert into movimientos values('2010/04/01',1000,500,500,1,3)
insert into movimientos values('2010/04/06',500,400,100,1,3)
insert into movimientos values('2010/04/08',400,350,50,1,3)
go

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 249

insert into movimientos values('2010/03/01',1000,600,400,1,4)


insert into movimientos values('2010/04/06',600,300,300,1,4)
insert into movimientos values('2010/04/08',300,250,50,1,4)
go
insert into movimientos values('2010/03/01',1000,800,200,1,5)
insert into movimientos values('2010/04/06',800,600,200,1,5)
insert into movimientos values('2010/04/08',400,370,30,1,5)
select * from cuentas
go

Luego de eso, ejecutamos el Script de los procedimientos almacenados, para empezar trabajar(Archivo
procedures.sql).
use dbBancaVirtual
go
-- Procedimiento de Logeo
create PROC Logueo1
@nro VARCHAR(16),
@des VARCHAR(30)
AS
SELECT tarj_numero,tarj_descripcion from tarjetas t,clientes c where t.cli_id=c.
cli_id and tarj_numero=@nro and tarj_descripcion=@des
Go

--logueo1 '5248540105056382','CREDIMAS'

-- Procedimiento de Logeo 2
create PROC Logueo2
@nro VARCHAR(16),
@clave VARCHAR(4)
AS
SELECT c.cli_nombre,t.tarj_numero,t.tarj_clave,c.cli_id from tarjetas t,clientes c
where t.cli_id=c.cli_id and t.tarj_numero=@nro and t.tarj_clave=@clave
Go

--logueo2 '5248540105056382','753'

-- Procedimientos de descripción de tarjetas


create proc lis_tar_des
as
select tarj_descripcion from tarjetas
group by tarj_descripcion
go

-- Procedimiento de descripción de cuentas


create proc lis_cuenta_cod
@nro varchar(16)
as
select t.tcta_descripcion,c.cta_numero,c.cta_saldo,t.tcta_moneda,ta.tarj_
descripcion,ta.tarj_numero,c.cta_id
from cuentas c,tipo_cuentas t, tarjetas ta

www.detodoprogramacion.org
250 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

where c.tcta_id=t.tcta_id and ta.tarj_id=c.tarj_id and ta.tarj_numero=@nro


go

--lis_cuenta_cod '5248540105056382'

create proc lis_mov_cod


@cod int
as
select m.mov_fecha,tm.tmov_descripcion,m.mov_salanterior,m.mov_monto,m.mov_
salactual,c.cta_numero,c.cta_id
from movimientos m, tipo_movimientos tm, tarjetas t,cuentas c
where m.tmov_id=tm.tmov_id and m.cta_id=c.cta_id and t.tarj_id=c.tarj_id and
c.cta_id=@cod
go
--lis_mov_cod 1

create proc depositar


@date datetime ,
@salanterior decimal(10,2),
@salactual decimal(10,2),
@monto decimal(10,2),
@mov_id int,
@cta_id int
as
insert into movimientos values(@date ,@salanterior,@salactual,@monto,@mov_id,@
cta_id)
update cuentas set cta_saldo=cta_saldo+@monto
where cta_id=@cta_id
go

create proc retirar


@date datetime ,
@salanterior decimal(10,2),
@salactual decimal(10,2),
@monto decimal(10,2),
@mov_id int,
@cta_id int
as
insert into movimientos values(@date ,@salanterior,@salactual,@monto,@mov_id,@
cta_id)
update cuentas set cta_saldo=cta_saldo-@monto
where cta_id=@cta_id
go

create proc lis_mov_cod_2


@cod varchar(12)
as
select
m.mov_fecha,tm.tmov_descripcion,m.mov_salanterior,m.mov_monto,m.mov_salactual,c.
cta_numero,c.cta_id
from movimientos m, tipo_movimientos tm, tarjetas t,cuentas c
where m.tmov_id=tm.tmov_id and m.cta_id=c.cta_id and c.cta_id=m.cta_id and t.tarj_

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 251

id=c.tarj_id and c.cta_numero=@cod


go
--lis_mov_cod_2 '191-10521-19'

-- Procedimientos de cuentas por Tarjeta


CREATE PROCEDURE sp_CuentasPorTarjeta
@tarj_id INT
AS
SELECT a.cta_id, a.cta_numero
FROM cuentas a, tarjetas b
WHERE a.tarj_id = b.tarj_id
AND b.tarj_id = @tarj_id
ORDER BY a.cta_id
go
--sp_CuentasPorTarjeta 1

-- Procedimiento de Cuentas por Numeros


CREATE PROCEDURE sp_CuentasPorNumero
@cta_numero varchar(12)
AS
SELECT cta_id, cta_saldo, cta_numero FROM cuentas WHERE cta_numero = @cta_numero
GO

-- Procedimiento de clave de Cliente


CREATE PROCEDURE sp_cliente
@cli_id AS INT
AS
SELECT cli_clavedigital FROM clientes WHERE cli_id = @cli_id
GO

CREACIÓN DE LA CLASE DATOS


Antes de empezar a realizar los formularios de trabajo, vamos a crear una clase de datos que tendrá
las siguientes caracterís cas:

Ahora veamos el script que se ha producido para la creación de dicha clase:

Datos_Cliente
Imports System.Data
Imports System.Configuration
Public Class Datos_Cliente

www.detodoprogramacion.org
252 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Public Function cn() As String


Return ConfigurationManager.ConnectionStrings("conex").ConnectionString
End Function
Public Function logueo1(ByVal Nro As String, ByVal des As String) As DataSet
Return SqlHelper.ExecuteDataset(cn, "logueo1", Nro, des)
End Function
Public Function logueo2(ByVal Nro As String, ByVal cla As String) As DataSet
Return SqlHelper.ExecuteDataset(cn, "logueo2", Nro, cla)
End Function
Public Function cliente(ByVal id As Integer) As DataSet
Return SqlHelper.ExecuteDataset(cn, "sp_cliente", id)
End Function
End Class

Datos_Cuentas
Imports System.Configuration
Imports System.Data
Public Class Datos_Cuentas
Public Function cn() As String
Return ConfigurationManager.ConnectionStrings("conex").ConnectionString
End Function
Public Function lista_cta(ByVal cod As String) As DataSet
Return SqlHelper.ExecuteDataset(cn, "lista_cta", cod)
End Function
Public Function lis_cuenta_cod(ByVal cod As String) As DataSet
Return SqlHelper.ExecuteDataset(cn, "lis_cuenta_cod", cod)
End Function
Public Function cuentas_por_tarjeta(ByVal numero As Integer) As DataSet
Return SqlHelper.ExecuteDataset(cn, "sp_CuentasPorTarjeta", numero)
End Function
Public Function cuentas_por_numcta(ByVal numcta As String) As DataSet
Return SqlHelper.ExecuteDataset(cn, "sp_CuentasPorNumero", numcta)
End Function
End Class

datos_movimientos
Imports System.Configuration
Imports System.Data
Public Class datos_movimientos
Public Function cn() As String
Return ConfigurationManager.ConnectionStrings("conex").ConnectionString
End Function
Public Function lis_mov_cod(ByVal cod As Integer) As DataSet
Return SqlHelper.ExecuteDataset(cn, "lis_mov_cod", cod)
End Function
Public Function depositar(ByVal fec As Date, ByVal salanterior As Decimal,
ByVal salactual As Decimal, ByVal monto As Decimal, ByVal tmov_id As Integer,
ByVal cta_id As Integer) As DataSet
Return SqlHelper.ExecuteDataset(cn, "depositar", fec, salanterior,
salactual, monto, tmov_id, cta_id)
End Function

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 253

Public Function retirar(ByVal fec As Date, ByVal salanterior As Decimal, ByVal


salactual As Decimal, ByVal monto As Decimal, ByVal tmov_id As Integer, ByVal cta_
id As Integer) As DataSet
Return SqlHelper.ExecuteDataset(cn, "retirar", fec, salanterior,
salactual, monto, tmov_id, cta_id)
End Function
End Class

Datos_tarjeta
Imports System.Configuration
Imports System.Data
Public Class Datos_tarjeta
Public Function cn() As String
Return ConfigurationManager.ConnectionStrings("conex").ConnectionString
End Function
Public Function lis_tar_des() As DataSet
Return SqlHelper.ExecuteDataset(cn, "lis_tar_des")
End Function
End Class

Luego no se olviden de crear el SQLHelper, tal como se encuentra en el script adjunto de este ejercicio.

CREACIÓN DE LA CLASE NEGOCIO


Ahora vamos crear la clase Negocio, la cual debe tener la siguiente estructura:

Empecemos a hacer la codificación.

Negocio_Cliente
Imports System.Data
Imports DATOS
Public Class Negocio_Cliente
Dim obj As New Datos_Cliente
Public Function logueo1(ByVal Nro As String, ByVal des As String) As DataSet
Return obj.logueo1(Nro, des)
End Function
Public Function logueo2(ByVal Nro As String, ByVal cla As String) As DataSet
Return obj.logueo2(Nro, cla)
End Function
Public Function cliente(ByVal id As Integer) As DataSet
Return obj.cliente(id)
End Function
End Class

www.detodoprogramacion.org
254 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Negocio_Cuenta
Imports System.Data
Imports DATOS
Public Class Negocio_Cuenta
Dim obj As New Datos_Cuentas
Public Function lista_cta(ByVal cod As String) As DataSet
Return obj.lista_cta(cod)
End Function
Public Function lis_cuenta_cod(ByVal cod As String) As DataSet
Return obj.lis_cuenta_cod(cod)
End Function
Public Function cuentas_por_tarjeta(ByVal numero As Integer) As DataSet
Return obj.cuentas_por_tarjeta(numero)
End Function
Public Function cuentas_por_numcta(ByVal numcta As String) As DataSet
Return obj.cuentas_por_numcta(numcta)
End Function
End Class

negocio_movimientos
Imports System.Data
Imports DATOS
Public Class negocio_movimientos
Dim obj As New datos_movimientos
Public Function lis_mov_cod(ByVal cod As Integer) As DataSet
Return obj.lis_mov_cod(cod)
End Function
Public Function depositar(ByVal fec As Date, ByVal salanterior As Decimal,
ByVal salactual As Decimal, ByVal monto As Decimal, ByVal tmov_id As Integer,
ByVal cta_id As Integer) As DataSet
Return obj.depositar(fec, salanterior, salactual, monto, tmov_id, cta_id)
End Function
Public Function retirar(ByVal fec As Date, ByVal salanterior As Decimal, ByVal
salactual As Decimal, ByVal monto As Decimal, ByVal tmov_id As Integer, ByVal cta_
id As Integer) As DataSet
Return obj.retirar(fec, salanterior, salactual, monto, tmov_id, cta_id)
End Function
End Class

Negocio_tarjeta
Imports System.Data
Imports DATOS
Public Class Negocio_tarjeta
Dim obj As New Datos_tarjeta

Public Function lis_tar_des() As DataSet


Return obj.lis_tar_des()
End Function
End Class

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 255

CREACIÓN DE LOS WEB FORMS DE LA APLICACIÓN


Bien, ahora empecemos a codificar cada uno de los web forms; comencemos con el formulario INDEX.
ASPX, que debe ser el siguiente diseño:

Para lograr este código fuente (source) debe ser de la siguiente manera:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Banca Virtual</title>
<link href="styles/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
function validar(){
if(document.form1.TextBox2.value == ''){
alert('Ingrese el numero de tarjeta');
return false;
}
return true;
}
</script>
<script type="text/javascript" language="javaScript">
window.history.forward();
/*window.history.back(1);*/
</script>
</head>
<body>
<div id="outWrapper" class="default">
<div id="wrapper">
<div id="header">
<div id="logo"> <h1><a href="/"><span>Banca Virtual</span></a></h1>
</div>

www.detodoprogramacion.org
256 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

<div id="menu">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="right">
<ul id="main">
<li><a href="/" class="actived">Inicio</a></li>
<li><a href="/">Nosotros</a></li>
<li><a href="/">Servicio al cliente</a></li>
<li><a href="/">Contactenos</a></li>
<li><a href="/">Mapa web</a></li>
</ul></td>
</tr>
<tr>
<td align="right">&nbsp;</td>
</tr>
<tr>
<td align="right">
<ul id="xtras">
<li> <img src="styles/graphics/ico_tipocambio.jpg" width="13"
height="10" alt="Banca Virtual - Icono" /></li>
<li>Tipo de cambio:</li>
<li><strong>Compra</strong>: S/. 2.875</li>
<li><strong>Venta</strong>: S/- 2.890</li>
</ul>
</td>
</tr>
</table>
</div>
</div><!-- end #header -->
<div id="container">
<div id="sidebar">
<div class="form"> <form id="form1" runat="server">
<div class="fieldset" id="box">
<label class="txtBold">Seleccione tu tarjeta:</label><br />
<asp:DropDownList ID="DropDownList1" runat="server"
Width="240px" AutoPostBack="True">
</asp:DropDownList>
<label class="txtBold">Ingrese Nro de Tarjeta:</label><br
/>
<asp:TextBox ID="TextBox2" runat="server"
Width="202px"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1"
runat="server"
ControlToValidate="TextBox2" ErrorMessage="Ingrese Numero " Style="position:
relative"> </asp:RequiredFieldValidator><p class="txtGreen">Complete la
información y luego presione el
boton continuar:</p>
<asp:Button ID="Button2" runat="server" Text="Continuar"
CssClass="btnContinue" />
</div>
</form>
</div>
</div>

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 257

<div id="sidebar2">
<div class="form2">
<p>Banca Virtual</p> <h1>PARA CLIENTES</h1>
<p>Bienvenido a nuestra banca por intenet,
en donde podrás tener acceso a tus cuentas y realizar
transacciones con total seguridad y comodidad.</p>
<h2>SERVICIO AL CLIENTE</h2>
<ul>
<li>* <a href="#">Afiliate ahora</a></li>
<li>* <a href="#">¿Olvidaste tu clave?</a></li>
<li>* <a href="#">Conoce nuestro servicio de banca
virtual</a></li>
</ul>
</div>
</div>

<div id="sidebar3">
<div id="aviso" class="aviso_tips">
<p>&nbsp;</p><p class="txtBold">
<img src="styles/graphics/icono_seguridad.gif" width="62"
height="62" align="left"
alt="Banca Virtual"/> Seguridad:</p>
<p class="txtBold">&nbsp;</p>
<h1 class="txtGreen ">Que debo saber?</h1>
<p>&nbsp;</p>
<p><strong class="txtBold">Banca Virtual</strong> no envia correos electronicos
solicitando información confidencial,como tu numero de tu tarjeta o clave. Para
mayor información has clic <a href="#">aqui</a></p>
</div>
</div>
<br class="clearfloat" />
<div id="content">
<h3>NOTICIAS Bancarias</h3>
<ul>
<li>&raquo; <a href="#"> Banco Nuevo Finanza otorgó crédito
300 mil a microempresarios</a></li>
<li>&raquo; <a href="#">Banco Nuevo Finanza entregó siete
toneladas en donativos
para Huánuco y Zonas Altoandinas</a></li>
<li>&raquo; <a href="#">Suplemento por el 50 aniversario del
Banco Nuevo Finanza</a></li>
<li>&raquo; <a href="#">Cómo informa la prensa sobre el
Banco</a></li>
</ul>
</div>
</div>
<div id="footer">
<p style="float:left;">
<a href="#">Políticas de Seguridad</a>&nbsp;&nbsp; | &nbsp;
<a href="#">Terminos de uso</a>&nbsp;&nbsp; | &nbsp;
<a href="#">Privacidad</a>
</p>
<p style="float:right;">© Copyright Banca Virtual Perú - 2010.

www.detodoprogramacion.org
258 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Todos los derechos reservados. </p>


<br class="clearfloat" />
</div>
</div>
</div>
</body>
</html>

Revisamos el código que se ha definido en el script:


Imports System.Data
Imports NEGOCIO
Partial Class _Default
Inherits System.Web.UI.Page
Dim obj As New Negocio_Cliente
Dim objt As New Negocio_tarjeta
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.
EventArgs) Handles Button2.Click
Try
Dim dt As New DataTable
Dim nro As String = Me.TextBox2.Text()
Dim des As String = Me.DropDownList1.SelectedValue()

dt = obj.logueo1(nro, des).Tables(0)
If dt.Rows.Count > 0 Then
Dim cu As String = dt.Rows(0)(0)

Response.Redirect("Logueo.aspx?cu=" + cu)
Else
Response.Redirect("error_1.aspx")
End If

TextBox2.Text = ""
Catch ex As Exception

End Try

End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
Try
If Not Page.IsPostBack Then
DropDownList1.DataSource = objt.lis_tar_des()
DropDownList1.DataTextField = "tarj_descripcion"
DropDownList1.DataValueField = "tarj_descripcion"
DropDownList1.DataBind()
End If
Catch ex As Exception

End Try
End Sub
End Class

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 259

Ahora veamos la página de LOGUEO.ASPX, en la cual ingresaremos la clave que nos permi rá el acceso
al sistema.

La cual ene la siguiente codificación, en sí HTML:


<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Banca Virtual</title>
<link href="styles/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" language="javaScript">
window.history.forward();
/*window.history.back(1);*/
</script>
</head>
<body>
<div id="outWrapper" class="default">
<div id="wrapper">
<div id="header">
<div id="logo">
<h1><a href="/"><span>Banca Virtual</span></a></h1>
</div>
<div id="menu">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="right">
<ul id="main">
<li><a href="/" class="actived">Inicio</a></li>
<li><a href="/">Nosotros</a></li>
<li><a href="/">Servicio al cliente</a></li>
<li><a href="/">Contactenos</a></li>
<li><a href="/">Mapa web</a></li>
</ul>

www.detodoprogramacion.org
260 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

</td>
</tr>
<tr>
<td align="right">&nbsp;</td>
</tr>
<tr>
<td align="right">
<ul id="xtras">
<li><img src="styles/graphics/ico_tipocambio.jpg" width="13" height="10"
alt="Banca Virtual - Icono" /></li>
<li>Tipo de cambio:</li>
<li><strong>Compra</strong>: S/. 2.875</li>
<li><strong>Venta</strong>: S/- 2.890</li>
</ul>
</td>
</tr>
</table>
</div>
</div>
<div id="container">
<div id="sidebar">
<div class="form" style="text-align:center;">
<form name="form1" id="form1" runat="server">
<table style="text-align:center;" width="100%">
<tr>
<td colspan="2">
<asp:Label ID="Label1" runat="server" Text="Numero
de Tarjeta"
Width="128px"></asp:Label>
<asp:Label ID="Label2" runat="server"
Width="104px"></asp:Label><br />
</td>
</tr>
<tr>
<td align="right"><asp:Label ID="Label3"
runat="server"
Text="Ingrese Clave"></asp:Label></td>
<td align="left" valign="middle"><asp:TextBox
ID="txtclave" TextMode="Password"
runat="server" Width="64px"></asp:TextBox></td>
</tr>
<tr>
<td colspan="2" align="center">
<table>
<tr>
<script language="javascript">
var num=new Array(1,2,3,4,5,6,7,8,9,0);
cont=0;
for(i=0;i<num.length;i++){
document.write("<td width='20' height='20'
align='center'
background='imagenes/btn.jpg' ><a style='color:#333333; text-decoration=none'
href='javascript:poner("+num[i]+")'>"+num[i]+"</a></td>");

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 261

cont++;
if(cont%3==0){
document.write("</tr><tr>");
}
}
function poner(n){
document.form1.txtclave.value+=n;
}
</script>
<td colspan="2" width="38" background="imagenes/
btn_1.jpg" style="height: 19px">
<a href="javascript:limpiar()" style="color#333333;
text-decoration:none;"> Limpiar</a>
</td>

<script language="javascript">
function limpiar(){
document.form1.txtclave.value="";
document.form1.txtclave.value="";
}
</script>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2"><asp:Button ID="Button1"
runat="server" Text="Ingresar" /></td>
</tr>
</table>
</form>
</div>
</div>
<div id="sidebar2">
<div class="form2">
<p>Banca Virtual</p>
<h1>PARA PERSONAS</h1>
<p>Bienvenido a nuestra banca por intenet,
en donde podrás tener acceso a tus cuentas y realizar
transacciones con total seguridad y comodidad.</p>
<h2>SERVICIO AL CLIENTE</h2>
<ul>
<li>* <a href="#">Afiliate ahora</a></li>
<li>* <a href="#">¿Olvidaste tu clave?</a></li>
<li>* <a href="#">Conoce nuestro servicio de banca
virtual</a></li>
</ul>
</div>
<!-- end #sidebar2 -->
</div>
<div id="sidebar3">

www.detodoprogramacion.org
262 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

<div id="aviso" class="aviso_tips">


<p>&nbsp;</p>
<p class="txtBold">
<img src="styles/graphics/icono_seguridad.gif" width="62"
height="62" align="left"
alt="Banca Virtual"/> Seguridad:</p>
<p class="txtBold">&nbsp;</p>
<h1 class="txtGreen ">Que debo saber?</h1>
<p>&nbsp;</p>
<p><strong class="txtBold">Banca Virtual</strong> no envia
correos electronicos
solicitando información confidencial,
como tu numero de tu tarjeta o clave. Para mayor información
has clic
<a href="#">aqui</a></p>
</div>
</div>
<br class="clearfloat" />
<div id="content">
<h3>NOTICIAS Bancarias</h3>
<ul>
<li>&raquo; <a href="#"> Banco de la Nación otorgó crédito
300 mil a microempresarios</a></li>
<li>&raquo; <a href="#">Banco de la Nación entregó siete
toneladas en donativos
para Huánuco y Zonas Altoandinas</a></li>
<li>&raquo; <a href="#">Suplemento por el 44 aniversario del
BN</a></li>
<li>&raquo; <a href="#">Cómo informa la prensa</a></li>
</ul>
</div>
</div>
<div id="footer">
<p style="float:left;">
<a href="#">Políticas de Seguridad</a>&nbsp;&nbsp; | &nbsp;
<a href="#">Terminos de uso</a>&nbsp;&nbsp; | &nbsp;
<a href="#">Privacidad</a>
</p>
<p style="float:right;">© Copyright Banca Virtual Perú - 2010.
Todos los derechos reservados. </p>
<br class="clearfloat" />
</div>
</div>
</div>
</body>
</html>

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 263

Una de las cosas que siempre me preguntan los alumnos es cómo se construyó esta parte del formulario:

Bueno, el código es el siguiente:


<table>
<tr>
<script language="javascript">
var num=new Array(1,2,3,4,5,6,7,8,9,0);
cont=0;
for(i=0;i<num.length;i++){
document.write("<td width='20' height='20' align='center'
background='imagenes/btn.jpg' >
<a style='color:#333333; text-decoration=none'
href='javascript:poner("+num[i]+")'>" +num[i]+"</a></td>");
cont++;
if(cont%3==0){
document.write("</tr><tr>");
}
}
function poner(n){
document.form1.txtclave.value+=n;
}
</script>
<td colspan="2" width="38" background="imagenes/btn_1.jpg" style="height:
19px">
<a href="javascript:limpiar()" style="color#333333; text-
decoration:none;">Limpiar</a>
</td>
<script language="javascript">
function limpiar(){
document.form1.txtclave.value="";
document.form1.txtclave.value="";
}
</script>
</tr>
</table>

No olvidemos que en esta página estamos haciendo referencia a esta hoja de es lo:
<link href="styles/default.css" rel="stylesheet" type="text/css" />

www.detodoprogramacion.org
264 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Ahora veamos la codificación que se ha realizado en los eventos:


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load
Try
Dim cue As String = Request.Params("cu")
Me.Label2.Text = cue
' Response.Write(Session("tarjeta"))
Catch ex As Exception

End Try
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.
EventArgs) Handles Button1.Click
Try
Dim dt As New DataTable
Dim nro As String = Me.Label2.Text()
Dim cla As String = Me.txtclave.Text()
dt = obj.logueo2(nro, cla).Tables(0)
'Session("tarjeta") = nro
If dt.Rows.Count > 0 Then
Dim nom As String = dt.Rows(0)(0)
Dim cod As String = dt.Rows(0)(1)
Dim cli_id As Integer = dt.Rows(0)(3)
Session("usuario") = nom
Session("codigo") = cod
Session("cliid") = cli_id
Response.Redirect("bienvenida.aspx?nom=" + nom + "&cod=" + cod)
Else
Response.Redirect("error_1.aspx")
End If
Catch ex As Exception

End Try
End Sub
End Class

Seguidamente, vamos a la página BIENVENIDA.ASPX, donde podemos indicar cuál es el proceso que
deseamos realizar.

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 265

Para empezar esta página veamos su código html:


<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Banca Virtual</title>
<link href="styles/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" language="javaScript">
window.history.forward();
</script>
</head>
<body>
<div id="outWrapper" class="default details">
<div id="wrapper">
<div id="header">
<div id="logo">
<h1><a href="/"><span>Banca Virtual</span></a></h1>
</div>
<div id="menu">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="right" style="width: 736px">
<ul id="main">
<li><a href="/" class="actived">Inicio</a></li>
<li><a href="/">Nosotros</a></li>
<li><a href="/">Servicio al cliente</a></li>
<li><a href="/">Contactenos</a></li>
<li><a href="/">Mapa web</a></li>
</ul>
</td>
</tr>
<tr>
<td align="right" style="width: 736px">&nbsp;</td>
</tr>
<tr>
<td align="right" style="width: 736px">
<ul id="xtras">
<li>
<img src="styles/graphics/ico_tipocambio.jpg" width="13"
height="10"
alt="Banca Virtual - Icono" />
</li>

<li>Tipo de cambio:</li>
<li><strong>Compra</strong>: S/. 2.875</li>
<li><strong>Venta</strong>: S/- 2.890</li>
</ul>
</td>
</tr>
</table>
</div>
</div><!-- end #header -->
<div id="container">

www.detodoprogramacion.org
266 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

<div id="content">
<div id="opciones">
<h3>Consultas</h3>
<ul>
<li><a href="#">&rsaquo; Saldos y movimientos</a></li>
</ul>
<p>&nbsp;</p>
<h3>Operaciones</h3>
<ul>
<li><a href="transferencia.aspx">&rsaquo; Transferencia</
a></li>
</ul>
</div>
<div id="details">
<h3>Bienvenido;</h3>
<div style="display:block;">
<form id="form1" runat="server">
<table class="tableTitular" >
<tr>
<th><asp:Label ID="Label1" runat="server" Text="Titular:"
Width="73px"></asp:Label></th>
<td><asp:Label ID="Label2" runat="server"></asp:Label></td>
<th style="width: 51px"><asp:Label ID="Label3" runat="server"
Text="Fecha:"
Width="48px"></asp:Label></th>
<td><asp:Label ID="lblfec" runat="server"></asp:Label></td>
</tr>
<tr>
<th><asp:Label ID="Label4" runat="server" Text="Tarjeta:"
Width="72px">
</asp:Label></th>
<td><asp:Label ID="lbltarjeta" runat="server"></asp:Label></td>
<th style="width: 51px"><asp:Label ID="Label5" runat="server"
Text="Hora:"
Width="48px"></asp:Label></th>
<td><asp:Label ID="lblhora" runat="server"></asp:Label></td>
</tr>
</table>
<asp:LinkButton ID="LinkButton3" runat="server" Style="left: 584px;
position: relative;
top: -94px">Salir</asp:LinkButton><p>&nbsp;</p>
<p><asp:LinkButton ID="LinkButton2" runat="server">Retirar</
asp:LinkButton>
<asp:LinkButton ID="LinkButton1" runat="server">Depositar</
asp:LinkButton>
</p>
<p>&nbsp;</p>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"


Height="48px" HorizontalAlign="Center" CssClass="tableTitular">
<Columns>
<asp:HyperLinkField DataTextField="cta_numero"

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 267

HeaderText="Numero de Cuenta" />


<asp:BoundField DataField="tcta_descripcion"
HeaderText="Tipo de Cuenta" />
<asp:BoundField DataField="tcta_moneda"
HeaderText="Moneda" />
<asp:BoundField DataField="cta_saldo" HeaderText="Saldo
Inicial" />
<asp:CommandField HeaderText="Seleccionar"
ShowSelectButton="True" />
</Columns>
</asp:GridView>
<br />
<br />
<asp:Label ID="Label6" runat="server" Visible="False"></
asp:Label>
<asp:GridView ID="GridView2" runat="server"
AutoGenerateColumns="False" CssClass="tableTitular">
<Columns>
<asp:BoundField DataField="mov_fecha"
HeaderText="Fecha" />
<asp:BoundField DataField="tmov_descripcion"
HeaderText="Descripci&#243;n" />
<asp:BoundField DataField="mov_salanterior"
HeaderText="Saldo Anterior" />
<asp:BoundField DataField="mov_salactual"
HeaderText="Saldo Actual" />
<asp:BoundField DataField="mov_monto"
HeaderText="Monto" />
<asp:BoundField DataField="cta_numero"
HeaderText="Numero de Cuenta" />
</Columns>
</asp:GridView>
</form>
</div>
</div>
</div>
</div>
<div id="footer">
<p style="float:left;">
<a href="#">Políticas de Seguridad</a>&nbsp;&nbsp; | &nbsp;
<a href="#">Terminos de uso</a>&nbsp;&nbsp; | &nbsp;
<a href="#">Privacidad</a>
</p>
<p style="float:right;">© Copyright Banca Virtual Perú - 2010.
Todos los derechos reservados. </p>
<br class="clearfloat" />
</div>
</div>
</div>
</body>
</html>

www.detodoprogramacion.org
268 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Ahora, veamos el script que hemos creado para poder desarrollar el trabajo de esta página:
Imports NEGOCIO
Imports System.Data
Partial Class inicio
Inherits System.Web.UI.Page
Dim obj As New Negocio_Cuenta
Dim objm As New negocio_movimientos
Dim dt As DataTable
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load
Try
If Session("usuario") IsNot Nothing Then
Label2.Text() = Session("usuario")
dt = obj.lis_cuenta_cod(Session("codigo")).Tables(0)
lbltarjeta.Text = dt.Rows(0)(4) + " " + dt.Rows(0)(5)
Session("tbl1") = dt
GridView1.DataSource = Session("tbl1") : GridView1.DataBind()
lblfec.Text() = Today.Date
lblhora.Text = Hour(Now) & ":" & Minute(Now) & ":" & Second(Now)
Dim nr As Integer = dt.Rows(0)(6)
Session("nro") = nr : Session("hora") = lblhora.Text
Session("fecha") = lblfec.Text
Else
Response.Redirect("Index.aspx")
End If
Catch ex As Exception
End Try
End Sub
Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e
As System.EventArgs) Handles GridView1.SelectedIndexChanged
Try
Dim i As Integer = 0
For i = 0 To dt.Rows.Count - 1
Dim cod As String = dt.Rows(0)("cta_id").ToString()
GridView2.DataSource = objm.lis_mov_cod(Integer.Parse(cod))
GridView2.DataBind()
Next
Catch ex As Exception
End Try
End Sub
Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As System.
EventArgs) Handles LinkButton1.Click
Response.Redirect("Depositar.aspx")
End Sub
Protected Sub LinkButton2_Click(ByVal sender As Object, ByVal e As System.
EventArgs) Handles LinkButton2.Click
Response.Redirect("Retirar.aspx")
End Sub
Protected Sub LinkButton3_Click(ByVal sender As Object, ByVal e As System.
EventArgs) Handles LinkButton3.Click
Session.RemoveAll()
Session.Contents.Clear()

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 269

Response.Redirect("Index.aspx")
End Sub
End Class

Ahora, veamos el WebForm de cómo se realiza el proceso de re rar de la cuenta, para esto vamos
trabajar en el WebForm RETIRAR.ASPX:

Inmediatamente, veamos el código HTML de la creación de la página:

<html xmlns="http://www.w3.org/1999/xhtml" >


<head id="Head1" runat="server">
<title>Banca Virtual</title>
<link href="styles/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" language="javaScript">
window.history.forward();
</script>
</head>
<body>
<div id="outWrapper" class="default details">
<div id="wrapper">
<div id="header">
<div id="logo">
<h1><a href="/"><span>Banca Virtual</span></a></h1>
</div>
<div id="menu">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="right">
<ul id="main">
<li><a href="/" class="actived">Inicio</a></li>
<li><a href="/">Nosotros</a></li>
<li><a href="/">Servicio al cliente</a></li>
<li><a href="/">Contactenos</a></li>
<li><a href="/">Mapa web</a></li>

www.detodoprogramacion.org
270 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

</ul>
</td>
</tr>
<tr>
<td align="right">&nbsp;</td>
</tr>

<tr>
<td align="right">
<ul id="xtras">
<li>
<img src="styles/graphics/ico_tipocambio.jpg" width="13" height="10"
alt="Banca Virtual - Icono" />
</li>
<li>Tipo de cambio:</li>
<li><strong>Compra</strong>: S/. 2.875</li>
<li><strong>Venta</strong>: S/- 2.890</li>
</ul>
</td>
</tr>
</table>
</div>
</div><!-- end #header -->
<div id="container">
<div id="content">
<div id="opciones">
<h3>Consultas</h3>
<ul>
<li><a href="#">&rsaquo; Saldos y movimientos</a></li>
</ul>
<p>&nbsp;</p>
<h3>Operaciones</h3>
<ul>
<li><a href="#">&rsaquo; Transferencia</a></li>
</ul>
</div>
<div id="details">
<h3>Retiros:</h3>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Cantidad a Retirar"></
asp:Label>
<asp:TextBox ID="TextBox1" runat="server" ></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Retirar" />
<asp:LinkButton ID="LinkButton1" runat="server"
Style="position: relative">
Regresar</asp:LinkButton>
<br /><asp:Label ID="lblmsg" runat="server" ForeColor="Red"
Width="240px">
</asp:Label><p>&nbsp;</p>
<asp:GridView ID="GridView1" runat="server" CssClass="tableTitular">
</asp:GridView>

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 271

</div>
</form>
</div> </div> /div>
<div id="footer">
<p style="float:left;">
<a href="#">Políticas de Seguridad</a>&nbsp;&nbsp; | &nbsp;
<a href="#">Terminos de uso</a>&nbsp;&nbsp; | &nbsp;
<a href="#">Privacidad</a>
</p> <p style="float:right;">© Copyright Banca Virtual Perú - 2010.
Todos los derechos reservados. </p>
<br class="clearfloat" />
</div>
</div>
</div>
</body>
</html>

Ahora veamos cómo hemos codificado dentro de los eventos del Web Form:
Imports NEGOCIO
Imports System.Data
Partial Class Retirar
Inherits System.Web.UI.Page
Dim obj As New negocio_movimientos
Dim dt As DataTable
Dim objm As New negocio_movimientos
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.
EventArgs) Handles Button1.Click
Try
If Me.TextBox1.Text <> "" Then

Dim fec As Date = Today + " " + Session("hora")


Dim salant As Decimal
Dim monto As Decimal
Dim salact As Decimal
Dim mov_id As Integer
Dim cta_id As Integer

Dim i As Integer = 0
i = dt.Rows.Count - 1
salant = Convert.ToDecimal(dt.Rows(i)("mov_salactual").ToString())
salact = Convert.ToDecimal(dt.Rows(i)("mov_salactual").ToString())
- Convert.ToDecimal(TextBox1.Text)
monto = Convert.ToDecimal(TextBox1.Text)
mov_id = 1
cta_id = Convert.ToInt16(dt.Rows(i)("cta_id").ToString())
If Convert.ToInt16(Me.TextBox1.Text) > 0 Then
If monto <= salant Then
obj.retirar(fec, salant, salact, monto, mov_id, cta_id)
Me.lblmsg.ForeColor = Drawing.Color.Green
Me.lblmsg.Text = "Su operación se realizó
satisfactoriamente"
Else

www.detodoprogramacion.org
272 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Me.lblmsg.Text = "No tiene suficiente Saldo..."


End If
Else
Me.lblmsg.Text = "Error en el Monto Ingresado"
End If
Dim j As Integer = 0
For j = 0 To dt.Rows.Count - 1
Dim cod As String = dt.Rows(0)("cta_id").ToString()
GridView1.DataSource = objm.lis_mov_cod(cta_id)
GridView1.DataBind()
Next
Me.TextBox1.Text = ""
Else
Me.lblmsg.Text = "Ingrese un Monto..."
End If
Catch ex As Exception

End Try
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
Try
If Session("usuario") IsNot Nothing Then
Dim cod As Integer = Session("nro").ToString()
GridView1.DataSource = obj.lis_mov_cod(cod)
GridView1.DataBind()
'Label1.Text = Session("usuario").ToString()
dt = obj.lis_mov_cod(cod).Tables(0)
Else
Response.Redirect("index.aspx")
End If
Catch ex As Exception

End Try
End Sub

Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles LinkButton1.Click
Response.Redirect("bienvenida.aspx")
End Sub
End Class

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 273

Ahora veamos el WebForm de cómo depositar en cuenta, para esto vamos trabajar en el WebForm
DEPOSITAR.ASPX:

Ahora veamos el código HTML de esta página:


<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Banca Virtual</title>
<link href="styles/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" language="javaScript">
window.history.forward();
/*window.history.back(1);*/
</script>
</head>
<body>
<div id="outWrapper" class="default details">
<div id="wrapper">
<div id="header">
<div id="logo">
<h1><a href="/"><span>Banca Virtual</span></a></h1>
</div>
<div id="menu">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="right">
<ul id="main">
<li><a href="/" class="actived">Inicio</a></li>
<li><a href="/">Nosotros</a></li>
<li><a href="/">Servicio al cliente</a></li>
<li><a href="/">Contactenos</a></li>
<li><a href="/">Mapa web</a></li>
</ul>
</td> </tr>
<tr>
<td align="right">&nbsp;</td>

www.detodoprogramacion.org
274 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

</tr>
<tr>
<td align="right"> <ul id="xtras">
<li>
<img src="styles/graphics/ico_tipocambio.jpg" width="13" height="10"
alt="Banca Virtual - Icono" />
</li>
<li>Tipo de cambio:</li>
<li><strong>Compra</strong>: S/. 2.875</li>
<li><strong>Venta</strong>: S/- 2.890</li>
</ul>
</td>
</tr>
</table>
</div>
</div><!-- end #header -->
<div id="container">
<div id="content">
<div id="opciones">
<h3>Consultas</h3>
<ul>
<li><a href="#">&rsaquo; Saldos y movimientos</a></li>
</ul>
<p>&nbsp;</p>
<h3>Operaciones</h3>
<ul>
<li><a href="#">&rsaquo; Transferencia</a></li>
</ul>
</div>
<div id="details">
<h3>Depositos:</h3>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Cantidad a
Despositar"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Depositar"
/>
<asp:LinkButton ID="LinkButton1" runat="server"
Style="position: relative">
Regresar</asp:LinkButton>
<br /><asp:Label ID="lblmsg" runat="server"
ForeColor="Red" Width="264px"></asp:Label><p>&nbsp;</p>
<asp:GridView ID="GridView1" runat="server"
CssClass="tableTitular">
</asp:GridView>
</div>
</form>
</div>
</div>
</div>
<div id="footer">
<p style="float:left;">

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 275

<a href="#">Políticas de Seguridad</a> &nbsp;&nbsp; | &nbsp;


<a href="#">Terminos de uso</a>&nbsp;&nbsp; | &nbsp;
<a href="#">Privacidad</a>
</p>
<p style="float:right;">© Copyright Banca Virtual Perú - 2010.
Todos los derechos reservados. </p>
<br class="clearfloat" />
</div>
</div>
</div>
</body>
</html>

Ahora veamos el código que hemos realizado en los eventos de la página:


Imports NEGOCIO
Imports System.Data
Partial Class Depositar
Inherits System.Web.UI.Page
Dim obj As New negocio_movimientos
Dim dt As DataTable
'Dim obm As New negocio_movimientos

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles Button1.Click
Try
If Me.TextBox1.Text <> "" Then
Dim fec As Date = Today + " " + Session("hora")
Dim salant As Decimal
Dim monto As Decimal
Dim salact As Decimal
Dim mov_id As Integer
Dim cta_id As Integer
Dim i As Integer = 0
i = dt.Rows.Count - 1
salant = Convert.ToDecimal(dt.Rows(i)("mov_salactual").ToString())
salact = Convert.ToDecimal(dt.Rows(i)("mov_salactual").ToString())
+ Convert.ToDecimal(TextBox1.Text)
monto = Convert.ToDecimal(TextBox1.Text)
mov_id = 7
cta_id = Convert.ToInt16(dt.Rows(i)("cta_id").ToString())
If Convert.ToInt16(Me.TextBox1.Text) > 0 Then
obj.depositar(fec, salant, salact, monto, mov_id, cta_id)
Me.lblmsg.ForeColor = Drawing.Color.Green
Me.lblmsg.Text = "Su operación se realizó satisfactoriamente"
Else
Me.lblmsg.Text = "Error en el Monto Ingresado"
End If
Dim j As Integer = 0
For j = 0 To dt.Rows.Count - 1
Dim cod As String = dt.Rows(0)("cta_id").ToString()
GridView1.DataSource = obj.lis_mov_cod(Integer.Parse(cod))
GridView1.DataBind()

www.detodoprogramacion.org
276 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Next
Me.TextBox1.Text = ""
Else
Me.lblmsg.Text = "Ingrese un Monto..."
End If
Catch ex As Exception

End Try
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
Try
If Session("usuario") IsNot Nothing Then
Dim cod As Integer = Session("nro").ToString()
GridView1.DataSource = obj.lis_mov_cod(cod)
GridView1.DataBind()
'Label1.Text = Session("usuario").ToString()
dt = obj.lis_mov_cod(cod).Tables(0)
Else
Response.Redirect("index.aspx")
End If

Catch ex As Exception

End Try

End Sub

Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles LinkButton1.Click
Response.Redirect("bienvenida.aspx")
End Sub
End Class

Ahora veamos el proceso de transferencia, para esto vamos a trabajar en la ventana TRANSFERENCIA.
aspx

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 277

Veamos el código HTML:


<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Banca Virtual</title>
<link href="styles/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" language="javaScript">
window.history.forward();
</script>
</head>
<body>
<div id="outWrapper" class="default details">
<div id="wrapper">
<div id="header">
<div id="logo">
<h1><a href="/"><span>Banca Virtual</span></a></h1>
</div>
<div id="menu">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="right">
<ul id="main">
<li><a href="/" class="actived">Inicio</a></li>
<li><a href="/">Nosotros</a></li>
<li><a href="/">Servicio al cliente</a></li>
<li><a href="/">Contactenos</a></li>
<li><a href="/">Mapa web</a></li>
</ul>
</td>
</tr>
<tr>
<td align="right">&nbsp;</td>
</tr>
<tr>
<td align="right">
<ul id="xtras">
<li>
<img src="styles/graphics/ico_tipocambio.jpg" width="13" height="10" alt="Banca
Virtual - Icono" />
</li>
<li>Tipo de cambio:</li>
<li><strong>Compra</strong>: S/. 2.875</li>
<li><strong>Venta</strong>: S/- 2.890</li>
</ul>
</td>
</tr>
</table>
</div>
</div><!-- end #header -->
<div id="container">
<div id="content">
<div id="opciones">
<h3>Consultas</h3>

www.detodoprogramacion.org
278 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

<ul>
<li><a href="#">&rsaquo; Saldos y movimientos</a></li>
</ul>
<p>&nbsp;</p>
<h3>Operaciones</h3>
<ul>
<li><a href="#">&rsaquo; Transferencia</a></li>
</ul>
</div>
<div id="details">
<h3>Transferencia Bancaria:</h3>
<table class="tableTitular" >
<tr>
<th><asp:Label ID="Label2" runat="server" Text="Titular:"
Width="73px"></asp:Label></th>
<td><asp:Label ID="lblTitular" runat="server"></
asp:Label></td>
<th><asp:Label ID="Label4" runat="server" Text="Fecha:"
Width="48px"></asp:Label></th>
<td><asp:Label ID="lblfecha" runat="server"></
asp:Label></td>
</tr>
<tr>
<th><asp:Label ID="Label5" runat="server"
Text="Tarjeta:" Width="72px"></asp:Label></th>
<td><asp:Label ID="lbltarjeta" runat="server"></
asp:Label></td>
<th><asp:Label ID="Label6" runat="server"
Text="Hora:" Width="48px"></asp:Label></th>
<td><asp:Label ID="lblhora" runat="server"></
asp:Label></td>
</tr>
</table>
<div style="display:block; padding:10px;">
<form id="frmTransferencia" runat="server">
<table cellpadding="5">
<tr>
<td><asp:Label ID="Label3" runat="server" Text="Desde que
cuenta deseas trasnferir:"></asp:Label></td>
<td style="width: 158px"><asp:DropDownList ID="ddlCuentas"
runat="server" AutoPostBack="True"></asp:DropDownList>
<asp:LinkButton ID="LinkButton1" runat="server" Style="left:
328px; position: relative;
top: 48px">Regresar</asp:LinkButton></
td>
</tr>
<tr>
<td><asp:Label ID="Label1" runat="server" Text="Ingrese
el monto:"></asp:Label></td>
<td style="width: 158px"><asp:TextBox ID="txtMonto"
runat="server"></asp:TextBox>
<asp:Label ID="lblMsg1" runat="server" ForeColor="Red" Text="Label"
Visible="False"/>
</td>

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 279

</tr>
<tr>
<td><asp:Label ID="Label7" runat="server" Text="A que cuenta deseas
transferir:"></asp:Label></td>
<td style="width: 158px"><asp:TextBox ID="txtCuenta" runat="server"></
asp:TextBox>
<asp:Label ID="lblMsg2" runat="server" ForeColor="Red" Visible="False"
Text="Label">
</asp:Label></td>
</tr>
<tr>
<td>
Ingrese clave digital
</td>
<td style="width: 158px">
<asp:TextBox ID="txtClaveDigital" TextMode="Password"
runat="server"> </asp:TextBox>
<asp:Label ID="lblMsg3" runat="server" Text="Label"
Visible="False" ForeColor="Red">
</asp:Label> </td>
</tr>
<tr>
<td>
&nbsp;</td>
<td style="width: 158px">
<asp:Button ID="Button1" runat="server" Text="Aceptar"
CssClass="btnContinue" /></td>
</tr>
</table>
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
</form>
</div>
</div>
</div>
</div>
<div id="footer">
<p style="float:left;">
<a href="#">Políticas de Seguridad</a> &nbsp;&nbsp; | &nbsp;
<a href="#">Terminos de uso</a>&nbsp;&nbsp; | &nbsp;
<a href="#">Privacidad</a>
</p>
<p style="float:right;">© Copyright Banca Virtual Perú - 2010.
Todos los derechos reservados. </p>
<br class="clearfloat" />
</div>
</div>
</div>
</body>
</html>

www.detodoprogramacion.org
280 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

PÁGINA DE ERROR
Página Error 1
En seguida, mostraremos la ventana de error que hemos creado, veremos la ventana error_1.aspx

Ahora veamos el código HTML:


<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Banca Virtual</title>
<link href="styles/default.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="outWrapper" class="default details">
<div id="wrapper">
<div id="header">
<div id="logo">
<h1><a href="/"><span>Banca Virtual</span></a></h1>
</div>
<div id="menu">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="right">
<ul id="main">
<li><a href="/" class="actived">Inicio</a></li>
<li><a href="/">Nosotros</a></li>
<li><a href="/">Servicio al cliente</a></li>
<li><a href="/">Contactenos</a></li>
<li><a href="/">Mapa web</a></li>
</ul>
</td>
</tr>
<tr>
<td align="right">&nbsp;</td>
</tr>
<tr>
<td align="right">
<ul id="xtras">
<li>
<img src="styles/graphics/ico_tipocambio.jpg" width="13" height="10"
alt="Banca Virtual - Icono" />
</li>
<li>Tipo de cambio:</li>

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 281

<li><strong>Compra</strong>: S/. 2.875</li>


<li><strong>Venta</strong>: S/- 2.890</li>
</ul>
</td>
</tr>
</table>
</div>
</div>
<div id="container">
<div id="content">
<h3>Error</h3>
<div style="display:block;">
<p>Nro. de Tarjeta no Valida ó no pertenece al tipo de
tarjeta o
clave incorrecta </p>
<p>Intente de nuevo</p>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/
Index.aspx">[Retornar]</asp:HyperLink>
</div>
</div>
</div>
<div id="footer">
<p style="float:left;">
<a href="#">Políticas de Seguridad</a>&nbsp;&nbsp; | &nbsp;
<a href="#">Terminos de uso</a>&nbsp;&nbsp; | &nbsp;
<a href="#">Privacidad</a>
</p>
<p style="float:right;">© Copyright Banca Virtual Perú - 2010.
Todos los derechos reservados. </p>
<br class="clearfloat" />
</div>
</div>
</div>
</body>
</html>

Página Error 2
Ahora mostremos la segunda ventana de error que hemos creado, es decir, la página error_2.aspx,

www.detodoprogramacion.org
282 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Ahora veamos el código HTML:


<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Banca Virtual</title>
<link href="styles/default.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="outWrapper" class="default details">
<div id="wrapper">
<div id="header">
<div id="logo">
<h1><a href="/"><span>Banca Virtual</span></a></h1>
</div>
<div id="menu">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="right">
<ul id="main">
<li><a href="/" class="actived">Inicio</a></li>
<li><a href="/">Nosotros</a></li>
<li><a href="/">Servicio al cliente</a></li>
<li><a href="/">Contactenos</a></li>
<li><a href="/">Mapa web</a></li>
</ul>
</td>
</tr>
<tr>
<td align="right">&nbsp;</td>
</tr>
<tr><td align="right">
<ul id="xtras">
<li>
<img src="styles/graphics/ico_tipocambio.jpg" width="13" height="10"
alt="Banca Virtual - Icono" />
</li>
<li>Tipo de cambio:</li>
<li><strong>Compra</strong>: S/. 2.875</li>
<li><strong>Venta</strong>: S/- 2.890</li>
</ul>
</td>
</tr>
</table>
</div>
</div>
<div id="container">
<div id="content">
<h3>Error</h3>
<div style="display:block;">
<p>Contraseña mal ingresada</p>
<p>Intente de nuevo</p>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/
Logueo.aspx">

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 283

[Retornar]</asp:HyperLink>
</div>
</div>
</div>
<div id="footer">
<p style="float:left;">
<a href="#">Políticas de Seguridad</a>&nbsp;&nbsp; | &nbsp;
<a href="#">Terminos de uso</a>&nbsp;&nbsp; | &nbsp;
<a href="#">Privacidad</a>
</p>
<p style="float:right;">© Copyright Banca Virtual Perú - 2010.
Todos los derechos reservados. </p>
<br class="clearfloat" />
</div>
</div>
</div>
</body>
</html>

CODIFICACIÓN DE WEBCONFIG
Veamos el código que hemos escrito en archivo de WebConfig:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.extensions" type="System.Web.Configuration.
SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<sectionGroup name="scripting" type="System.Web.Configuration.
ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, Pu
blicKeyToken=31BF3856AD364E35">
<section name="scriptResourceHandler" type="System.Web.Configuration.
ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowD
efinition="MachineToApplication"/>
<sectionGroup name="webServices" type="System.Web.Configuration.
ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="jsonSerialization" type="System.Web.Configuration.
ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false"
allowDefinition="Everywhere"/>
<section name="profileService" type="System.Web.Configuration.
ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowD
efinition="MachineToApplication"/>
<section name="authenticationService" type="System.Web.Configuration.
ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowD
efinition="MachineToApplication"/>
<section name="roleService" type="System.Web.Configuration.
ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" al

www.detodoprogramacion.org
284 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

lowDefinition="MachineToApplication"/> </sectionGroup> </sectionGroup> </


sectionGroup></configSections><appSettings/>
<connectionStrings>
<add name="conex" connectionString="server=(local);integrated security=true;da
tabase=dbBancaVirtual"/>
</connectionStrings>
<compilation debug="true" strict="false" explicit="true">
<assemblies>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A
5C561934E089"/>
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral,PublicKeyTo
ken=31BF3856AD364E35"/>
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B
77A5C561934E089"/>
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, Pu
blicKeyToken=B77A5C561934E089"/></assemblies></compilation>
<pages>
<namespaces>
<clear/>
<add namespace="System"/>
<add namespace="System.Collections"/>
<add namespace="System.Collections.Specialized"/>
<add namespace="System.Configuration"/>
<add namespace="System.Text"/>
<add namespace="System.Text.RegularExpressions"/>
<add namespace="System.Web"/>
<add namespace="System.Web.Caching"/>
<add namespace="System.Web.SessionState"/>
<add namespace="System.Web.Security"/>
<add namespace="System.Web.Profile"/>
<add namespace="System.Web.UI"/>
<add namespace="System.Web.UI.WebControls"/>
<add namespace="System.Web.UI.WebControls.WebParts"/>
<add namespace="System.Web.UI.HtmlControls"/>
</namespaces>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions,
Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.
Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></
controls></pages>
<authentication mode="Windows"/>
<httpHandlers> <remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.
ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, Pub
licKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.
Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.
Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></httpHandlers>
<httpModules>

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 285

<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.


Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></
httpModules></system.web>
<system.codedom>
<compilers><compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.
CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken
=b77a5c561934e089" warningLevel="4">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="WarnAsError" value="false"/></compiler>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.
VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyTok
en=b77a5c561934e089" warningLevel="4">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="OptionInfer" value="true"/>
<providerOption name="WarnAsError" value="false"/></compiler></compilers></system.
codedom>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
<remove name="ScriptModule"/>
<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.
ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyTo
ken=31BF3856AD364E35"/></modules>
<handlers>
<remove name="WebServiceHandlerFactory-Integrated"/>
<remove name="ScriptHandlerFactory"/>
<remove name="ScriptHandlerFactoryAppServices"/>
<remove name="ScriptResource"/>
<add name="ScriptHandlerFactory" verb="*" path="*.asmx"
preCondition="integratedMode" type="System.Web.Script.Services.
ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, Pub
licKeyToken=31BF3856AD364E35"/>
<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.
axd" preCondition="integratedMode" type="System.Web.Script.Services.
ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, Pub
licKeyToken=31BF3856AD364E35"/>
<add name="ScriptResource" verb="GET,HEAD" path="ScriptResource.axd"
preCondition="integratedMode" type="System.Web.Handlers.ScriptResourceHandler,
System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD
364E35"/></handlers></system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad36
4e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/></
dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad36
4e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/> </
dependentAssembly></assemblyBinding></runtime></configuration>

www.detodoprogramacion.org
286 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

TRABAJANDO CON ARCHIVOS DE TIPO JQUERY


Gran parte de la aplicación la hemos relacionado con funciones JQuery, hemos trabajado con 2 archivos
jquery.corner.js y el archivo jquery.js. Tomaremos como ejemplo uno de los archivos de Jquery.

jquery.corner.js
/*!
* jQuery corner plugin: simple corner rounding
* Examples and documentation at: http://jquery.malsup.com/corner/
* version 1.96 (11-MAY-2009)
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*/
;(function($) {

var expr = (function() {


var div = document.createElement('div');
try { div.style.setExpression('width','0+0'); }
catch(e) { return false; }
return true;
})();

function sz(el, p) {
return parseInt($.css(el,p))||0;
};
function hex2(s) {
var s = parseInt(s).toString(16);
return ( s.length < 2 ) ? '0'+s : s;
};
function gpc(node) {
for ( ; node && node.nodeName.toLowerCase() != 'html'; node = node.parentNode
) {
var v = $.css(node,'backgroundColor');
if ( v.indexOf('rgb') >= 0 ) {
if ($.browser.safari && v == 'rgba(0, 0, 0, 0)')
continue;
var rgb = v.match(/\d+/g);
return '#'+ hex2(rgb[0]) + hex2(rgb[1]) + hex2(rgb[2]);
}
if ( v && v != 'transparent' )
return v;
}
return '#ffffff';
};

function getWidth(fx, i, width) {


switch(fx) {
case 'round': return Math.round(width*(1-Math.cos(Math.asin(i/width))));
case 'cool': return Math.round(width*(1+Math.cos(Math.asin(i/width))));
case 'sharp': return Math.round(width*(1-Math.cos(Math.acos(i/width))));
case 'bite': return Math.round(width*(Math.cos(Math.asin((width-i-1)/width))));
case 'slide': return Math.round(width*(Math.atan2(i,width/i)));

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 287

case 'jut': return Math.round(width*(Math.atan2(width,(width-i-1))));


case 'curl': return Math.round(width*(Math.atan(i)));
case 'tear': return Math.round(width*(Math.cos(i)));
case 'wicked': return Math.round(width*(Math.tan(i)));
case 'long': return Math.round(width*(Math.sqrt(i)));
case 'sculpt': return Math.round(width*(Math.log((width-i-1),width)));
case 'dog': return (i&1) ? (i+1) : width;
case 'dog2': return (i&2) ? (i+1) : width;
case 'dog3': return (i&3) ? (i+1) : width;
case 'fray': return (i%2)*width;
case 'notch': return width;
case 'bevel': return i+1;
}
};

$.fn.corner = function(o) {
// in 1.3+ we can fix mistakes with the ready state
if (this.length == 0) {
if (!$.isReady && this.selector) {
var s = this.selector, c = this.context;
$(function() {
$(s,c).corner(o);
});
}
return this;
}

o = (o||"").toLowerCase();
var keep = /keep/.test(o); // keep borders?
var cc = ((o.match(/cc:(#[0-9a-f]+)/)||[])[1]); // corner color
var sc = ((o.match(/sc:(#[0-9a-f]+)/)||[])[1]); // strip color
var width = parseInt((o.match(/(\d+)px/)||[])[1]) || 10; // corner width
var re = /round|bevel|notch|bite|cool|sharp|slide|jut|curl|tear|fray|wicked|sc
ulpt|long|dog3|dog2|dog/;
var fx = ((o.match(re)||['round'])[0]);
var edges = { T:0, B:1 };
var opts = {
TL: /top|tl/.test(o), TR: /top|tr/.test(o),
BL: /bottom|bl/.test(o), BR: /bottom|br/.test(o)
};
if ( !opts.TL && !opts.TR && !opts.BL && !opts.BR )
opts = { TL:1, TR:1, BL:1, BR:1 };
var strip = document.createElement('div');
strip.style.overflow = 'hidden';
strip.style.height = '1px';
strip.style.backgroundColor = sc || 'transparent';
strip.style.borderStyle = 'solid';
return this.each(function(index){
var pad = {
T: parseInt($.css(this,'paddingTop'))||0, R: parseInt($.
css(this,'paddingRight'))||0,
B: parseInt($.css(this,'paddingBottom'))||0, L: parseInt($.

www.detodoprogramacion.org
288 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

css(this,'paddingLeft'))||0
};

if (typeof this.style.zoom != undefined) this.style.zoom = 1; // force


'hasLayout' in IE
if (!keep) this.style.border = 'none';
strip.style.borderColor = cc || gpc(this.parentNode);
var cssHeight = $.curCSS(this, 'height');

for (var j in edges) {


var bot = edges[j];
// only add stips if needed
if ((bot && (opts.BL || opts.BR)) || (!bot && (opts.TL || opts.TR))) {
strip.style.borderStyle = 'none '+(opts[j+'R']?'solid':'none')+'
none '+(opts[j+'L']?'solid':'none');
var d = document.createElement('div');
$(d).addClass('jquery-corner');
var ds = d.style;

bot ? this.appendChild(d) : this.insertBefore(d, this.firstChild);

if (bot && cssHeight != 'auto') {


if ($.css(this,'position') == 'static')
this.style.position = 'relative';
ds.position = 'absolute';
ds.bottom = ds.left = ds.padding = ds.margin = '0';
if (expr)
ds.setExpression('width', 'this.parentNode.offsetWidth');
else
ds.width = '100%';
}
else if (!bot && $.browser.msie) {
if ($.css(this,'position') == 'static')
this.style.position = 'relative';
ds.position = 'absolute';
ds.top = ds.left = ds.right = ds.padding = ds.margin = '0';

// fix ie6 problem when blocked element has a border width


if (expr) {
var bw = sz(this,'borderLeftWidth') +
sz(this,'borderRightWidth');
ds.setExpression('width', 'this.parentNode.offsetWidth -
'+bw+'+ "px"');
}
else
ds.width = '100%';
}
else {
ds.margin = !bot ? '-'+pad.T+'px -'+pad.R+'px '+(pad.T-
width)+'px -'+pad.L+'px' :
pad.B-width)+'px -'+pad.R+'px -'+pad.B+'px -'+pad.L+'px';
}

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 289

for (var i=0; i < width; i++) {


var w = Math.max(0,getWidth(fx,i, width));
var e = strip.cloneNode(false);
e.style.borderWidth = '0 '+(opts[j+'R']?w:0)+'px 0
'+(opts[j+'L']?w:0)+'px';
bot ? d.appendChild(e) : d.insertBefore(e, d.firstChild);
}
}
}
});
};

$.fn.uncorner = function() {
$('div.jquery-corner', this).remove();
return this;
};

})(jQuery);

CÓMO TRABAJA LA BANCA VIRTUAL


Antes de empezar a trabajar con la Banca Virtual, primero debemos hacer la creación de la base de
datos: para poder realizar esto vamos a correr el script desde el manejador de base de datos SQL
Server.

www.detodoprogramacion.org
290 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Luego, vamos a correr el script de las inserciones en las tablas que hemos creado anteriormente, para
así ingresar la información necesaria para empezar a trabajar.

Y por úl mo, corremos el script de los procedimientos almacenados.

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 291

Bueno, luego de haber visto toda la parte de la codificación, vamos a ver cómo es el proceso de
funcionamiento de la Banca Virtual.

Como primer paso, vamos a ejecutar el archivo index.asp donde ingresaremos el código de la tarjeta,
para esto existe un archivo que ene por nombre tarjetas,cuentas a uƟlizar.txt; el po de tarjeta que
vamos a trabajar es credimás.

En el cual puedes seleccionar la tarjeta, luego deberás ingresar el Nº de tarjeta y dar clic en el botón
conƟnuar; esta página está validada en caso de que no se ingrese un número de tarjeta o la tarjeta sea
de po errónea.

Cuando la tarjeta es correcta, nos permi rá ingresar a la siguiente página, donde nos pedirá la clave,
en la cual hemos aplicado el po clásico de seguridad para el ingreso de clave.

www.detodoprogramacion.org
292 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

El cual daremos clic en cada uno de los botones (números) que pertenecen a la clave que debemos
ingresar, que se verá reflejado en el control superior.

Luego de haber ingresado la clave, dar clic en el botón ingresar; si la clave es correcta podremos
ingresar al sistema, en caso contrario la página está validando el ingreso correcto de la clave.

Luego de haber ingresado la clave correcta, nos permite ingresar a la ventana principal, en el cual nos
muestra los datos del cliente (nombre del cliente, tarjeta, fecha y hora).

Adicionalmente, nos muestra los datos de la cuenta (número, po de cuenta, moneda y saldo inicial);
asimismo, en el lado izquierdo se muestran los procesos de consultas y de operaciones.

Igualmente, existen 2 link que hacen referencia a los re ros y depósitos.

Bien, empecemos trabajando el proceso de RETIRO; para poder trabajar damos clic en el link de re ro,
el cual nos ejecutará la siguiente página:

Como usted puede apreciar, la página nos muestra un control donde vamos a ingresar la can dad a
re rar, también se puede ver el saldo actual de la cuenta, adicionalmente se pueden ver todos los
movimientos que se han realizado por dicha cuenta.

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 293

También se está validando que al momento de re rar debe exis r un valor ingresado.

O si se está ingresando un valor más grande que el saldo actual que ene en la cuenta en estos
momentos.

Bien, ahora vamos a realizar un re ro adecuadamente, es decir que el re ro que se va a realizar no


excede el saldo que se ene en la cuenta. Re raremos 200 nuevos soles de la cuenta; como el monto
no excede al saldo de la cuenta, la operación nos mostrará un mensaje de operación sa sfactoria.

Luego, se anexará el movimiento en la parte inferior, en el cual el registro nos mostrará la fecha y hora
del movimiento, el po de movimiento, saldo anterior, re ro, saldo actual, número de cuenta.

Ahora vamos a realizar el Depósito, para lo que damos clic en el botón Depositar.

www.detodoprogramacion.org
294 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

El cual nos permite presentar el siguiente diseño, cómo poder ingresar el monto a depositar, los
movimientos efectuados y el saldo.

También ene la validación de los depósitos a ingresar, cuando no se ingresa un valor.

Ahora ingresemos un depósito correcto, por ejemplo ingresemos el monto de 350 nuevos soles, que
va a significar un incremento en nuestro saldo.

Luego de haber ingresado el monto correcto (en este caso fue de 350 nuevos soles), nos mostrará el
mensaje que dice que la operación fue sa sfactoria y el movimiento se anexó al final, subiendo el saldo
que era de 800 a 1150 nuevos soles.

Ahora vamos a trabajar con la TRANSFERENCIA entre cuentas, para poder realizarlo vamos dar clic en
el link de transferencia.

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 295

Cuando damos clic nos muestra la siguiente página, donde se podrá realizar la transferencia:

En esta página nos muestra los datos de la cuenta en la que nos encontramos (Nombre del Titular, Nro.
de Tarjeta, Fecha y Hora).

Luego encontramos unas líneas más abajo del Nro. de la cuenta desde la cual vamos a enviar el dinero
(de donde se va a re rar).

Luego nos pide ingresar el monto a transferir, y en la siguiente línea, el Nro. de cuenta a donde nosotros
vamos a transferir el monto.

Y por úl mo, se debe ingresar la clave digital que ene cada cuenta para poder realizar la transferencia.

Ahora vamos a ingresar los datos para poder realizar la transferencia.

Hemos ingresado el valor a transferir, el número de cuenta donde se desea que se transfiera y la clave
digital que se ene de la cuenta de donde se va a transferir.

www.detodoprogramacion.org
296 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Si todo es correcto se podrá ver la transferencia en la lista de los movimientos efectuados.

Ahora sería conveniente que ingresemos a la cuenta desde la cual hemos enviado la transferencia, para
apreciar el movimiento.

Ingresemos de nuevo con la clave y número de tarjeta de la cuenta que hemos transferido.

www.detodoprogramacion.org
Capítulo 2: Aplicación de Proceso de Banca Virtual 297

Ahora veamos los movimientos de esta cuenta:

Ahí encontramos la transferencia que se ha realizado y el cambio del saldo que se ene.

Bueno, esta es la forma como hemos desarrollado esta aplicación que se encarga de imitar el proceso de
Banca Virtual, sería bueno que lo instales en tu máquina o lo hagas según los pasos que se encuentran
en el libro, y verifiques qué otras cosas adicionales le puedes poner con la intención de hacer mucho
mejor este proceso.

Vamos, inténtalo, será muy diver do.

www.detodoprogramacion.org
CAPÍTULO

Aplicación del Proyecto


3 Tienda Virtual

PROYECTO TIENDA VIRTUAL ‘TELEREDPERÚ’

DESCRIPCIÓN
El proyecto trata acerca de una enda virtual, trata de realizar los procesos básicos que podemos hacer
cuando vamos de compra. Para esto hemos dividido al sistema en dos partes: la administra va y el
usuario.

Hay que agradecer por todo el apoyo brindado en este sistema a Juan Kuga, alumno de tulación de
una en dad pres giosa, con gran futuro profesional.

USUARIO
La enda virtual muestra los productos que ofrece la empresa TeleRedPerú. La aplicación nos muestra
un catálogo de los productos ordenados por categorías y subcategorías que podremos consultar, y nos
mostrará la descripción del producto seleccionado. El cliente elegirá los productos de su preferencia y
los agregará al carrito de compras, el cual podremos consultar y nos detallará los productos elegidos,
sus respec vos precios, la can dad de unidades a comprar y el total del costo. La can dad de unidades
podrá ser incrementada o disminuida por el cliente, incluso podrá eliminarse el producto de la lista del
carrito que ya no se desee.

Para realizar una compra, el cliente deberá primero crearse una cuenta; al momento de realizar el
pedido, desde la lista del carrito de compras, el sistema pedirá un usuario y contraseña, si no los ene
tendrá una opción para registrar un nuevo usuario y contraseña.

El cliente, una vez registrado su nuevo usuario y contraseña, podrá iniciar sesión con su nueva cuenta y
ver la lista de compras del carrito con los productos ya seleccionados anteriormente, así como realizar
el pedido.

Al realizar el pedido, el sistema le solicitará todos sus datos personales para el término de la operación.
El cliente, al haber iniciado sesión, tendrá acceso a la nueva opción: ‘Historial de compra’, donde se le
mostrarán todos los pedidos realizados y el detalle de cada uno.

ADMINISTRATIVA
El administrador posee una cuenta con la cual inicia sesión, ene la opción de agregar, modificar y
eliminar los productos, categorías, subcategorías, así como consultar las órdenes de compra que se
hayan registrado.

www.detodoprogramacion.org
300 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Beneficios que encontramos trabajando con nuestra Ɵenda virtual


Usuario:
o Consulta amigable de los productos.
o Acceso rápido a los productos más vendidos.
o Facilidad de modificar la can dad de los productos, directamente de su carrito de compras, y
tener la opción de eliminarlos a su criterio.
o Todas las órdenes de pedido son guardadas en una base de datos segura.
o Cada cliente ene la facilidad de consultar su historial de compra y ver el detalle de cada pedido.
o Ges ón de diferentes zonas de envío con diferentes tarifas.
o Función para ver más grandes las imágenes con sólo pasar el mouse sobre cada producto.
o Registro de clientes en base de datos de la enda.
o Panel de registro y acceso para cada uno de los clientes.

Administrador:
o El sistema cuenta con un módulo de administración donde se puede actualizar la enda virtual,
agregar, modificar, eliminar ítems (productos, categorías, subcategorías, etc.) y consultar los
pedidos del cliente.
o Protección con clave secreta para acceder a su oficina virtual de administración de la enda.
o Módulo exclusivo para la edición rápida de productos en línea.
o Módulo para administración de sus órdenes de compra, pudiendo seleccionar entre ‘Recibido’,
‘En Proceso’, ‘Entregado’.

INSTALACIÓN DEL PROYECTO

INTRODUCCIÓN
La Tienda Virtual está realizada en ASP.net en el lenguaje C# (Programación Orientada a Objetos),
conjunta con el gestor de Base de Datos MySQL (es una base de datos free).

PROGRAMAS NECESARIOS PARA LA EJECUCIÓN DEL SISTEMA USO


• mysql-connector-odbc-5.1.6: Permite establecer la conexión ODBC para MySQL.

www.detodoprogramacion.org
Capítulo 3: Aplicación del Proyecto Tienda Virtual 301

• mysql-essenƟal-5.1.45: Instala el Servicio de MySQL.

• mysql-gui-tools-5.0: Herramientas de Administración para el Servicio de MySQL y de Trabajo


para la Ges ón de Base de Datos.

www.detodoprogramacion.org
302 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

• Visual Studio .NET 2005 en lenguaje C# ASP.NET.: Programa que permi rá la ejecución de la
aplicación web.

MODELAMIENTO DE LA BASE DE DATOS DE UNA TIENDA VIRTUAL

• mysql-workbench-oss-5.1.18a-win32: MySQL Workbench es una herramienta de modelado


de bases de datos visual mul plataforma, desarrollada por MySQL. Es la aplicación sucesora del
proyecto DBDesigner4.

Le damos clic en Next hasta finalizar. La instalación es muy rápida y sencilla.

www.detodoprogramacion.org
Capítulo 3: Aplicación del Proyecto Tienda Virtual 303

Luego, abrimos el programa y hacemos clic en Add Diagram para crear nuestro diagrama (Base de
Datos).

Seleccionamos la herramienta Table para crear las tablas.

Para cambiar el nombre a la tabla y agregar los atributos


damos doble clic en la cabecera de la tabla y se desplegará
una ventana en la parte inferior, como vemos en la imagen.

Después de agregar todas las tablas con sus respec vos atributos, vamos al siguiente paso que es
la relación entre tablas.

En este ejemplo: Tenemos dos tablas por ahora que son Usuario y TipoUsuario, la relación es de
uno a muchos, no iden ficada, eso quiere decir que el id del TipoUsuario viaja a la tabla Usuario
como foreign key (FK) y no como primary key (PK).

www.detodoprogramacion.org
304 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Para hacer dicha relación seleccionamos la herramienta Non-IdenƟfying RelaƟonship y damos clic
en Usuario y luego en TipoUsuario.

El resultado es el siguiente, como vemos en la imagen:

www.detodoprogramacion.org
Capítulo 3: Aplicación del Proyecto Tienda Virtual 305

Como podemos observar, ya tengo el modelo de la base de datos terminada, en la cual sólo
haremos uso de las tablas de color Naranja, que es lo único que necesitamos para hacer nuestro
carrito de compras (Tienda Virtual).

Una vez que tengamos el modelo de la base de datos terminada, pasamos a exportar el script de
la base de datos.

www.detodoprogramacion.org
306 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Aquí escogemos la ruta y el nombre del archivo donde queremos que se guarde.

Luego damos clic en siguiente hasta finalizar.

www.detodoprogramacion.org
Capítulo 3: Aplicación del Proyecto Tienda Virtual 307

Ahora buscamos la ruta del script donde guardamos el archivo y lo abrimos, en mi caso lo he
abierto con SQL server Express. Una vez que tenemos el script generado por MySQL podemos
importarlo para trabajar.

INSTALACIÓN DEL SERVICIO MYSQL


Ejecutar el archivo mysql-essenƟal-5.1.45 y hacer clic en next hasta llegar a la siguiente pantalla.

www.detodoprogramacion.org
308 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Luego, seguir los siguientes pasos que se muestran en las imágenes:

En esta parte, definimos el po de instalación con la cual vamos a trabajar; para hacer mucho más rápida
la instalación u lizaremos el po de configuración Standard, y así trabajará con una configuración
común.

www.detodoprogramacion.org
Capítulo 3: Aplicación del Proyecto Tienda Virtual 309

En esta pantalla definimos cuál es el nombre del servicio con el que se va a trabajar; adicionalmente, se
puede dar un check para incluir un path del directorio al momento de trabajar en Consola con el Mysql.

Normalmente, cuando definimos los usuarios, que en este caso por defecto root y ene todos los
privilegios, se le debe dar una clave; en este caso le daremos la clave de 123456.

En la parte inferior podemos ver una opción que dice ‘Create An Anonymous Account’, en la que
si damos un check para habilitarlo hacemos referencia de poder acceder a servidores externos que
nosotros tenemos.

Crear una contraseña


nueva para el root
Ejemplo: 123456

www.detodoprogramacion.org
310 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Luego, ejecutamos las siguientes ventanas establecidas y finaliza la instalación.

Si luego de haber realizado toda la instalación nos muestra la siguiente ventana, significa que la
instalación resultó correcta.

RESTAURANDO LA BASE DE DATOS DEL SCRIPT AL SERVIDOR MYSQL

Bueno, ahora nos corresponde la parte en la cual vamos a restaurar la base de datos Mysql, para lo
cual vamos:

www.detodoprogramacion.org
Capítulo 3: Aplicación del Proyecto Tienda Virtual 311

Ir al menú Inicio / Todos los programas / MYSQL / MYSQL Administrator.

Después de haber accedido a MySQL Administator, nos colocaremos en la opción RESTORE, hacemos
clic en el botón Open Backup File y seleccionamos el archivo de creación de la Base de Datos (script
MySQL), presionando luego el botón ABRIR, como se muestra a con nuación:

Seleccionar el archivo

www.detodoprogramacion.org
312 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Luego iniciamos la restauración, haciendo clic en Start Restore. Y eso sería todo.

CONFIGURANDO EL DRIVER DE MYSQL PARA LA CONEXION CON LA BASE DE DATOS

Presionamos las teclas Windows (ventanita) + R y escribimos odbcad32, aparecerá la siguiente ventana,
después presionamos la pestaña DSN de sistema, hacemos clic en el botón Agregar… y seleccionamos
la opción MySQL ODBC 5.1 Driver; luego finalizamos.

www.detodoprogramacion.org
Capítulo 3: Aplicación del Proyecto Tienda Virtual 313

Aparecerá luego la ventana siguiente, en la cual ingresamos los parámetros de conexión correspondiente:

Ponemos la palabra conex, porque así


definimos la conexión de ASPx con MySQL.

Luego de ello, si deseamos comprobar si los datos para la conexión son correctos, presionamos el
botón Test, si todo está bien la respuesta será afirma va, luego de ello aceptamos (OK).

En caso de que la Prueba de Conexión con MySQL (Test) resulte en error, tendremos que verificar bien
si todos los datos ingresados han sido correctos durante su previa configuración.

www.detodoprogramacion.org
314 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

ABRIENDO EL PROYECTO EN VISUAL Y CARGANDO LA PÁGINA DEFAULT.ASPX


Abrir el proyecto y hacer doble clic a la página Default.aspx que se muestra a con nuación, luego
presionar Ctrl + F5; después de esto la página emperezará a funcionar.

PROCESO DE CONSTRUCCIÓN DEL APLICATIVO


La construcción del aplica vo web ha sido realizada tomando en cuenta la siguiente estructura:

Le recordamos que el lenguaje que usaremos para programar es C#.

www.detodoprogramacion.org
Capítulo 3: Aplicación del Proyecto Tienda Virtual 315

1. CAPA PRESENTACION.
Muestra toda la interfaz gráfica que estará en contacto
con el usuario. U liza las operaciones de la capa Negocio,
dependiendo de las solicitudes del usuario.

2. CAPA NEGOCIO.
Con ene todas las operaciones y transacciones de negocio
(lógica), que permiten devolver las solicitudes hechas por
el usuario de la web.

3. CAPA DATOS.
Establece la conexión directa con la base de datos y
desarrolla los procesos que incluyen el funcionamiento de
la aplicación web.

Abrimos Visual Studio 2005 y creamos un Nuevo proyecto.

Creamos una solución en blanco para, posteriormente, agregarle los siguientes proyectos.

www.detodoprogramacion.org
316 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Una vez que tenemos la solución creada, damos clic derecho y agregamos un nuevo proyecto.

Aquí escogemos Visual C# como lenguaje de programación y una plan lla de Biblioteca de Clases.
Después le damos un nombre a nuestro proyecto.

www.detodoprogramacion.org
Capítulo 3: Aplicación del Proyecto Tienda Virtual 317

También podemos agregar un nuevo proyecto desde el menú Archivo/Agregar/Nuevo Proyecto.

Así agregamos todos los proyectos que sean de po Biblioteca de clases hasta tener 3 Proyectos:
DATOS, ENTIDAD y NEGOCIO.

www.detodoprogramacion.org
318 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Luego de tener los 3 proyectos agregados en nuestra solución, agregamos un si o web con nombre
de PRESENTACION, como en el ejemplo anterior. Recuerda que al crear el si o web debes de elegir el
po de lenguaje C#.

Después de tener los 4 proyectos en nuestra solución, nos toca hacer las respec vas referencias.

DATOS.- En este proyecto vamos a crear una clase en la cual


definamos nuestra conexión a la base de datos con MySQL y
otras clases en la cual estén todas las funciones (Sentencias
SQL). Es recomendable crear una clase por tabla. Datos hace
referencia con EnƟdad.

ENTIDAD.- En este proyecto sólo creamos los atributos de las


tablas con su respec vo po y finalmente la encapsulamos.
Aquí no Hacemos referencia.

NEGOCIO.- En este proyecto creamos funciones que llamaremos


a las funciones creadas en DATOS.
Aquí hacemos referencia con Datos y EnƟdad.

PRESENTACION.- Este es el Proyecto Final, en que el usuario


interactúa en él. Aquí haremos referencia con Negocio y EnƟdad.

www.detodoprogramacion.org
Capítulo 3: Aplicación del Proyecto Tienda Virtual 319

ENTIDAD

Bueno ahora haremos un ejemplo:

Nos ubicamos en el proyecto ENTIDAD, damos clic derecho Agregar/Clase y le ponemos de nombre
ENTCategoriaProd.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace ENTIDAD
{
class ENTCategoriaProd
{
private int _idCategoriaProd;
private String _catp_v_NombreCat;
private string _catp_v_Descrip;
private Int16 _catp_b_Estado;

}
}

Luego encapsulamos los campos o atributos uno por uno.

www.detodoprogramacion.org
320 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Damos clic en aceptar y luego en aplicar para encapsular el campo.

Una vez terminado de encapsular todos los campos tendremos este modelo:
using System;
using System.Collections.Generic;
using System.Text;

namespace ENTIDAD
{
public class ENTCategoriaProd
{
private int _idCategoriaProd;

public int IdCategoriaProd


{
get { return _idCategoriaProd; }
set { _idCategoriaProd = value; }
}
private String _catp_v_NombreCat;

public String Catp_v_NombreCat


{
get { return _catp_v_NombreCat; }
set { _catp_v_NombreCat = value; }
}
private String _catp_v_Descrip;

public String Catp_v_Descrip

www.detodoprogramacion.org
Capítulo 3: Aplicación del Proyecto Tienda Virtual 321

{
get { return _catp_v_Descrip; }
set { _catp_v_Descrip = value; }
}
private Int16 _catp_b_Estado;

public Int16 Catp_b_Estado


{
get { return _catp_b_Estado; }
set { _catp_b_Estado = value; }
}
}
}

CAPA DATOS
Bueno, en esta capa primero agregamos un elemento existente que es OdbcHelper.cs, que es una clase
que nos ayudará en la programación. El OdbcHelper nos ahorrará código en la capa de datos.

www.detodoprogramacion.org
322 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Luego tendremos esa vista en el explorador de soluciones. A con nuación, agregamos una clase para
nuestra conexión de ASPX a MySQL.

Para descargar el OdbcHelper, haz clic en el siguiente enlace:


hƩp://cid-ec5390f43a114d33.skydrive.live.com/self.aspx/Drivers/MySql%20Drivers/OdbcHelper.cs

www.detodoprogramacion.org
Capítulo 3: Aplicación del Proyecto Tienda Virtual 323

Una vez creada la clase, lo publicamos para poder llamar dicha clase en otras clases.

www.detodoprogramacion.org
324 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

using .- en C# es importar una librería que se necesita para realizar dicha


apliacion.

using System;
using System.Collections.Generic;
using System.Text;

using System.Data.Odbc;
namespace DATOS
{
public class DAOConexion
{
public OdbcConnection Conexion()
{
OdbcConnection cone = new OdbcConnection(“Dsn=conex;description=Conexi
on a Mysql 5.1;server=localhost;uid=root;database=bdtiendavirtual;port=3306”);
return cone;
}
}
}

Seguidamente, creamos una clase cuyo nombre es DAOCategoriaProd.cs y ahora sí nos ponemos a
programar todas las funciones y métodos que necesitemos para que la aplicación funcione.

using System;
using System.Collections.Generic;
using System.Text;

using System.Data;

www.detodoprogramacion.org
Capítulo 3: Aplicación del Proyecto Tienda Virtual 325

using ENTIDAD;
using Tekdev.Data;

namespace DATOS
{
public class DAOCategoriaProd
{
DAOConexion ObjDaoCone = new DAOConexion();

public DataTable ListarCategoria()


{
String sql = “select * from CategoriaProd where
catp_b_Estado=1”;
return OdbcHelper.ExecuteDataset(ObjDaoCone.Conexion(),
CommandType.Text, sql).Tables[0];
}

public DataTable ListarCategorias()


{
return OdbcHelper.ExecuteDataset(ObjDaoCone.Conexion(),
CommandType.Text, “SELECT * FROM `categoriaprod`”).Tables[0];
}

public int GrabarCategoria(ENTCategoriaProd objCatProd)


{
String insert = “INSERT INTO `categoriaprod` (`catp_v_NombreCat`,
`catp_v_Descrip`, `catp_b_Estado`) VALUES(‘” + objCatProd.Catp_v_NombreCat + “’,’”
+ objCatProd.Catp_v_Descrip + “’,” + objCatProd.Catp_b_Estado.ToString() + “);”;
return OdbcHelper.ExecuteNonQuery(ObjDaoCone.Conexion(), CommandType.
Text, insert);
}

public int ModificarCategoria(ENTCategoriaProd objCatProd)


{
String update = “UPDATE categoriaprod SET catp_v_NombreCat=’”
+ objCatProd.Catp_v_NombreCat + “’,catp_v_Descrip=’” + objCatProd.Catp_v_
Descrip + “’,catp_b_Estado=” + objCatProd.Catp_b_Estado.ToString() + “ WHERE
idCategoriaProd=” + objCatProd.IdCategoriaProd.ToString();
return OdbcHelper.ExecuteNonQuery(ObjDaoCone.Conexion(), CommandType.
Text, update);
}

public int EliminarCategoria(ENTCategoriaProd objCatProd)


{
String insert = “DELETE FROM categoriaprod WHERE idCategoriaProd=” +
objCatProd.IdCategoriaProd.ToString();
return OdbcHelper.ExecuteNonQuery(ObjDaoCone.Conexion(), CommandType.
Text, insert);
}

www.detodoprogramacion.org
326 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

public DataTable ConsultaCategoria(ENTCategoriaProd objCatProd)


{
return OdbcHelper.ExecuteDataset(ObjDaoCone.Conexion(), CommandType.
Text, “SELECT * FROM `categoriaprod` WHERE idCategoriaProd=” + objCatProd.
IdCategoriaProd).Tables[0];
}
}
}

CAPA NEGOCIO
Aquí nuevamente creamos una clase, esta vez llamada BUSCategoriaProd.cs y también la publicamos
para poder reu lizar código. Es decir, podemos llamar varias veces a la misma función en la misma o
diferente página.

using System;
using System.Collections.Generic;
using System.Text;

using System.Data;
using ENTIDAD;
using DATOS;

namespace NEGOCIO
{
public class BUSCategoriaProd

www.detodoprogramacion.org
Capítulo 3: Aplicación del Proyecto Tienda Virtual 327

{
DAOCategoriaProd objDaoCatProd = new DAOCategoriaProd();
public DataTable ListarCategoria()
{
return objDaoCatProd.ListarCategoria();
}

public DataTable ListarCategorias()


{
return objDaoCatProd.ListarCategorias();
}

public int GrabarCategoria(ENTCategoriaProd objCatProd)


{
return objDaoCatProd.GrabarCategoria(objCatProd);
}

public int ModificarCategoria(ENTCategoriaProd objCatProd)


{
return objDaoCatProd.ModificarCategoria(objCatProd);
}

public int EliminarCategoria(ENTCategoriaProd objCatProd)


{
return objDaoCatProd.EliminarCategoria(objCatProd);
}

public DataTable ConsultaCategoria(ENTCategoriaProd objCatProd)


{
return objDaoCatProd.ConsultaCategoria(objCatProd);
}
}
}

www.detodoprogramacion.org
328 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

CAPA PRESENTACIÓN
El diseño de la página fue amoldada a una plan lla ya definida, de la cual lo único que se hizo fue
adecuarla a las expecta vas de la aplicación web en uso.

Aquí vemos la estructura de la web donde observamos las carpetas de imágenes, plan llas etc.

Aquí ya vemos la página diseñada y programada.

www.detodoprogramacion.org
Capítulo 3: Aplicación del Proyecto Tienda Virtual 329

Bueno, nosotros hemos decidido trabajar el código Script, runat=”Server” y el código ASPx embebido
en HTML (es decir, ambos códigos en la misma página).

MANUAL DEL USUARIO


Bueno, para empezar definamos los usuarios con los cuales voy a contar para la prueba de la Tienda
Virtual. Son los siguientes:
Iniciamos sesión:

www.detodoprogramacion.org
330 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Ahora empecemos con la página principal.

Página Principal

Usuario Cliente
Puede ver los productos con su respec vo detalle, también cuenta con un carrito de compra y un
historial de compra.

Listado de Productos
Listado de categoría y subcategorías. Al costado de las subcategorías muestra la can dad de productos
que hay en dicha categoría. Al hacer clic en una subcategoría muestra todos los productos con dos
botones o link que dice Agregar a carrito y ver Detalle.

www.detodoprogramacion.org
Capítulo 3: Aplicación del Proyecto Tienda Virtual 331

Carrito de Compras
Al hacer clic en Agregar a Carrito, nos mostrará todos los productos que hay en el carrito en ese
momento. Podemos eliminar, cambiar la can dad, seguir comprando y finalmente realizar el pedido.

www.detodoprogramacion.org
332 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Orden de Pedido
Una vez decidido lo que vamos a comprar, llenamos los campos necesarios para realizar la compra y
finalmente damos clic en realizar pedido.

Historial de Compras
Después de la compra podemos observar un historial de compra; igualmente, podemos ver sus detalles.

Usuario Administrador
Tiene la opción de agregar categorías, subcategorías y productos. También ene la opción de mostrar
dicha información.

Puede ver un reporte de las órdenes de compras por rango de fechas.

www.detodoprogramacion.org
Capítulo 3: Aplicación del Proyecto Tienda Virtual 333

Mantenimiento de Categoría y Subcategorías


Aquí mostramos un mantenimiento de categoría y subcategoría, también cuenta con un estado, que si
está Inac vo no se mostrará en el catálogo.

Mantenimiento de Productos
Mantenimiento de producto, seleccionando la categoría y subcategoría. También ene un estado que
nos informa si el producto se muestra en el catálogo.

www.detodoprogramacion.org
334 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Consulta de las Órdenes de Pedido de los Clientes


Listado de órdenes de pedidos:

www.detodoprogramacion.org
CAPÍTULO

Aplicación del carrito


4 de compra

CARRITO DE COMPRA WEB

DEFINICIÓN
Cuando nuestro catálogo de productos es amplio, o si este se divide en diferentes familias, necesitará
un sistema que le permita al cliente elegir diferentes productos para comprarlos en una misma
transacción.

Este po de sistema se llama ‘carrito de compra’, y si este proceso que hemos comentado se realiza vía
Internet, este carrito de compra se convierte en un proceso Web y funciona de la siguiente manera:

El cliente entra en la Tienda Virtual y se dirige al catálogo de productos; como si estuviera en un


supermercado, irá agregando diferentes productos a su ‘carrito’. Una vez que haya incluido todos los
que desea comprar, se dirigirá a la salida de la enda donde habrá un listado con todos los productos
que ha incluido en el carrito.

En esta página el cliente procederá a efectuar el pago por su compra u lizando su propia tarjeta de
crédito.

Una vez concluida la transacción, se informa al cliente y al vendedor que la transacción se ha realizado
con éxito.

El sistema del Carrito de Compra puede consis r en páginas individuales para cada producto o páginas
de productos agrupados por familias.

Los sistemas son muchos, adaptándose para cada po de necesidad; hay sistemas desarrollados en
diferentes lenguajes de programación, desde aquellos que se ejecutan bajo un sistema opera vo o
aquellos que se ejecutan vía Web.

El carrito de este ejemplo ha sido desarrollado en ASP.Net.

CREACIÓN DEL CARRITO DE COMPRA


Empecemos con la creación del Carrito de Compra. Para realizar esto vamos a dividirlo en tres etapas:
- Creación de la Base de datos y ejecución de Script.
- Creación de la Capa de Datos, En dad y Negocio.
- Creación de la Presentación o páginas.

www.detodoprogramacion.org
336 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Ahora, vamos a empezar con el primer punto:

Creación de la Base de Datos


Para realizar dicha función, hemos creado dos archivos (los cuales se adjuntan en el CD), cada uno de
ellos con un script respec vo:

Archivo BD_MILA.sql
Ahora codificaremos este código en el SQL Server 2008, para lo cual nos conectaremos al SQL Server y
crearemos un New Query:

El código del script es el siguiente:


-- BASE DE DATOS: BD_MILA
USE master
GO
-- Drop the database if it already exists
IF EXISTS (SELECT name FROM sys.databases WHERE name = ‘BDMILA’)
DROP DATABASE BDMILA
GO
CREATE DATABASE BDMILA
GO
Use BDMILA
go
SET LANGUAGE SPANISH
GO

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 337

SET DATEFORMAT DMY


GO
SET NOCOUNT ON
GO
CREATE TABLE Cargo (
Cargo_ID char(5) NOT NULL,
Nom_Cargo varchar(30) NULL )
go
ALTER TABLE Cargo ADD PRIMARY KEY (Cargo_ID ASC)
go
CREATE TABLE Categoria (
Categoria_ID int IDENTITY,
Nom_Categoria varchar(30) NULL,
Descripcion varchar(100) NULL )
go
ALTER TABLE Categoria ADD PRIMARY KEY (Categoria_ID ASC)
go
CREATE TABLE Cliente (
Cliente_ID char(5) NOT NULL,
Cli_Nombre varchar(30) NULL,
Cli_Apellidos varchar(30) NULL,
Cli_FechaNac datetime NULL,
Cli_Sexo char(1) NULL,
Cli_DNI char(8) NULL,
Cli_Direccion varchar(30) NULL,
Distrito_ID char(5) NOT NULL,
Cli_Telefono varchar(10) NULL,
Cli_EstadoCivil varchar(30) NULL,
Cli_Email varchar(50) NULL,
Cli_Password char(6) NULL,
Cli_NroCuenta char(10) NULL,
Cli_Estado char(1) NULL )
go
ALTER TABLE Cliente ADD PRIMARY KEY (Cliente_ID ASC)
go
CREATE TABLE Departamento (
Departamento_ID char(5) NOT NULL,
Nom_Departamento varchar(30) NULL )
go
ALTER TABLE Departamento ADD PRIMARY KEY (Departamento_ID ASC)
go

CREATE TABLE Descuento (


Descuento_ID int IDENTITY,
Monto money NULL )
go
ALTER TABLE Descuento ADD PRIMARY KEY (Descuento_ID ASC)
go
CREATE TABLE Detalle_Kardex (
Kardex_ID int NOT NULL,
Producto_ID char(5) NOT NULL,

www.detodoprogramacion.org
338 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Fecha datetime NULL,


Observacion varchar(100) NULL,
Documento char(10) NULL,
Stock_Actual int NULL,
Entrada int NULL,
Salida int NULL )
go
ALTER TABLE Detalle_Kardex ADD PRIMARY KEY (Kardex_ID ASC, Producto_ID ASC)
go
CREATE TABLE Detalle_Registro (
Registro_ID int NOT NULL,
Producto_ID char(5) NOT NULL,
Cantidad int NULL,
Precio money NULL )
go
ALTER TABLE Detalle_Registro ADD PRIMARY KEY (Registro_ID ASC, Producto_ID ASC)
go
CREATE TABLE Distrito (
Distrito_ID char(5) NOT NULL,
Provincia_ID char(18) NOT NULL,
Nom_Distrito varchar(30) NULL )
go
ALTER TABLE Distrito ADD PRIMARY KEY (Distrito_ID ASC)
go
CREATE TABLE Kardex (
Kardex_ID int IDENTITY,
Nro_Kardex char(10) NULL )
go
ALTER TABLE Kardex ADD PRIMARY KEY (Kardex_ID ASC)
go
CREATE TABLE Marca (
Marca_ID int IDENTITY,
Nom_Marca varchar(30) NULL )
go
ALTER TABLE Marca ADD PRIMARY KEY (Marca_ID ASC)
go
CREATE TABLE Producto (
Producto_ID char(5) NOT NULL,
Nom_Producto varchar(30) NULL,
Precio money NULL,
Stock int NULL,
Stock_Min int NULL,
Fecha_Ing datetime NULL,
Categoria_ID int NOT NULL,
Marca_ID int NOT NULL
)
go

ALTER TABLE Producto ADD PRIMARY KEY (Producto_ID ASC)


go
CREATE TABLE Provincia (

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 339

Provincia_ID char(18) NOT NULL,


Departamento_ID char(5) NOT NULL,
Nom_Provincia varchar(30) NULL )
go
ALTER TABLE Provincia ADD PRIMARY KEY (Provincia_ID ASC)
go
CREATE TABLE Registro_Compra (
Registro_ID int IDENTITY,
Nro_Registro char(10) NULL,
Cliente_ID char(5) NOT NULL,
Fecha_Reg datetime NULL,
Descuento_ID int NOT NULL,
Total money NULL )
go
ALTER TABLE Registro_Compra ADD PRIMARY KEY (Registro_ID ASC)
go
CREATE TABLE Trabajador (
Trabajador_ID char(5) NOT NULL,
Nombre varchar(30) NULL,
Ape_Paterno varchar(30) NULL,
Ape_Materno varchar(30) NULL,
Fecha_Nac datetime NULL,
Sexo char(1) NULL,
Direccion varchar(30) NULL,
Distrito_ID char(5) NOT NULL,
Telefono varchar(10) NULL,
Email varchar(50) NULL,
Password varchar(6) NULL,
Cargo_ID char(5) NOT NULL,
Estado char(1) NULL
)
go
ALTER TABLE Trabajador ADD PRIMARY KEY (Trabajador_ID ASC)
go
ALTER TABLE Cliente ADD FOREIGN KEY (Distrito_ID) REFERENCES Distrito
(Distrito_ID)
go
ALTER TABLE Detalle_Kardex ADD FOREIGN KEY (Producto_ID) REFERENCES Producto
(Producto_ID)
go
ALTER TABLE Detalle_Kardex ADD FOREIGN KEY (Kardex_ID)
REFERENCES Kardex (Kardex_ID)
go
ALTER TABLE Detalle_Registro ADD FOREIGN KEY (Producto_ID)
REFERENCES Producto (Producto_ID)
go
ALTER TABLE Detalle_Registro ADD FOREIGN KEY (Registro_ID)
REFERENCES Registro_Compra (Registro_ID)
go
ALTER TABLE Distrito ADD FOREIGN KEY (Provincia_ID) REFERENCES Provincia
(Provincia_ID)
go

www.detodoprogramacion.org
340 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

ALTER TABLE Producto ADD FOREIGN KEY (Marca_ID) REFERENCES Marca (Marca_ID)
go

ALTER TABLE Producto ADD FOREIGN KEY (Categoria_ID) REFERENCES Categoria


(Categoria_ID)
go
ALTER TABLE Provincia ADD FOREIGN KEY (Departamento_ID)
REFERENCES Departamento ( Departamento_ID)
go
ALTER TABLE Registro_Compra ADD FOREIGN KEY (Cliente_ID) REFERENCES Cliente
(Cliente_ID)
go
ALTER TABLE Registro_Compra ADD FOREIGN KEY (Descuento_ID)
REFERENCES Descuento (Descuento_ID)
go
ALTER TABLE Trabajador ADD FOREIGN KEY (Cargo_ID) REFERENCES Cargo (Cargo_ID)
go
ALTER TABLE Trabajador ADD FOREIGN KEY (Distrito_ID) REFERENCES Distrito
(Distrito_ID)
go
-------INSERTANDO DATOS ----
----------- DEPARTAMENTO -------------------------------
INSERT into Departamento values(‘DEP01’,’Lima’)
INSERT into Departamento values(‘DEP02’,’Arequipa’)
INSERT into Departamento values(‘DEP03’,’Cuzco’)
INSERT into Departamento values(‘DEP04’,’Ica’)
INSERT into Departamento values(‘DEP05’,’Callao’)
go
-----------------PROVINCIA--------------------
INSERT into Provincia values(‘PRV01’,’DEP01’,’Lima’)
INSERT into Provincia values(‘PRV02’,’DEP02’,’Arequipa’)
INSERT into Provincia values(‘PRV03’,’DEP03’,’Cuzco’)
INSERT into Provincia values(‘PRV04’,’DEP04’,’Ica’)
INSERT into Provincia values(‘PRV05’,’DEP05’,’Callao’)
go
---------------------DISTRITOs---------------------------
insert into Distrito values(‘DIS01’,’PRV01’,’ANCON’)
insert into Distrito values(‘DIS02’,’PRV01’,’ATE’)
insert into Distrito values(‘DIS03’,’PRV01’,’BARRANCO’)
insert into Distrito values(‘DIS04’,’PRV01’,’BREÑA’)
insert into Distrito values(‘DIS05’,’PRV01’,’SURCO’)
insert into Distrito values(‘DIS06’,’PRV01’,’CARABAYLLO’)
insert into Distrito values(‘DIS07’,’PRV01’,’CHORRILLOS’)
insert into Distrito values(‘DIS08’,’PRV01’,’CIENEGUILLA’)
insert into Distrito values(‘DIS09’,’PRV01’,’COMAS’)
insert into Distrito values(‘DIS10’,’PRV01’,’EL AGUSTINO’)
insert into Distrito values(‘DIS11’,’PRV01’,’INDEPENDENCIA’)
insert into Distrito values(‘DIS12’,’PRV01’,’JESUS MARIA’)
insert into Distrito values(‘DIS13’,’PRV01’,’LA MOLINA’)
insert into Distrito values(‘DIS14’,’PRV01’,’LA VICTORIA’)
insert into Distrito values(‘DIS15’,’PRV01’,’LINCE’)
insert into Distrito values(‘DIS16’,’PRV01’,’LOS OLIVOS’)

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 341

insert into Distrito values(‘DIS17’,’PRV01’,’LURIGANCHO’)


--------------------DISTRITO AREQUIPA---------------------------
insert into Distrito values(‘DIS18’,’PRV02’,’CAYMA’)
insert into Distrito values(‘DIS19’,’PRV02’,’CERRO COLORADO’)
insert into Distrito values(‘DIS20’,’PRV02’,’CHARACATO’)
insert into Distrito values(‘DIS21’,’PRV02’,’CHIGUATA’)
insert into Distrito values(‘DIS22’,’PRV02’,’JACOBO HUNTER’)
insert into Distrito values(‘DIS23’,’PRV02’,’LA JOYA’)
insert into Distrito values(‘DIS24’,’PRV02’,’MARIANO MELGAR’)
insert into Distrito values(‘DIS25’,’PRV02’,’MIRAFLORES’)
insert into Distrito values(‘DIS26’,’PRV02’,’MOLLEBAYA’)
insert into Distrito values(‘DIS27’,’PRV02’,’PAUCARPATA’)
insert into Distrito values(‘DIS28’,’PRV02’,’POCSI’)
---------------------DISTRITO CUZCO---------------------------
insert into Distrito values(‘DIS29’,’PRV03’,’CUSCO’)
insert into Distrito values(‘DIS30’,’PRV03’,’CCORCA’)
insert into Distrito values(‘DIS31’,’PRV03’,’POROY’)
insert into Distrito values(‘DIS32’,’PRV03’,’SAN JERONIMO’)
insert into Distrito values(‘DIS33’,’PRV03’,’SAN SEBASTIAN’)
insert into Distrito values(‘DIS34’,’PRV03’,’SANTIAGO’)
insert into Distrito values(‘DIS35’,’PRV03’,’SAYLLA’)
insert into Distrito values(‘DIS36’,’PRV03’,’WANCHAQ’)
---------------------DISTRITO ICA---------------------------
insert into Distrito values(‘DIS37’,’PRV04’,’ICA’)
insert into Distrito values(‘DIS38’,’PRV04’,’LOS AQUIJES’)
insert into Distrito values(‘DIS39’,’PRV04’,’OCUCAJE’)
insert into Distrito values(‘DIS40’,’PRV04’,’PACHACUTEC’)
insert into Distrito values(‘DIS41’,’PRV04’,’PARCONA’)
insert into Distrito values(‘DIS42’,’PRV04’,’PUEBLO NUEVO’)
insert into Distrito values(‘DIS43’,’PRV04’,’SALAS’)
insert into Distrito values(‘DIS44’,’PRV04’,’SAN JUAN BAUTISTA’)
insert into Distrito values(‘DIS45’,’PRV04’,’SANTIAGO’)
----------------------DISTRITO CALLAO---------------------------
insert into Distrito values(‘DIS46’,’PRV05’,’CALLAO’)
insert into Distrito values(‘DIS47’,’PRV05’,’BELLAVISTA’)
insert into Distrito values(‘DIS48’,’PRV05’,’CARM. DE LA LEGUA REYNOSO’)
insert into Distrito values(‘DIS49’,’PRV05’,’LA PERLA’)
insert into Distrito values(‘DIS50’,’PRV05’,’LA PUNTA’)
insert into Distrito values(‘DIS51’,’PRV05’,’VENTANILLA’)
go
-------------------CARGO ---------------------------------------------------
INSERT INTO CARGO VALUES (‘CRG01’,’ADMINISTRADOR’)
INSERT INTO CARGO VALUES (‘CRG02’,’VENDEDOR’)
GO
-----------------------------TRABAJADORES-------------------------------
INSERT INTO Trabajador VALUES (‘T0001’,’Antonio’,’Lucas’,’Resureccion’,’
29/03/1974’,’M’,’AV colombia 254’,’DIS41’,’154-6532’,’antony_86@hotmail.
com’,’666666’,’CRG01’,’1’)
INSERT INTO Trabajador VALUES (‘T0002’,’Karen’,’Florez’,’Rosero’,’18/04/
1974’,’F’,’AV Pablo Bermudez 788’,’DIS34’,’456-6521’,’kharenxd@hotmail.
com’,’824658’,’CRG01’,’1’)
INSERT INTO Trabajador VALUES (‘T0003’,’Nohely’,’Lopez’,’Velasques’,’18/05/1974’,’

www.detodoprogramacion.org
342 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

F’,’AV Arenales 452’,’DIS50’,’458-7896’,’lopeznohe@yahoo.es’,’648256’,’CRG01’,’1’)


INSERT INTO Trabajador VALUES (‘T0004’,’Rosa’,’Marcelo’,’Ventocilla’,’22/
06/1974’,’F’,’Jr.Tomas Marzano 785’,’DIS21’,’145-9874’,’rosa_45@hotmail.
com’,’286452’,’CRG02’,’1’)
INSERT INTO Trabajador VALUES (‘T0005’,’Ivan’,’Mejia’,’Cisneros’,’16/07/1974’,’M’,
’Av. Angamos 452’,’DIS41’,’154-6523’,’ivanmejia@hotmail.com’,’462854’,’CRG02’,’1’)
INSERT INTO Trabajador VALUES (‘T0006’,’Aurelio’,’Chichon’,’Valle’,’11/
08/1974’,’M’,’Av.Tomas Valle 127’,’DIS32’,’965-8946’,’valle_74@hotmail.
com’,’582465’,’CRG02’,’1’)
go

-----------------------------CLIENTES------------------------------
INSERT INTO Cliente VALUES (‘C0001’,’Juan ‘,’Quispe Vallejos’,’21/06/1974’,’M’,
’46791346’,’AV Javier Prado 233’,’DIS02’,’654-6689’,’CASADO’,’juanqui@hotmail.
com’,’666666’,’1911250709’,’1’)
INSERT INTO Cliente VALUES (‘C0002’,’Lucho’,’Mamani Luque’,’12/05/1975’,’M
’,’48591526’,’Av.las Alomos 560’,’DIS15’,’798-4598’,’CASADO’,’kj_@hotmail.
com’,’794613’,’1921853100’,’1’)
INSERT INTO Cliente VALUES (‘C0003’,’Luis’,’Arias Castro’,’18/09/1974’,’M’
,’45926132’,’AV la molina 269’,’DIS41’,’411-4562’,’SOLTERO’,’ahg_@hotmail.
com’,’134679’,’1931382201’,’1’)
INSERT INTO Cliente VALUES (‘C0004’,’Alberto’,’Moreno Manco’,’16/06/1973’,
’M’,’47948592’,’Jr. chalaca 598’,’DIS51’,’452-9654’,’CASADO’,’poi@hotmail.
com’,’895623’,’1921305400’,’1’)
INSERT INTO Cliente VALUES (‘C0005’,’Mario’,’Hidalgo Condori’,’15/06/1975’,’M
’,’45138841’,’av.arequipa 458’,’DIS31’,’456-8974’,’SOLTERO’,’jhg_45@hotmail.
com’,’235689’,’1911939502’,’1’)
INSERT INTO Cliente VALUES (‘C0006’,’Manuel’,’Villalta Talaverano’,’01/04/1974’
,’M’,’42968574’,’AV Inca Garcilazo’,’DIS45’,’564-9874’,’CASADO’,’fd14@hotmail.
com’,’784512’,’1961651800’,’1’)
INSERT INTO Cliente VALUES (‘C0007’,’Daniel’,’Tarazona Panda’,’05/02/1974’,’M’,
’48748565’,’AV Javier Prado 145’,’DIS16’,’855-6598’,’CASADO’,’dsa_154@hotmail.
com’,’124578’,’1911891208’,’1’)
INSERT INTO Cliente VALUES (‘C0008’,’Monica’,’Yangua Pajuelo’,’12/06/1974’,’F’
,’47437602’,’Jr.las cumbres 121’,’DIS15’,’798-4879’,’SOLTERO’,’auy_45@hotmail.
com’,’741852’,’1951112209’,’1’)
INSERT INTO Cliente VALUES (‘C0009’,’Mario’,’Aguila Ramos’,’10/01/1974’,’M’,
’44020877’,’AV Las palmeras 244’,’DIS12’,’456-9874’,’CASADO’,’aa_14@hotmail.
com’,’963852’,’2004444508’,’1’)
INSERT INTO Cliente VALUES (‘C0010’,’Luisa’,’Quesada Blas’,’21/02/1975’,’F’
,’43215487’,’AV Arequipa 452’,’DIS15’,’123-6542’,’CASADO’,’rosa_45@hotmail.
com’,’666666’,’1982222308’,’1’)
go
------------- DESCUENTO --------------------------------------
INSERT INTO DESCUENTO VALUES (0)
INSERT INTO DESCUENTO VALUES (10)
INSERT INTO DESCUENTO VALUES (15)
go
--------------------------MARCA---------------------------------
INSERT INTO MARCA VALUES (‘LISET’)
INSERT INTO MARCA VALUES (‘ELLA’)
INSERT INTO MARCA VALUES (‘AMD’)
INSERT INTO MARCA VALUES (‘CAMILA’)
INSERT INTO MARCA VALUES (‘NOSOTRAS’)
go

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 343

--------------------------CATEGORIA----------------------------
INSERT INTO CATEGORIA VALUES (‘Candelaria’,’Descripcion de Candelaria’)
INSERT INTO CATEGORIA VALUES (‘Crochet’,’Descripcion de Crochet’)
INSERT INTO CATEGORIA VALUES (‘Macrame’,’Descripcion de Macrame’)
INSERT INTO CATEGORIA VALUES (‘Palitos’,’Descripcion de Palitos’)
INSERT INTO CATEGORIA VALUES (‘Rustik’,’Descripcion de Rustik’)
GO
------------- PRODUCTOS ----------------------------------------
insert into Producto values (‘P0001’,’Candelaria 11’,50.00,220,10,’10/05/2009’,1,2
)
insert into Producto values (‘P0002’,’Candelaria 22’,30.00,220,10,’12/05/2009’,1,3
)
insert into Producto values (‘P0003’,’Candelaria 33’,65.00,33,10,’11/05/2009’,1,2)
insert into Producto values (‘P0004’,’Candelaria 44’,70.00,92,10,’15/05/2009’,1,2)
insert into Producto values (‘P0005’,’Candelaria 55’,55.00,97,10,’11/05/2009’,1,5)
insert into Producto values (‘P0006’,’Candelaria 66’,50.00,97,10,’11/05/2009’,1,5)
insert into Producto values (‘P0007’,’Crochet 11’,90.00,120,10,’10/05/2009’,2,2)
insert into Producto values (‘P0008’,’Crochet 22’,110.00,120,10,’10/05/2009’,2,2)
insert into Producto values (‘P0009’,’Crochet 33’,95.00,35,10,’15/05/2009’,2,2)
insert into Producto values (‘P0010’,’Crochet 44’,120.00,35,10,’15/05/2009’,2,2)
insert into Producto values (‘P0011’,’Crochet 55’,100.00,35,10,’15/05/2009’,2,2)
insert into Producto values (‘P0012’,’Crochet 66’,120.00,35,10,’15/05/2009’,2,2)
insert into Producto values (‘P0014’,’Crochet 77’,90.00,120,10,’10/05/2009’,2,2)
insert into Producto values (‘P0015’,’Crochet 88’,110.00,120,10,’10/05/2009’,2,2)
insert into Producto values (‘P0016’,’Crochet 99’,95.00,35,10,’15/05/2009’,2,2)
insert into Producto values (‘P0017’,’Crochet 110’,120.00,35,10,’15/05/2009’,2,2)
insert into Producto values (‘P0018’,’Crochet 111’,100.00,35,10,’15/05/2009’,2,2)
insert into Producto values (‘P0019’,’Crochet 112’,120.00,35,10,’15/05/2009’,2,2)

insert into Producto values (‘P0020’,’Macrame 11’,60.00,80,10,’15/05/2009’,3,1)


insert into Producto values (‘P0021’,’Macrame 22’,60.00,25,10,’14/05/2009’,3,3)
insert into Producto values (‘P0022’,’Macrame 33’,82.00,25,10,’15/05/2009’,3,1)
insert into Producto values (‘P0023’,’Macrame 44’,75.00,200,10,’14/05/2009’,3,2)
insert into Producto values (‘P0024’,’Macrame 55’,79.00,200,10,’14/05/2009’,3,2)
insert into Producto values (‘P0025’,’Macrame 66’,60.00,80,10,’15/05/2009’,3,1)
insert into Producto values (‘P0026’,’Macrame 77’,60.00,80,10,’15/05/2009’,3,1)
insert into Producto values (‘P0027’,’Macrame 88’,60.00,25,10,’14/05/2009’,3,3)
insert into Producto values (‘P0028’,’Macrame 99’,82.00,25,10,’15/05/2009’,3,1)
insert into Producto values (‘P0029’,’Macrame 110’,75.00,200,10,’14/05/2009’,3,2)
insert into Producto values (‘P0030’,’Macrame 111’,79.00,200,10,’14/05/2009’,3,2)
insert into Producto values (‘P0031’,’Macrame 112’,60.00,80,10,’15/05/2009’,3,1)

insert into Producto values (‘P0032’,’Palitos 11’,60.00,20,10,’13/05/2009’,4,2)


insert into Producto values (‘P0033’,’Palitos 22’,75.00,235,10,’15/05/2009’,4,1)
insert into Producto values (‘P0034’,’Palitos 33’,50.00,320,10,’15/05/2009’,4,3)
insert into Producto values (‘P0035’,’Palitos 44’,100.00,200,10,’15/05/2009’,4,3)
insert into Producto values (‘P0036’,’Palitos 55’,110.00,200,10,’15/05/2009’,4,3)
insert into Producto values (‘P0037’,’Palitos 66’,180.00,200,10,’15/05/2009’,4,3)
insert into Producto values (‘P0038’,’Palitos 77’,85.00,20,10,’13/05/2009’,4,2)
insert into Producto values (‘P0039’,’Palitos 88’,55.00,235,10,’15/05/2009’,4,1)
insert into Producto values (‘P0040’,’Palitos 99’,90.00,320,10,’15/05/2009’,4,3)
insert into Producto values (‘P0041’,’Palitos 110’,120.00,200,10,’15/05/2009’,4,3)

www.detodoprogramacion.org
344 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

insert into Producto values (‘P0042’,’Palitos 111’,110.00,200,10,’15/05/2009’,4,3)


insert into Producto values (‘P0043’,’Palitos 112’,105.00,200,10,’15/05/2009’,4,3)

insert into Producto values (‘P0044’,’Rustik 11’,80.00,20,10,’13/05/2009’,5,2)


insert into Producto values (‘P0045’,’Rustik 22’,85.00,235,10,’15/05/2009’,5,1)
insert into Producto values (‘P0046’,’Rustik 33’,79.00,320,10,’15/05/2009’,5,3)
insert into Producto values (‘P0047’,’Rustik 44’,110.00,200,10,’15/05/2009’,5,3)
insert into Producto values (‘P0048’,’Rustik 55’,100.00,200,10,’15/05/2009’,5,3)
insert into Producto values (‘P0049’,’Rustik 66’,120.00,200,10,’15/05/2009’,5,3)
------ REGISTRO DE COMPRA -----------------------------
INSERT INTO Registro_Compra VALUES (‘0000000001’,’C0001’,’15/02/2009’,1,1290.00)
INSERT INTO Registro_Compra VALUES (‘0000000002’,’C0002’,’24/04/2009’,2,800.00)
INSERT INTO Registro_Compra VALUES (‘0000000003’,’C0003’,’04/06/2009’,1,4500.00)
INSERT INTO Registro_Compra VALUES (‘0000000004’,’C0004’,’12/05/2009’,2,400.00)
INSERT INTO Registro_Compra VALUES (‘0000000005’,’C0005’,’15/05/2009’,3,700.00)
INSERT INTO Registro_Compra VALUES (‘0000000006’,’C0006’,’10/06/2009’,1,1000.00)
INSERT INTO Registro_Compra VALUES (‘0000000007’,’C0007’,’08/07/2009’,2,1200.00)
INSERT INTO Registro_Compra VALUES (‘0000000008’,’C0008’,’19/09/2009’,1,1500.00)
INSERT INTO Registro_Compra VALUES (‘0000000009’,’C0009’,’23/10/2009’,2,600.00)
INSERT INTO Registro_Compra VALUES (‘0000000010’,’C0010’,’30/11/2009’,3,1700.00)
GO
------ DETALLLE REGISTRO DE COMPRA -------------------
INSERT INTO Detalle_Registro VALUES (1,’P0001’,1,50.00)
INSERT INTO Detalle_Registro VALUES (1,’P0003’,3,65.00)
INSERT INTO Detalle_Registro VALUES (1,’P0005’,2,55.00)
INSERT INTO Detalle_Registro VALUES (2,’P0003’,2,65.00)
INSERT INTO Detalle_Registro VALUES (2,’P0007’,1,90.00)
INSERT INTO Detalle_Registro VALUES (2,’P0002’,1,30.00)
INSERT INTO Detalle_Registro VALUES (2,’P0001’,1,50.00)

INSERT INTO Detalle_Registro VALUES (3,’P0008’,3,110.00)


INSERT INTO Detalle_Registro VALUES (3,’P0001’,1,50.00)
INSERT INTO Detalle_Registro VALUES (4,’P0005’,2,55.00)
INSERT INTO Detalle_Registro VALUES (4,’P0004’,1,70.00)
INSERT INTO Detalle_Registro VALUES (5,’P0003’,6,65.00)
INSERT INTO Detalle_Registro VALUES (5,’P0002’,5,30.00)
INSERT INTO Detalle_Registro VALUES (6,’P0012’,2,120.00)
INSERT INTO Detalle_Registro VALUES (6,’P0010’,1,120.00)
INSERT INTO Detalle_Registro VALUES (7,’P0005’,2,55.00)
INSERT INTO Detalle_Registro VALUES (7,’P0004’,2,70.00)
INSERT INTO Detalle_Registro VALUES (8,’P0003’,3,65.00)
INSERT INTO Detalle_Registro VALUES (8,’P0002’,1,30.00)
INSERT INTO Detalle_Registro VALUES (9,’P0012’,2,120.00)
INSERT INTO Detalle_Registro VALUES (9,’P0008’,1,110.00)
INSERT INTO Detalle_Registro VALUES (10,’P0010’,2,120.00)
INSERT INTO Detalle_Registro VALUES (10,’P0008’,2,110.00)
go
------------- PRODCEDIMIENTOS --------------------------------
set dateformat dmy
go
SET NOCOUNT ON
GO

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 345

Create Proc usp_ListarDistritos


as
SELECT DISTRITO_ID,NOM_DISTRITO
FROM DISTRITO
ORDER BY NOM_DISTRITO
go

Create Proc usp_ListarProvincia


as
Select * from provincia
go

Create Proc usp_ListarDistritosXProv


@Prov_ID char(5)
as
Select * from distrito
where Provincia_ID = @Prov_ID
go
--==========================================================================
Create proc usp_GenerarCodCliente
As
Declare @Cliente_ID char(5)
Set @Cliente_ID=(Select max(Cliente_ID) from cliente)
set @Cliente_ID=’C’ +right(‘0000’+ltrim(right(isnull(@Cliente_ID,’0000’),4)+1),4)
Select @Cliente_ID
go

Create Proc usp_ListarCLientes


as
SELECT Cliente_ID,Cli_Nombre,Cli_Apellidos,Cli_FechaNac,datediff(year,Cli_
FechaNac,getdate()) as Edad,
Cli_DNI,Cli_Direccion,Nom_Distrito,Cli_Telefono,Cli_EstadoCivil,Cli_Email,Cli_
NroCuenta
from cliente c, distrito d
where c.Distrito_ID = d.Distrito_ID
and c.Cli_Estado = ‘1’
go

CREATE Proc usp_BuscarCliente --’ ‘,’ ‘,’DIS02’


@Cli_Nombre varchar(30),
@Cli_Apellidos varchar(30),
@Distrito_ID varchar(5)
as
SELECT Cliente_ID,Cli_Nombre,Cli_Apellidos,Cli_FechaNac,datediff(year,Cli_
FechaNac,getdate()) as Edad, Cli_DNI,Cli_Direccion,Nom_Distrito,Cli_Telefono,Cli_
EstadoCivil,Cli_Email,Cli_NroCuenta
from cliente c, distrito d
where c.Distrito_ID = d.Distrito_ID and Cli_Nombre like @Cli_Nombre +’%’
and Cli_Apellidos like @Cli_Apellidos+’%’ AND c.Distrito_ID like @Distrito_ID
and c.Cli_Estado = ‘1’
go

www.detodoprogramacion.org
346 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Create Proc usp_ConsultarDatosCliente


@Cliente_ID char(5)
as
SELECT Cliente_ID,Cli_Nombre,Cli_Apellidos,Cli_FechaNac,datediff(year,Cli_
FechaNac,getdate()) as Edad,Cli_DNI,Cli_Direccion,Nom_Provincia,Nom_Distrito,Cli_
Telefono,Cli_EstadoCivil,Cli_Email,Cli_NroCuenta from cliente c, distrito
d,provincia p
where c.Distrito_ID = d.Distrito_ID and d.provincia_id = p.provincia_ID
and Cliente_ID = @Cliente_ID and c.Cli_Estado = ‘1’
go

CREATE Proc usp_DeshabilitarCliente


@Cliente_ID char(5)
as
UPDATE cliente SET Cli_Estado=’0’ where cliente_id =@Cliente_ID
SELECT ‘2’
go

CREATE Proc usp_ActualizarCliente


@Cliente_ID char(5),
@Cli_Nombre varchar(30),
@Cli_Apellidos varchar(30),
@Cli_FechaNac datetime,
@Cli_Sexo char(1),
@Cli_DNI char(8),
@Cli_Direccion varchar(30),
@Distrito_ID char(5),
@Cli_Telefono varchar(10),
@Cli_EstadoCivil varchar(30),
@Cli_Email varchar(50),
@Cli_Password char(6),
@Cli_NroCuenta char(10),
@Cli_Estado char(1),
@tipo int --1(Insertar),0(Actualizat)
as
BEGIN TRANSACTION -------------------------
Set nocount on
IF (@tipo=1) -- INSERTAR
Begin
IF Exists(Select * from CLIENTE where Upper(Cli_Nombre)=Upper(@Cli_Nombre)AND
Upper(Cli_Apellidos)=Upper(@Cli_Apellidos) )
Begin
Select ‘-1’,’Los datos de este Cliente ya estan registrados. Ingrese otro’
COMMIT TRANSACTION -------------------------
RETURN
End
ELSE
BEGIN
Set @Cliente_ID=(Select max(Cliente_ID) from cliente)
set @Cliente_ID=’C’ +right(‘0000’+ltrim(right(isnull(@Cliente_
ID,’0000’),4)+1),4)

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 347

--Select @Cliente_ID
INSERT INTO CLIENTE VALUES (@Cliente_ID,@Cli_Nombre,@Cli_Apellidos,@Cli_
FechaNac,@Cli_Sexo,@Cli_DNI,@Cli_Direccion,
@Distrito_ID,@Cli_Telefono,@Cli_EstadoCivil,@Cli_Email,@Cli_Password,@Cli_
NroCuenta,’1’)
--Select ‘1’
END
END
ELSE IF (@tipo=0) --ACTUALIZAR
BEGIN
UPDATE CLIENTE SET Cli_Nombre=@Cli_Nombre, Cli_Apellidos=@Cli_Apellidos, Cli_
FechaNac=@Cli_FechaNac, Cli_Sexo=@Cli_Sexo,Cli_DNI=@Cli_DNI, Cli_Direccion=@Cli_
Direccion, Distrito_ID=@Distrito_ID, Cli_Telefono=@Cli_Telefono, Cli_EstadoCivil=@
Cli_EstadoCivil, Cli_Email=@Cli_Email, Cli_Password=@Cli_Password, Cli_
NroCuenta=@Cli_NroCuenta WHERE Cliente_ID=@Cliente_ID
END
If(@@ERROR <> 0)
BEGIN
ROLLBACK TRANSACTION -------------------------
SELECT ‘-2’
COMMIT TRANSACTION ------------->>>>>>>>>>>>>
RETURN
END
ELSE
BEGIN
COMMIT TRANSACTION ------------->>>>>>>>>>>>>
SELECT @TIPO
RETURN
END
GO

CREATE Proc usp_ValidarCliente


@Cli_Email varchar(50),
@Cli_Password char(6)
as
SELECT Cliente_ID,Cli_Nombre,Cli_Apellidos,Cli_FechaNac,datediff(year,Cli_
FechaNac,getdate()) as Edad,
Cli_DNI,Cli_Direccion,Nom_Distrito,Cli_Telefono,Cli_EstadoCivil,Cli_Email,Cli_
NroCuenta
from cliente c, distrito d where c.Distrito_ID = d.Distrito_ID
AND Upper(Cli_Email)=Upper(@Cli_Email) AND Cli_Password=@Cli_Password
GO
--==========================================================================
Create proc usp_GenerarCodTrabajador
As
Declare @Trabajador_ID char(5)
Set @Trabajador_ID=(Select max(Trabajador_ID) from trabajador)
set @Trabajador_ID=’T’ +right(‘0000’+ltrim(right(isnull(@Trabajador_
ID,’0000’),4)+1),4)
Select @Trabajador_ID as ‘Cod_Trab’
go
Create Proc usp_ListarCargo
as

www.detodoprogramacion.org
348 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Select * from cargo


go

CREATE Proc usp_ListarTrabajadores


as
Select Trabajador_ID,nombre,ape_paterno,ape_materno,
datediff(year,fecha_nac,getdate()) as Edad,nom_distrito,direccion,telefono,email,n
om_cargo
from trabajador t, distrito d,cargo cg
where t.Distrito_ID = d.Distrito_ID and t.Cargo_ID = cg.Cargo_ID and t.estado=’1’
go

CREATE Proc usp_DelTrabajador


@Trabajador_ID char(5)
as
UPDATE TRABAJADOR SET Estado= ‘0’ WHERE Trabajador_ID=@Trabajador_ID
SELECT ‘2’
go

CREATE Proc usp_ActualizarTrabajador


@Trabajador_ID char(5),
@Nombre varchar(30),
@Ape_Paterno varchar(30),
@Ape_Materno varchar(30),
@Fecha_Nac datetime,
@Sexo char(1),
@Direccion varchar(30),
@Distrito_ID char(5),
@Telefono varchar(10),
@Email varchar(50),
@Password varchar(6),
@Cargo_ID char(5),
@Estado char(1),
@Tipo int--1(Insertar),0(Actualizat),2(Eliminar)
as
if (@tipo=1) -- INSERTAR
BEGIN
Set @Trabajador_ID=(Select max(Trabajador_ID) from trabajador)
set @Trabajador_ID=’T’ +right(‘0000’+ltrim(right(isnull(@Trabajador_
ID,’0000’),4)+1),4)
INSERT INTO TRABAJADOR VALUES (@Trabajador_ID,@Nombre,@Ape_Paterno,@Ape_Materno,@
Fecha_Nac,@Sexo,
@Direccion,@Distrito_ID,@Telefono,@Email,@Password,@Cargo_ID,’1’)
Select ‘1’
END
ELSE IF (@tipo=0) --ACTUALIZAR
BEGIN
UPDATE TRABAJADOR SET Nombre=@Nombre, Ape_Paterno=@Ape_Paterno, Ape_Materno=@
Ape_Materno, Direccion=@Direccion, Distrito_ID=@Distrito_ID, Telefono=@Telefono,
Email=@Email,Cargo_ID=@Cargo_ID WHERE Trabajador_ID=@Trabajador_ID
Select ‘0’
END

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 349

ELSE --ELIMINAR
BEGIN
UPDATE TRABAJADOR SET Estado= ‘0’ WHERE Trabajador_ID=@Trabajador_ID
SELECT ‘2’
END
go

CREATE Proc usp_BuscarTrabajador


@Trabajador_ID char(5)
as
Select Trabajador_ID,password,(nombre+ ‘ ‘+ape_Paterno+’ ‘+ ape_Materno) as
Nombre,
datediff(year,Fecha_Nac,getdate()) as Edad,nom_cargo
from trabajador t, distrito d,cargo cg
where t.Distrito_ID = d.Distrito_ID and t.Cargo_ID = cg.Cargo_ID and Trabajador_ID
= @Trabajador_ID
go

CREATE Proc usp_ValidarTrabajador


@Email varchar(50),
@Password varchar(6)
as
Select Trabajador_ID,(nombre+ ‘ ‘+ape_Paterno+’ ‘+ ape_Materno) as Nombre,
datediff(year,Fecha_Nac,getdate()) as Edad,nom_cargo,email
from trabajador t, distrito d,cargo cg
where t.Distrito_ID = d.Distrito_ID and t.Cargo_ID = cg.Cargo_ID and Email=@Email
and Password=@Password
go
--==========================================================================
Create proc usp_GenerarCodProducto
As
Declare @Producto_ID char(5)
Set @Producto_ID=(Select max(Producto_ID) from Producto)
set @Producto_ID=’P’ +right(‘0000’+ltrim(right(isnull(@Producto_
ID,’0000’),4)+1),4)
Select @Producto_ID as ‘Cod_Prod’
go

Create Proc usp_ListarMarca


as
Select * from marca
go

Create Proc usp_ListarCategorias


as
Select * from Categoria
go

CREATE PROC usp_ActualizarProducto


@Producto_ID char(5),
@Nom_Producto varchar(30),
@Precio money,

www.detodoprogramacion.org
350 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

@Stock int,
@Stock_Min int,
@Fecha_Ing datetime,
@Categoria_ID int,
@Marca_ID int,
@tipo int
as
if (@tipo=1) -- INSERTAR
BEGIN
Set @Producto_ID=(Select max(Producto_ID) from Producto)
set @Producto_ID=’P’ +right(‘0000’+ltrim(right(isnull(@Producto_
ID,’0000’),4)+1),4)
INSERT INTO PRODUCTO VALUES (@Producto_ID,@Nom_Producto,@
Precio,0,10,getdate(),
@Categoria_ID,@Marca_ID)
Select ‘1’
END
ELSE IF (@tipo=0) --ACTUALIZAR
BEGIN
UPDATE PRODUCTO SET Nom_Producto=@Nom_Producto,Precio=@Precio,Stock=@Stock,
Stock_Min=@Stock_Min
--Fecha_Ing=@Fecha_Ing,Categoria_ID=@Categoria_ID,Marca_ID=@Marca_ID
WHERE Producto_ID=@Producto_ID
Select ‘0’
END
go
---------------------------------------------------------
CREATE PROC usp_ListarProductos
as
select p.Producto_ID,nom_producto,Precio,Stock,Stock_min,nom_categoria, nom_marca
from producto p,categoria c, marca m
where p.Marca_ID = m.Marca_ID
and p.Categoria_ID=c.Categoria_ID
go

CREATE PROC usp_BuscarProducto


@Producto_ID char(5)
as
select p.Producto_ID,nom_producto,Precio,Stock,Stock_min,nom_categoria, nom_marca
from producto p,categoria c, marca m
where p.Marca_ID = m.Marca_ID
and p.Categoria_ID=c.Categoria_ID
go
---------------------------------------------------------
CREATE Proc usp_ActualizarStock
@Producto_ID char(5),
@stock int
as
begin
UPDATE producto set stock=stock-@stock where Producto_ID = @Producto_ID
Select ‘1’,’Stock Actualizado’
end

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 351

GO

Create Proc usp_VerificarStock


@Producto_ID char(5),
@Cant int
as
Declare @stk int,@stkM int
set @stk = (Select stock from Producto where Producto_ID = @Producto_ID)
set @stkM = (Select stock_min from Producto where Producto_ID = @Producto_ID)
IF (@Cant >(@stk-@stkM))
Select ‘0’,’No hay suficiente cantidad’
--ELSE IF((@stk-@Cant)<@stkM) Select ‘0’,’NO debe ser menor que el Stock
minimo’
ELSE
--UPDATE productos set stock=stock-@Cant where Productos_ID = @Producto_ID
Select ‘1’,’Stock Actualizado’
GO
-------------------------------------------
Create proc uspListadoProductosCategoria1
as
select Producto_ID,nom_producto ,Precio from producto where Categoria_ID=1
go

Create proc uspListadoProductosCategoria2


as
select Producto_ID,nom_producto ,Precio from producto where Categoria_ID=2
go

Create proc uspListadoProductosCategoria3


as
select Producto_ID,nom_producto ,Precio from producto where Categoria_ID=3
go

Create proc uspListadoProductosCategoria4


as
select Producto_ID,nom_producto ,Precio from producto where Categoria_ID=4
go

Create proc uspListadoProductosCategoria5


as
select Producto_ID,nom_producto ,Precio from producto where Categoria_ID=5
go

CREATE proc uspListadoProductosXCategoria --’Microcomputadora’


@nom_categoria varchar(50)
as
select Producto_ID,nom_producto ,Precio from producto p,categoria c where
c.Categoria_ID=p.Categoria_ID and nom_categoria =@nom_categoria
go

--==========================================================================
--> GUARDAR REGISTRO COMPRA CABEZERA

www.detodoprogramacion.org
352 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

--------------------------------------
CREATE Proc usp_GuardarRegistro_Cab
--@Registro_ID INT,
--@Nro_Registro char(10),
@Cliente_ID char(5),
@Fecha_Reg datetime,
@Descuento_ID int,
@Total money
as
Declare @nro_registro char(10)
Set @nro_registro=(Select max(nro_registro) from REGISTRO_COMPRA)
Set @nro_registro= right(‘0000000000’+ltrim(right(isnull(@nro_
registro,’0000000000’),10)+1),10)
INSERT INTO REGISTRO_COMPRA VALUES (@nro_registro,@Cliente_ID,getdate(),@
Descuento_ID,@Total)
Select max(Registro_ID) from REGISTRO_COMPRA
go
--------------------------------------
--> GUARDAR REGISTRO COMPRA DETALLE
--------------------------------------
CREATE Proc usp_GuardarRegistro_Det
@Registro_ID int,
@Producto_ID char(5),
@Cantidad int,
@Precio money
as
INSERT INTO Detalle_Registro VALUES (@Registro_ID,@Producto_ID,@Cantidad,@Precio)
Select ‘1’
go

Create PROC usp_BuscarRegistro_Cab


@Cliente_ID varchar(5),
@Fecha_Ini DATETIME,
@Fecha_Fin DATETIME
as
SELECT registro_ID,Nro_Registro,(cli_nombre+ ‘ ‘+ cli_apellidos) as Nombre,
convert(char(10),fecha_reg,103) as Fecha,(Total+d.monto) as Subtotal,d.monto,total
FROM REGISTRO_COMPRA rc,Cliente c,Descuento d
WHERE rc.Cliente_ID = c.Cliente_ID and d.Descuento_ID= rc.Descuento_ID
and fecha_reg between @Fecha_Ini and @Fecha_Fin and rc.Cliente_ID like @Cliente_ID
order by fecha_reg
GO

CREATE PROC usp_BuscarRegistro_Det


@Registro_ID int
as
SELECT Registro_ID,nom_Producto,cantidad,dt.precio,(cantidad*dt.precio) as Valor
FROM Detalle_Registro dt,producto p
where dt.producto_id = p.producto_id and Registro_ID=@Registro_ID
GO
--------

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 353

Create Proc usp_ConsultarDescuento


@cant int
as
if (@cant>8)
Select * from Descuento where Descuento_ID = 3
else if (@cant>5)
Select * from Descuento where Descuento_ID = 2
else
Select * from Descuento where Descuento_ID = 1
go
------------------------------------------
CREATE PROC s
AS
SELECT* FROM CLIENTE WHERE CLI_ESTADO=’1’
go

CREATE PROC usp_ReptRegistroCompra_C


as
select Registro_ID,Nro_Registro,(cli_nombre+’ ‘+cli_apellidos) as nombre,Fecha_
Reg,Monto,Total,rc.cliente_ID
from registro_Compra rc,descuento d,cliente c
where rc.cliente_ID = c.cliente_ID and rc.Descuento_ID = d.Descuento_ID
go

CREATE PROC usp_ReptRegistroCompra_D


as
select Registro_ID,nom_producto,cantidad,dr.precio,(cantidad*dr.precio) as Valor
from detalle_registro dr,producto p where dr.producto_id = p.producto_id
go

Create Proc usp_ReptTodosCliente


as
SELECT Cliente_ID,Cli_Nombre,Cli_Apellidos,Cli_FechaNac,datediff(year,Cli_
FechaNac,getdate()) as Edad, Cli_DNI,Cli_Direccion,Nom_Distrito,Cli_Telefono,Cli_
EstadoCivil,Cli_Email,Cli_NroCuenta
from cliente c, distrito d where c.Distrito_ID = d.Distrito_ID and c.Cli_Estado =
‘1’
go
SELECT ‘BD_MILA CREADA’ AS ‘::: MILA ::’
GO

www.detodoprogramacion.org
354 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Archivo BD_BANCOMILA.sql
Luego de haber ejecutado el primer script en la base de datos, cuyo resultado fue totalmente correcto,
vamos a ejecutar el segundo script; para esto nos conectaremos al SQL Server y crearemos un New
Query, o si no damos doble clic sobre el archivo BD_BANCOMILA.sql:

El script es el siguiente:
-- =============================================
-- BASE DE DATOS: BD_BANCOMILA
-- =============================================
USE MASTER
GO
IF EXISTS(SELECT * FROM SYS.sysdatabases WHERE name=’BDBANCOMILA’)
DROP DATABASE BDBANCOMILA
GO
CREATE DATABASE BDBANCOMILA
GO
USE BDBANCOMILA
GO
SET DATEFORMAT DMY
GO
SET NOCOUNT ON
GO
SET LANGUAGE SPANISH
GO

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 355

SET DATEFORMAT DMY


GO

----------------------------------------------
CREATE TABLE Banco (
Banco_ID char(15) NOT NULL,
Nom_Banco varchar(30) NULL,
RUC char(11) NULL
)
go
ALTER TABLE Banco ADD PRIMARY KEY (Banco_ID ASC)
go
CREATE TABLE cliente (
cli_codigo char(5) NOT NULL,
cli_nombre varchar(50) NULL,
cli_telefono numeric(7,0) NULL,
cli_ruc numeric(11,0) NULL,
cli_direccion varchar(30) NULL
)
go
ALTER TABLE cliente ADD PRIMARY KEY (cli_codigo ASC)
go
CREATE TABLE Cuentas (
num_cta char(10) NOT NULL,
cli_codigo char(5) NOT NULL,
cod_cta char(3) NOT NULL,
saldo numeric(10,2) NULL,
clave char(4) NOT NULL,
Zonal_ID int NOT NULL
)
go
ALTER TABLE Cuentas ADD PRIMARY KEY (num_cta ASC)
go
CREATE TABLE Distrito (
Distrito_ID char(5) NOT NULL,
Provincia_ID char(5) NOT NULL,
Nom_Distrito varchar(30) NULL
)
go
ALTER TABLE Distrito ADD PRIMARY KEY (Distrito_ID ASC)
go
CREATE TABLE Movimientos (
num_mov int IDENTITY(1,1),
num_cta char(10) NOT NULL,
fecha datetime NULL,
tip_mov char(1) NULL,
saldo_ant numeric(10,2) NULL,
monto numeric(10,2) NULL,
saldo_nue numeric(10,2) NULL
)
go
ALTER TABLE Movimientos ADD PRIMARY KEY (num_mov ASC)

www.detodoprogramacion.org
356 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

go
CREATE TABLE Provincia (
Provincia_ID char(5) NOT NULL,
Nom_Provincia varchar(30) NULL
)
go

ALTER TABLE Provincia ADD PRIMARY KEY (Provincia_ID ASC)


go
CREATE TABLE Tipo_Cuentas (
cod_cta char(3) NOT NULL,
desc_cta varchar(30) NULL,
moneda char(1) NULL)
go
ALTER TABLE Tipo_Cuentas ADD PRIMARY KEY (cod_cta ASC)
go
CREATE TABLE Zonal (
Zonal_ID int IDENTITY,
Banco_ID char(15) NOT NULL,
Direccion varchar(30) NULL,
Distrito_ID char(5) NOT NULL)
go
ALTER TABLE Zonal ADD PRIMARY KEY (Zonal_ID ASC)
go
ALTER TABLE Cuentas ADD FOREIGN KEY (Zonal_ID) REFERENCES Zonal (Zonal_ID)
go
ALTER TABLE Cuentas ADD FOREIGN KEY (cod_cta) REFERENCES Tipo_Cuentas (cod_cta)
go
ALTER TABLE Cuentas ADD FOREIGN KEY (cli_codigo) REFERENCES cliente (cli_codigo)
go
ALTER TABLE Distrito ADD FOREIGN KEY (Provincia_ID) REFERENCES Provincia
(Provincia_ID)
go
ALTER TABLE Movimientos ADD FOREIGN KEY (num_cta) REFERENCES Cuentas (num_cta)
go
ALTER TABLE Zonal ADD FOREIGN KEY (Distrito_ID) REFERENCES Distrito (Distrito_
ID)
go
ALTER TABLE Zonal ADD FOREIGN KEY (Banco_ID) REFERENCES Banco (Banco_ID)
go
---------------- INSERCION DE REGISTROS -------------------------
-----------------PROVINCIA----------------------------------------------
INSERT into Provincia values(‘PRV01’,’Lima’)
INSERT into Provincia values(‘PRV02’,’Arequipa’)
INSERT into Provincia values(‘PRV03’,’Cuzco’)
INSERT into Provincia values(‘PRV04’,’Ica’)
INSERT into Provincia values(‘PRV05’,’Callao’)
go
---------------------DISTRITOs---------------------------
insert into Distrito values(‘DIS01’,’PRV01’,’ANCON’)
insert into Distrito values(‘DIS02’,’PRV01’,’ATE’)
insert into Distrito values(‘DIS03’,’PRV01’,’BARRANCO’)
insert into Distrito values(‘DIS04’,’PRV01’,’BREÑA’)

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 357

insert into Distrito values(‘DIS05’,’PRV01’,’SURCO’)


insert into Distrito values(‘DIS06’,’PRV01’,’CARABAYLLO’)
insert into Distrito values(‘DIS07’,’PRV01’,’CHORRILLOS’)
insert into Distrito values(‘DIS08’,’PRV01’,’CIENEGUILLA’)
insert into Distrito values(‘DIS09’,’PRV01’,’COMAS’)
insert into Distrito values(‘DIS10’,’PRV01’,’EL AGUSTINO’)
insert into Distrito values(‘DIS11’,’PRV01’,’INDEPENDENCIA’)
insert into Distrito values(‘DIS12’,’PRV01’,’JESUS MARIA’)
insert into Distrito values(‘DIS13’,’PRV01’,’LA MOLINA’)
insert into Distrito values(‘DIS14’,’PRV01’,’LA VICTORIA’)
insert into Distrito values(‘DIS15’,’PRV01’,’LINCE’)
insert into Distrito values(‘DIS16’,’PRV01’,’LOS OLIVOS’)
insert into Distrito values(‘DIS17’,’PRV01’,’LURIGANCHO’)
---------------------DISTRITO AREQUIPA---------------------------
insert into Distrito values(‘DIS18’,’PRV02’,’CAYMA’)
insert into Distrito values(‘DIS19’,’PRV02’,’CERRO COLORADO’)
insert into Distrito values(‘DIS20’,’PRV02’,’CHARACATO’)
insert into Distrito values(‘DIS21’,’PRV02’,’CHIGUATA’)
insert into Distrito values(‘DIS22’,’PRV02’,’JACOBO HUNTER’)
insert into Distrito values(‘DIS23’,’PRV02’,’LA JOYA’)
insert into Distrito values(‘DIS24’,’PRV02’,’MARIANO MELGAR’)
insert into Distrito values(‘DIS25’,’PRV02’,’MIRAFLORES’)
insert into Distrito values(‘DIS26’,’PRV02’,’MOLLEBAYA’)
insert into Distrito values(‘DIS27’,’PRV02’,’PAUCARPATA’)
insert into Distrito values(‘DIS28’,’PRV02’,’POCSI’)
---------------------DISTRITO CUZCO---------------------------
insert into Distrito values(‘DIS29’,’PRV03’,’CUSCO’)
insert into Distrito values(‘DIS30’,’PRV03’,’CCORCA’)
insert into Distrito values(‘DIS31’,’PRV03’,’POROY’)
insert into Distrito values(‘DIS32’,’PRV03’,’SAN JERONIMO’)
insert into Distrito values(‘DIS33’,’PRV03’,’SAN SEBASTIAN’)
insert into Distrito values(‘DIS34’,’PRV03’,’SANTIAGO’)
insert into Distrito values(‘DIS35’,’PRV03’,’SAYLLA’)
insert into Distrito values(‘DIS36’,’PRV03’,’WANCHAQ’)
---------------------DISTRITO ICA---------------------------
insert into Distrito values(‘DIS37’,’PRV04’,’ICA’)
insert into Distrito values(‘DIS38’,’PRV04’,’LOS AQUIJES’)
insert into Distrito values(‘DIS39’,’PRV04’,’OCUCAJE’)
insert into Distrito values(‘DIS40’,’PRV04’,’PACHACUTEC’)
insert into Distrito values(‘DIS41’,’PRV04’,’PARCONA’)
insert into Distrito values(‘DIS42’,’PRV04’,’PUEBLO NUEVO’)
insert into Distrito values(‘DIS43’,’PRV04’,’SALAS’)
insert into Distrito values(‘DIS44’,’PRV04’,’SAN JUAN BAUTISTA’)
insert into Distrito values(‘DIS45’,’PRV04’,’SANTIAGO’)
---------------------DISTRITO CALLAO---------------------------
insert into Distrito values(‘DIS46’,’PRV05’,’CALLAO’)
insert into Distrito values(‘DIS47’,’PRV05’,’BELLAVISTA’)
insert into Distrito values(‘DIS48’,’PRV05’,’CARM. DE LA LEGUA REYNOSO’)
insert into Distrito values(‘DIS49’,’PRV05’,’LA PERLA’)
insert into Distrito values(‘DIS50’,’PRV05’,’LA PUNTA’)
insert into Distrito values(‘DIS51’,’PRV05’,’VENTANILLA’)
go

www.detodoprogramacion.org
358 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

--------------------------------------------------------
INSERT INTO cliente VALUES (‘C0001’,’Juan Quispe Vallejos’,5234567,54336725321,’
Av. La Marina 1234’)
INSERT INTO cliente VALUES (‘C0002’,’Lucho Mamani Luque’,6584503,56325236234,’Av.
Pardo 456 ‘)
INSERT INTO cliente VALUES (‘C0003’,’Luis Arias Castro’,5674566,67836768957,’Av.
Principal 123 ‘)
INSERT INTO cliente VALUES (‘C0004’,’Alberto Moreno Manco’,5524453,38532523450,’La
Perla Callao’)
INSERT INTO cliente VALUES (‘C0005’,’Mario Hidalgo Rai’,6789453,34532523458,’Calle
San Pedro 134’)
INSERT INTO cliente VALUES (‘C0006’,’Manuel Villalta Tala’,5632263,63568333525,’Jr
Ruiseñores 122’)
INSERT INTO cliente VALUES (‘C0007’,’Daniel Tarazo Panda’,5678356,45622462572,’Jr.
Naranjos 5689’)
INSERT INTO cliente VALUES (‘C0008’,’Monica Yanga Pajuelo’,7894568,56632545357,’Av
. Habich 543 ‘)
INSERT INTO cliente VALUES (‘C0009’,’Mario Aguila Ramos’,7894073,67233674566,’Av.
Iquitos 228 ‘)
INSERT INTO cliente VALUES (‘C0010’,’Luisa Quesada Blas’,6111345,14111351435,’Call
e Proceres 422’)
---------------------------------------
INSERT INTO cliente VALUES (‘C0011’,’JHON MORALES ‘,7685704,64223253459,’Calle
Cueva 432 ‘)
INSERT INTO cliente VALUES (‘C0012’,’FERNANDO RODAS ‘,6789456,24623325742,’Av.
Javier Prado 114’)
INSERT INTO cliente VALUES (‘C0013’,’GABRIELA ZAPATA ‘,5678466,72313254560,’Jr.
Pio XII 112 ‘)
INSERT INTO cliente VALUES (‘C0014’,’MELISSA PAICO
‘,1189453,66325234580,’Lizardo Montero 340’)
INSERT INTO cliente VALUES (‘C0015’,’SANDRA CAMPOS ‘,4563457,67362577361,’Jr.
Dominico 554’)
INSERT INTO cliente VALUES (‘C0016’,’MIGUEL RAMIREZ ‘,7460647,45632573556,’Jr.
Salavery 876 ‘)
INSERT INTO cliente VALUES (‘C0017’,’RAUL MORIENTES ‘,8975783,65362533671,’Av.
Habich 4567 ‘)
INSERT INTO cliente VALUES (‘C0018’,’JHONATAN PEÑA ‘,9442752,62243632567,’Av. La
Molina 425’)
INSERT INTO cliente VALUES (‘C0019’,’EUGENIO CAMPOS ‘,9583569,54673356250,’Av.
Wilson 678 ‘)
INSERT INTO cliente VALUES (‘C0020’,’LUCILA PARDO ‘,6546534,53476250977,’Av.
Pardo 567 ‘)
INSERT INTO cliente VALUES (‘C0021’,’ROBERTO BAGGIO ‘,2678958,87662554325,’Av.
Wilson 1267 ‘)
--------------------------------------
GO
INSERT Tipo_Cuentas VALUES(‘C01’,’CTA AHORROS SOLES’,’S’)
INSERT Tipo_Cuentas VALUES(‘C02’,’CTA AHORROS DOLARES’,’D’)
INSERT Tipo_Cuentas VALUES(‘C03’,’CTA CORRIENTE SOLES’,’S’)
INSERT Tipo_Cuentas VALUES(‘C04’,’CTA CORRIENTE DOLARES’,’D’)
INSERT Tipo_Cuentas VALUES(‘C05’,’CTS SOLES’,’S’)
INSERT Tipo_Cuentas VALUES(‘C06’,’CTS DOLARES’,’D’)
INSERT Tipo_Cuentas VALUES(‘C07’,’DEPOSITO A PLAZO FIJO SOLES’,’S’)
INSERT Tipo_Cuentas VALUES(‘C08’,’DEPOSITO A PLAZO FIJO DOLARES’,’D’)
INSERT Tipo_Cuentas VALUES(‘C09’,’CTA MAESTRA SOLES’,’S’)

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 359

INSERT Tipo_Cuentas VALUES(‘C10’,’CTA MAESTRA DOLARES’,’D’)


INSERT Tipo_Cuentas VALUES(‘C11’,’FONDOS MUTUOS SOLES’,’S’)
INSERT Tipo_Cuentas VALUES(‘C12’,’FONDOS MUTUOS DOLARES’,’D’)
GO
-----------------------------------------------------------------------
INSERT INTO BANCO VALUES(‘BC0000000000001’,’BANCO DE CREDITO’,’45894556123’)
INSERT INTO BANCO VALUES(‘BC0000000000002’,’BANCO DEL COMERCIO’,’41578125623’)
INSERT INTO BANCO VALUES(‘BC0000000000003’,’BANCO CONTINENTAL’,’46897946132’)
INSERT INTO BANCO VALUES(‘BC0000000000004’,’MI BANCO’,’43569278431’)
INSERT INTO BANCO VALUES(‘BC0000000000005’,’SCOTIANT BANK’,’42235615490’)
GO
-----------------------------------------------------------------------
INSERT INTO ZONAL VALUES (‘BC0000000000001’,’Av Mexico 342’,’DIS04’)
INSERT INTO ZONAL VALUES (‘BC0000000000001’,’Av Uruguay 788’,’DIS02’)
INSERT INTO ZONAL VALUES (‘BC0000000000001’,’Av Universitaria 1025’,’DIS03’)
INSERT INTO ZONAL VALUES (‘BC0000000000002’,’Av Iquitos 741’,’DIS02’)
INSERT INTO ZONAL VALUES (‘BC0000000000002’,’Av Bermudez 552’,’DIS01’)
INSERT INTO ZONAL VALUES (‘BC0000000000002’,’Av Mexico 342’,’DIS04’)
INSERT INTO ZONAL VALUES (‘BC0000000000003’,’Av Arequipa 520’,’DIS02’)
INSERT INTO ZONAL VALUES (‘BC0000000000003’,’Av Universitaria 1025’,’DIS03’)
INSERT INTO ZONAL VALUES (‘BC0000000000003’,’Av Iquitos 103’,’DIS02’)
INSERT INTO ZONAL VALUES (‘BC0000000000004’,’Av Javier Prado 1255’,’DIS01’)
INSERT INTO ZONAL VALUES (‘BC0000000000004’,’Av Mexico 342’,’DIS04’)
INSERT INTO ZONAL VALUES (‘BC0000000000004’,’Av Uruguay 788’,’DIS02’)
INSERT INTO ZONAL VALUES (‘BC0000000000005’,’Av Aviacion 796’,’DIS03’)
INSERT INTO ZONAL VALUES (‘BC0000000000005’,’Av Iquitos 103’,’DIS02’)
INSERT INTO ZONAL VALUES (‘BC0000000000005’,’Av Arenales 552’,’DIS01’)
go
-----------------------------------------------------------------------
INSERT Cuentas values(‘1911250709’,’C0001’,’C01’,100,’7845’,1)
INSERT Cuentas values(‘1911052119’,’C0001’,’C02’,1000,’8956’,1)
INSERT Cuentas values(‘1921853100’,’C0002’,’C02’,400,’5555’,1)
INSERT Cuentas values(‘1961213702’,’C0002’,’C06’,1500,’6666’,1)
INSERT Cuentas values(‘1931382201’,’C0003’,’C03’,2100,’7777’,1)
INSERT Cuentas values(‘1961925201’,’C0003’,’C06’,1950,’1234’,1)
INSERT Cuentas values(‘1921305400’,’C0004’,’C02’,900,’7894’,1)
INSERT Cuentas values(‘1911939502’,’C0005’,’C01’,400,’2345’,1)
INSERT Cuentas values(‘1961651800’,’C0006’,’C06’,1700,’4567’,1)
INSERT Cuentas values(‘1911891208’,’C0007’,’C01’,410,’5678’,1)
INSERT Cuentas values(‘1961989609’,’C0007’,’C06’,125,’9876’,1)
INSERT Cuentas values(‘1941914118’,’C0007’,’C04’,250,’5555’,1)
INSERT Cuentas values(‘2005566709’,’C0007’,’C10’,1100,’6709’,4)
INSERT Cuentas values(‘2016677808’,’C0007’,’C11’,700,’7808’,4)
INSERT Cuentas values(‘1951112209’,’C0008’,’C05’,1185,’2209’,2)
INSERT Cuentas values(‘1961111108’,’C0008’,’C06’,1060,’1108’,2)
INSERT Cuentas values(‘2004444508’,’C0009’,’C10’,1950,’4508’,4)
INSERT Cuentas values(‘2027788918’,’C0009’,’C12’,930,’8919’,4)
INSERT Cuentas values(‘1982222308’,’C0010’,’C08’,1410,’2308’,3)
--------------------------
INSERT Cuentas values(‘1972233409’,’C0011’,’C07’,1285,’3409’,2)
INSERT Cuentas values(‘1972223318’,’C0012’,’C07’,850,’3318’,3)
INSERT Cuentas values(‘1983344509’,’C0013’,’C08’,1025,’4509’,3)
INSERT Cuentas values(‘2015556618’,’C0014’,’C11’,900,’6618’,4)

www.detodoprogramacion.org
360 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

INSERT Cuentas values(‘1951122308’,’C0015’,’C05’,520,’9632’,2)


INSERT Cuentas values(‘2004445518’,’C0016’,’C10’,1650,’5518’,4)
INSERT Cuentas values(‘1961111218’,’C0017’,’C06’,950,’1218’,2)
INSERT Cuentas values(‘2026667709’,’C0018’,’C12’,300,’7709’,4)
INSERT Cuentas values(‘1993334418’,’C0019’,’C09’,1050,’4418’,3)
INSERT Cuentas values(‘1993333408’,’C0020’,’C09’,900,’3408’,3)
INSERT Cuentas values(‘1994455609’,’C0021’,’C09’,1350,’5609’,4)
GO
-----------------------------------------------------------------------
INSERT Movimientos values(‘1911250709’,’01/01/1999’,’D’,0,100,100)
INSERT Movimientos values(‘1911052119’,’01/01/1999’,’D’,0,200,200)
INSERT Movimientos values(‘1921853100’,’04/05/1999’,’D’,0,100,100)
INSERT Movimientos values(‘1961213702’,’05/05/1999’,’D’,0,500,500)
INSERT Movimientos values(‘1931382201’,’10/01/2000’,’D’,0,400,400)
INSERT Movimientos values(‘1961925201’,’12/02/2000’,’D’,0,500,500)
INSERT Movimientos values(‘1921305400’,’14/04/2001’,’D’,0,200,200)
INSERT Movimientos values(‘1911939502’,’08/01/2001’,’D’,0,140,140)
INSERT Movimientos values(‘1961651800’,’05/02/2001’,’D’,0,520,520)
INSERT Movimientos values(‘1911891208’,’10/05/2001’,’D’,0,410,410)
INSERT Movimientos values(‘1961989609’,’09/06/2001’,’D’,0,125,125)
INSERT Movimientos values(‘1941914118’,’17/07/2001’,’D’,0,250,250)
INSERT Movimientos values(‘1911052119’,’04/09/1999’,’D’,200,200,400)
INSERT Movimientos values(‘1911052119’,’11/10/1999’,’D’,400,300,700)
INSERT Movimientos values(‘1911052119’,’17/11/1999’,’D’,700,200,900)
INSERT Movimientos values(‘1911052119’,’01/01/2001’,’D’,900,500,1400)
INSERT Movimientos values(‘1911052119’,’05/03/2001’,’R’,1400,400,1000)
INSERT Movimientos values(‘1921853100’,’10/05/1999’,’D’,100,400,500)
INSERT Movimientos values(‘1921853100’,’24/11/1999’,’D’,500,100,600)
INSERT Movimientos values(‘1921853100’,’12/03/2000’,’D’,600,500,1100)
INSERT Movimientos values(‘1921853100’,’28/03/2000’,’R’,1100,700,400)
INSERT Movimientos values(‘1921305400’,’15/04/2001’,’D’,200,200,400)
INSERT Movimientos values(‘1921305400’,’10/09/2001’,’D’,400,700,1100)
INSERT Movimientos values(‘1921305400’,’27/02/2002’,’D’,1100,400,1500)
INSERT Movimientos values(‘1921305400’,’14/10/2002’,’R’,1500,600,900)
INSERT Movimientos values(‘1961651800’,’15/02/2001’,’D’,520,500,1020)
INSERT Movimientos values(‘1961651800’,’27/12/2001’,’D’,1020,580,1600)
INSERT Movimientos values(‘1961651800’,’04/08/2002’,’D’,1600,800,2400)
INSERT Movimientos values(‘1961651800’,’17/11/2002’,’R’,2400,700,1700)
GO
INSERT Movimientos values(‘1951112209’,’12/01/2002’,’D’,0,185,185)
INSERT Movimientos values(‘1961111218’,’14/01/2002’,’D’,0,250,250)
INSERT Movimientos values(‘1972233409’,’21/01/2002’,’D’,0,500,500)
INSERT Movimientos values(‘1972223318’,’15/02/2002’,’D’,0,250,250)
INSERT Movimientos values(‘1983344509’,’01/03/2002’,’D’,0,125,125)
INSERT Movimientos values(‘1993334418’,’11/03/2002’,’D’,0,250,250)
INSERT Movimientos values(‘1994455609’,’01/04/2002’,’D’,0,150,150)
INSERT Movimientos values(‘2004445518’,’02/04/2002’,’D’,0,275,275)
INSERT Movimientos values(‘2005566709’,’05/05/2002’,’D’,0,200,200)
INSERT Movimientos values(‘2015556618’,’01/06/2002’,’D’,0,250,250)
INSERT Movimientos values(‘2026667709’,’01/07/2002’,’D’,0,100,100)
INSERT Movimientos values(‘2027788918’,’09/07/2002’,’D’,0,250,250)
-- NEW
INSERT Movimientos values(‘1951112209’,’04/05/2003’,’D’,185,100,285)

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 361

INSERT Movimientos values(‘1951112209’,’05/05/2003’,’D’,285,500,785)


INSERT Movimientos values(‘1951112209’,’10/01/2003’,’D’,785,400,1185)
INSERT Movimientos values(‘1961111218’,’12/02/2003’,’D’,250,500,750)
INSERT Movimientos values(‘1961111218’,’14/04/2003’,’D’,750,200,950)
INSERT Movimientos values(‘1972233409’,’10/05/2003’,’D’,500,410,910)
INSERT Movimientos values(‘1972233409’,’09/06/2003’,’D’,910,125,1035)
INSERT Movimientos values(‘1972233409’,’17/07/2003’,’D’,1035,250,1285)
INSERT Movimientos values(‘1972223318’,’17/01/2004’,’D’,250,200,450)
INSERT Movimientos values(‘1972223318’,’11/10/2004’,’D’,450,300,750)
INSERT Movimientos values(‘1972223318’,’01/01/2004’,’D’,750,500,1250)
INSERT Movimientos values(‘1972223318’,’05/03/2004’,’R’,1250,400,850)
INSERT Movimientos values(‘1983344509’,’28/03/2004’,’D’,125,700,825)
INSERT Movimientos values(‘1983344509’,’09/05/2004’,’D’,825,500,1325)
INSERT Movimientos values(‘1983344509’,’25/07/2004’,’R’,1325,300,1025)
INSERT Movimientos values(‘1993334418’,’02/08/2004’,’D’,250,500,750)
INSERT Movimientos values(‘1993334418’,’18/09/2004’,’D’,750,800,1550)
INSERT Movimientos values(‘1993334418’,’21/10/2004’,’R’,1550,500,1050)
INSERT Movimientos values(‘1994455609’,’10/01/2005’,’D’,150,350,500)
INSERT Movimientos values(‘1994455609’,’14/02/2005’,’D’,500,500,1000)
INSERT Movimientos values(‘1994455609’,’12/04/2005’,’D’,1000,350,1350)
INSERT Movimientos values(‘2004445518’,’08/02/2005’,’D’,275,525,800)
INSERT Movimientos values(‘2004445518’,’17/02/2005’,’D’,800,550,1350)
INSERT Movimientos values(‘2004445518’,’22/02/2005’,’D’,1350,500,1850)
INSERT Movimientos values(‘2004445518’,’01/03/2005’,’R’,1850,200,1650)
INSERT Movimientos values(‘2005566709’,’15/04/2005’,’D’,200,200,400)
INSERT Movimientos values(‘2005566709’,’10/09/2005’,’D’,400,700,1100)
INSERT Movimientos values(‘2015556618’,’17/02/2005’,’D’,250,850,1100)
INSERT Movimientos values(‘2015556618’,’27/02/2005’,’D’,1100,400,1500)
INSERT Movimientos values(‘2015556618’,’14/10/2005’,’R’,1500,600,900)
INSERT Movimientos values(‘2026667709’,’08/01/2006’,’R’,700,300,400)
INSERT Movimientos values(‘2026667709’,’15/02/2006’,’D’,520,500,1020)
INSERT Movimientos values(‘2027788918’,’27/06/2006’,’D’,1020,580,1600)
INSERT Movimientos values(‘2027788918’,’04/08/2006’,’D’,1600,800,2400)
INSERT Movimientos values(‘2027788918’,’17/11/2006’,’R’,2400,700,1700)
GO
SET DATEFORMAT DMY
GO

CREATE PROC usp_verificarCuenta


@num_cta char(10),
@clave char(4)
as
select c.cli_codigo,cli_nombre,cli_telefono,num_cta,desc_cta,saldo
from cliente c,cuentas ct,tipo_cuentas tc
where c.cli_codigo = ct.cli_codigo and ct.cod_cta = tc.cod_cta
and num_cta = @num_cta and clave = @clave
go

CREATE PROC usp_ListarMovimientos


@num_cta char(10)
as
select num_mov,num_cta,convert(char(10),fecha,103) AS fecha,
(CASE (tip_mov)

www.detodoprogramacion.org
362 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

WHEN ‘D’ THEN ‘DEPOSITO’


ELSE ‘RETIRO’
END) AS tipo,saldo_ant,monto,saldo_nue
from movimientos where num_cta = @num_cta
go

CREATE PROC usp_ActualizarSaldo


@num_cta char(10),
@monto numeric(10,2),
@tipo char(1)
AS
Declare @saldoA numeric(10,2),@saldoN numeric(10,2)
set @saldoA = (Select saldo from CUENTAS where num_cta = @num_cta )
if (@tipo = ‘D’)
set @saldoN = @saldoA + @monto
else
set @saldoN = @saldoA - @monto
INSERT INTO MOVIMIENTOS VALUES (@num_cta,getdate(),@tipo,@saldoA,@monto,@saldoN)
UPDATE CUENTAS SET saldo = @saldoN WHERE num_cta = @num_cta
SELECT ‘1’
GO

SELECT ‘BDBANCOMILA CREADA’ AS ‘:: MILA ::’


GO

Creación de la Capa de Datos, EnƟdad y Negocio


Ahora vamos a trabajar con las clases que hacen referencia a las capas. El gráfico siguiente nos muestra
cómo debe quedar al final de la creación; para ello, dentro de las clases crearemos carpetas para la
subdivisión de datos:

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 363

Para esto vamos a empezar a crear con cada una de las clases:

Clase C_Datos

Carpeta Cliente

Archivo Cls_D_Clientes.cs
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.ApplicationBlocks.Data;
using System.Data;
using System.Configuration ;
using C_Entidad.Cliente;
namespace C_Datos.Cliente
{
public class Cls_D_Cliente
{
private static string conexion = ConfigurationManager.
ConnectionStrings[“conex”].ConnectionString;
public static DataTable ListarDistritos()
{ return SqlHelper.ExecuteDataTable (conexion, “usp_ListarDistritos”);
}
public static DataTable ListarProvincia()
{ return SqlHelper.ExecuteDataTable(conexion, “usp_ListarProvincia”);
}
public static DataTable ListarDistritosXProv(Cls_E_Cliente objE)
{ return SqlHelper.ExecuteDataTable(conexion, “usp_
ListarDistritosXProv”,objE.Prov_id);
}
public static DataTable GenerarCodCliente()
{ return SqlHelper.ExecuteDataTable(conexion, “usp_GenerarCodCliente”);
}
public static DataTable ListarCLientes()
{ return SqlHelper.ExecuteDataTable(conexion, “usp_ListarCLientes”);
}
public static DataTable ConsultarDatosCliente(Cls_E_Cliente objE)
{ return SqlHelper.ExecuteDataTable(conexion, “usp_
ConsultarDatosCliente”,objE.Cliente_id);

www.detodoprogramacion.org
364 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

}
public static DataTable ActualizarCliente(Cls_E_Cliente objE)
{ return SqlHelper.ExecuteDataTable(conexion, “usp_ActualizarCliente”,
objE.Cliente_id,objE.Cli_nombre,objE.Cli_apellidos,objE.Cli_fechanac,objE.Cli_
sexo,objE.Cli_dni,objE.Cli_direccion,objE.Distrito_id, objE.Cli_telefono,objE.
Cli_estadocivil, objE.Cli_email, objE.Cli_password, objE.Cli_nrocuenta,objE.Cli_
estado,objE.Tipo );
}
public static DataTable ValidarCliente(Cls_E_Cliente objE)
{ return SqlHelper.ExecuteDataTable(conexion, “usp_ValidarCliente”,
objE.Cli_email, objE.Cli_password);
}
public static DataTable BuscarCliente(Cls_E_Cliente objE)
{ return SqlHelper.ExecuteDataTable(conexion, “usp_BuscarCliente”, objE.
Cli_nombre, objE.Cli_apellidos,objE.Distrito_id);
}
public static DataTable DeshabilitarCliente(Cls_E_Cliente objE)
{ return SqlHelper.ExecuteDataTable(conexion, “usp_DeshabilitarCliente”,
objE.Cliente_id);
}
}
}

Archivo Cls_D_Cuenta.cs
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.ApplicationBlocks.Data;
using System.Data;
using System.Configuration;
using C_Entidad.Cliente;
namespace C_Datos.Cliente
{
public class Cls_D_Cuenta
{
private static string conexion = ConfigurationManager.
ConnectionStrings[“conexBanco”].ConnectionString;
public static DataTable verificarCuenta(Cls_E_Cuenta objE)
{ return SqlHelper.ExecuteDataTable(conexion, “usp_verificarCuenta”,objE.
Num_cta,objE.Clave);
}
public static DataTable ListarMovimientos(Cls_E_Cuenta objE)
{ return SqlHelper.ExecuteDataTable(conexion, “usp_ListarMovimientos”,
objE.Num_cta);
}
public static DataTable ActualizarSaldo(Cls_E_Cuenta objE)
{ return SqlHelper.ExecuteDataTable(conexion, “usp_ActualizarSaldo”, objE.
Num_cta, objE.Monto,objE.Tipo);
}
}
}

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 365

Carpeta Empleado

Archivo Cls_D_Empleado.cs
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.ApplicationBlocks.Data;
using System.Data;
using System.Configuration;
using C_Entidad.Empleado;
namespace C_Datos.Empleado
{
public class Cls_D_Empleado
{ private static string conexion = ConfigurationManager.
ConnectionStrings[“conex”].ConnectionString;
public static DataTable GenerarCodTrabajador()
{ return SqlHelper.ExecuteDataTable(conexion, “usp_
GenerarCodTrabajador”);
}
public static DataTable ListarDistritos()
{ return SqlHelper.ExecuteDataTable(conexion, “usp_ListarDistritos”);
}
public static DataTable ListarProvincia()
{ return SqlHelper.ExecuteDataTable(conexion, “usp_ListarProvincia”);
}
public static DataTable ListarDistritosXProv(Cls_E_Empleado objE)
{ return SqlHelper.ExecuteDataTable(conexion, “usp_ListarDistritosXProv”,
objE.Prov_id);
}
public static DataTable ListarCargo()
{ return SqlHelper.ExecuteDataTable(conexion, “usp_ListarCargo”);
}
public static DataTable ListarTrabajadores()
{
return SqlHelper.ExecuteDataTable(conexion, “usp_ListarTrabajadores”);
}
public static DataTable ActualizarTrabajador(Cls_E_Empleado objE )
{ return SqlHelper.ExecuteDataTable(conexion, “usp_ActualizarTrabajador”,
objE.Trabajador_id, objE.Nombre, objE.Ape_paterno, objE.Ape_materno, objE.Fecha_
nac, objE.Sexo, objE.Direccion, objE.Distrito_id, objE.Telefono, objE.Email, objE.
Password, objE.Cargo_id, objE.Estado, objE.Tipo);
}
public static DataTable ValidarTrabajador(Cls_E_Empleado objE)
{
return SqlHelper.ExecuteDataTable(conexion, “usp_ValidarTrabajador”, objE.
Email, objE.Password);
}
public static DataTable BuscarTrabajador(Cls_E_Empleado objE)
{ return SqlHelper.ExecuteDataTable(conexion, “usp_BuscarTrabajador”,
objE.Trabajador_id);
}
public static DataTable DelTrabajador(Cls_E_Empleado objE)

www.detodoprogramacion.org
366 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

{ return SqlHelper.ExecuteDataTable(conexion, “usp_DelTrabajador”, objE.


Trabajador_id);
}
}
}

Carpeta Producto
Archivo Cls_D_Producto.cs
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.ApplicationBlocks.Data;
using System.Data;
using System.Configuration;
using C_Entidad.Producto;

namespace C_Datos.Producto
{
public class Cls_D_Producto
{
private static string conexion = ConfigurationManager.
ConnectionStrings[“conex”].ConnectionString;
public static DataTable GenerarCodProducto()
{ return SqlHelper.ExecuteDataTable(conexion, “usp_GenerarCodProducto”);
}
public static DataTable ListarMarca()
{ return SqlHelper.ExecuteDataTable(conexion, “usp_ListarMarca”);
}
public static DataTable ListarCategorias()
{ return SqlHelper.ExecuteDataTable(conexion, “usp_ListarCategorias”);
}
public static DataTable ActualizarProducto(Cls_E_Producto objE)
{ return SqlHelper.ExecuteDataTable(conexion, “usp_ActualizarProducto”,
objE.Producto_id,objE.Nom_producto,objE.Precio,objE.Stock ,objE.Stock_min ,objE.
Fecha_ing,objE.Categoria_id,objE.Marca_id,objE.Tipo);
}
public static DataTable ListarProductos()
{ return SqlHelper.ExecuteDataTable(conexion, “usp_ListarProductos”);
}
public static DataTable BuscarProducto(Cls_E_Producto objE)
{ return SqlHelper.ExecuteDataTable(conexion, “usp_BuscarProducto”,objE.
Producto_id);
}
public static DataTable ActualizarStock(Cls_E_Producto objE)
{
return SqlHelper.ExecuteDataTable(conexion, “usp_ActualizarStock”, objE.
Producto_id,objE.Stock );
}
public static DataTable VerificarStock(Cls_E_Producto objE)
{ return SqlHelper.ExecuteDataTable(conexion, “usp_VerificarStock”, objE.
Producto_id, objE.Stock);
}

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 367

public static DataTable ListadoProductosXCategoria(Cls_E_Producto objE)


{
return SqlHelper.ExecuteDataTable(conexion, “uspListadoProductosXCategoria”,
objE.Nom_Categoria);
}
public static DataTable ListadoProductosCategoria1()
{ return SqlHelper.ExecuteDataTable(conexion,
“uspListadoProductosCategoria1”);
}
public static DataTable ListadoProductosCategoria2()
{ return SqlHelper.ExecuteDataTable(conexion,
“uspListadoProductosCategoria2”);
}
public static DataTable ListadoProductosCategoria3()
{ return SqlHelper.ExecuteDataTable(conexion,
“uspListadoProductosCategoria3”);
}
public static DataTable ListadoProductosCategoria4()
{ return SqlHelper.ExecuteDataTable(conexion,
“uspListadoProductosCategoria4”);
}
public static DataTable ListadoProductosCategoria5()
{ return SqlHelper.ExecuteDataTable(conexion,
“uspListadoProductosCategoria5”);
}

}
}

Carpeta RegistroC

Cls_D_Registro.cs
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.ApplicationBlocks.Data;
using System.Data;
using System.Configuration;
using C_Entidad.RegistroC;

namespace C_Datos.RegistroC
{
public class Cls_D_RegistroC
{ private static string conexion = ConfigurationManager.
ConnectionStrings[“conex”].ConnectionString;
public static DataTable GuardarRegistro_Cab(Cls_E_RegistroC objE)
{return SqlHelper.ExecuteDataTable(conexion, “usp_GuardarRegistro_Cab”,
objE.Cliente_id, objE.Fecha_reg, objE.Descuento_id, objE.Total);
}
public static DataTable GuardarRegistro_Det(Cls_E_RegistroC objE)
{ return SqlHelper.ExecuteDataTable(conexion, “usp_GuardarRegistro_Det”,
objE.Registro_id, objE.Producto_id, objE.Cantidad, objE.Precio);

www.detodoprogramacion.org
368 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

}
public static DataTable ConsultarDescuento(Cls_E_RegistroC objE)
{ return SqlHelper.ExecuteDataTable(conexion, “usp_ConsultarDescuento”,
objE.Cantidad );
}

public static DataTable BuscarRegistro_Cab(Cls_E_RegistroC objE)


{
return SqlHelper.ExecuteDataTable(conexion, “usp_BuscarRegistro_Cab”, objE.
Cliente_id , objE.Fecha_I,objE.Fecha_F );
}
public static DataTable BuscarRegistro_Det(Cls_E_RegistroC objE)
{ return SqlHelper.ExecuteDataTable(conexion, “usp_BuscarRegistro_Det”,
objE.Registro_id);
}
public static DataTable ListarCLientes()
{ return SqlHelper.ExecuteDataTable(conexion, “usp_ListarCLientes”);
}
public static DataTable ActualizarStock(Cls_E_RegistroC objE)
{
return SqlHelper.ExecuteDataTable(conexion, “usp_ActualizarStock”, objE.
Producto_id ,objE.Cantidad);
}
}
}

Clase C_EnƟdad
Ahora vamos a ver la creación de la clase En dad.

Ya en el ejemplo anterior de construcción de clase, hemos trabajo por completo (todas sus carpetas)
en la clase datos, en esta clase sólo trabajaremos con la primera carpeta (los archivos CLs_E_Clientes,
Cls_E_Cuentas.cs ).

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 369

Carpeta Cliente

Archivo Cls_E_Ciente.cs

using System;
using System.Collections.Generic;
using System.Text;
namespace C_Entidad.Cliente
{
public class Cls_E_Cliente
{ private string cliente_id;
public string Cliente_id
{ get { return cliente_id; }
set { cliente_id = value; }
}
private string cli_nombre;
public string Cli_nombre
{ get { return cli_nombre; }
set { cli_nombre = value; }
}
private string cli_apellidos;
public string Cli_apellidos
{ get { return cli_apellidos; }
set { cli_apellidos = value; }
}
private string cli_fechanac;
public string Cli_fechanac
{ get { return cli_fechanac; }
set { cli_fechanac = value; }
}
private string cli_sexo;
public string Cli_sexo
{ get { return cli_sexo; }
set { cli_sexo = value; }
}
private string cli_dni;
public string Cli_dni
{ get { return cli_dni; }
set { cli_dni = value; }
}
private string cli_direccion;
public string Cli_direccion
{ get { return cli_direccion; }
set { cli_direccion = value; }
}
private string prov_id;
public string Prov_id
{ get { return prov_id; }
set { prov_id = value; }
}
private string distrito_id;
public string Distrito_id

www.detodoprogramacion.org
370 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

{ get { return distrito_id; }


set { distrito_id = value; }
}
private string cli_telefono;
public string Cli_telefono
{ get { return cli_telefono; }
set { cli_telefono = value; }
}
private string cli_estadocivil;
public string Cli_estadocivil
{ get { return cli_estadocivil; }
set { cli_estadocivil = value; }
}
private string cli_email;
public string Cli_email
{ get { return cli_email; }
set { cli_email = value; }
}
private string cli_password;
public string Cli_password
{ get { return cli_password; }
set { cli_password = value; }
}
private string cli_nrocuenta;
public string Cli_nrocuenta
{ get { return cli_nrocuenta; }
set { cli_nrocuenta = value; }
}
private string cli_estado;
public string Cli_estado
{ get { return cli_estado; }
set { cli_estado = value; }
}
private int tipo;
public int Tipo
{ get { return tipo; }
set { tipo = value; }
}
}
}

Archivo Cls_E_Cuenta.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace C_Entidad.Cliente
{
public class Cls_E_Cuenta
{
private string num_cta;
public string Num_cta

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 371

{ get { return num_cta; }


set { num_cta = value; }
}
private string clave;
public string Clave
{
get { return clave; }
set { clave = value; }
}
private double monto;
public double Monto
{ get { return monto; }
set { monto = value; }
}
private string tipo;
public string Tipo
{
get { return tipo; }
set { tipo = value; }
}

}
}

Para poder conƟnuar y terminarlo, todo el script se encuentra en el proyecto, el cual está en una
carpeta que se llama Capítulo III.

Clase C_Negocio
Ahora veremos la creación de la clase Negocio, en la cual se encuentran todos los procesos con
respecto al negocio de la empresa.

Para entender esta clase trabajaremos en la carpeta cliente, la cual consta de dos archivos, los cuales
enen los siguientes dos archivos:

www.detodoprogramacion.org
372 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Carpeta Clientes

Archivos Cls_N_Cliente.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using C_Datos.Cliente;
using C_Entidad.Cliente;
namespace C_Negocio.Cliente
{
public class Cls_N_Cliente
{
public static DataTable ListarDistritosN()
{ return Cls_D_Cliente.ListarDistritos();
}
public static DataTable ListarProvinciaN()
{ return Cls_D_Cliente.ListarProvincia(); }
public static DataTable ListarDistritosXProvN(Cls_E_Cliente objE)
{ return Cls_D_Cliente.ListarDistritosXProv(objE); }
public static DataTable GenerarCodClienteN()
{ return Cls_D_Cliente.GenerarCodCliente(); }
public static DataTable ListarCLientesN()
{ return Cls_D_Cliente.ListarCLientes(); }
public static DataTable ConsultarDatosClienteN(Cls_E_Cliente objE)
{ return Cls_D_Cliente.ConsultarDatosCliente(objE); }
public static DataTable ActualizarClienteN(Cls_E_Cliente objE)
{ return Cls_D_Cliente.ActualizarCliente(objE); }
public static DataTable ValidarClienteN(Cls_E_Cliente objE)
{ return Cls_D_Cliente.ValidarCliente(objE); }
public static DataTable BuscarClienteN(Cls_E_Cliente objE)
{ return Cls_D_Cliente.BuscarCliente(objE); }
public static DataTable DeshabilitarClienteN(Cls_E_Cliente objE)
{ return Cls_D_Cliente.DeshabilitarCliente(objE);
}
}
}

Archivo Cls_N_Cuenta.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using C_Datos.Cliente;
using C_Entidad.Cliente;
namespace C_Negocio.Cliente
{
public class Cls_N_Cuenta
{
public static DataTable verificarCuentaN(Cls_E_Cuenta objE)

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 373

{
return Cls_D_Cuenta.verificarCuenta(objE);
}
public static DataTable ListarMovimientosN(Cls_E_Cuenta objE)
{
return Cls_D_Cuenta.ListarMovimientos(objE);
}
public static DataTable ActualizarSaldoN(Cls_E_Cuenta objE)
{
return Cls_D_Cuenta.ActualizarSaldo(objE);
}
}
}

Las clases que faltan desarrollar se encuentran en el CD, en la carpeta Capítulo III, pero sería
mejor que el lector intentara resolverlo tomando como ejemplo la clase datos que ha sido
desarrollada completamente.

Ahora veamos el control web Config. Sólo hemos seleccionado la parte que deseamos que puedan ver,
donde hace las referencias y la cadena de conexión.

Donde hemos seleccionado las partes que nos interesan como el Connec on String, en donde están
todos los parámetros de la conexión a la base de datos, y luego hemos seleccionado la parte de las
referencias con las cuales cuenta la aplicación.

Luego de haber construido las clases y ejecutado el script de la base datos, también de haber instalado
el AJAX, ahora tendremos que desarrollar las páginas principales.

La primera parte es la creación de los Master Page, para lo cual hemos creado los siguientes:
Administrador.master, contenido.master y principal.master. U lizaremos como ejemplo el Master
Page de la Página Principal.

www.detodoprogramacion.org
374 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Principal.master

El cual ene el siguiente código HTML, que nos permite darle este diseño a la página (figura anterior).
Si queremos apreciar todo el código lo podemos encontrar en el CD.

Ahora veamos el script que hemos generado en los eventos de dicho Master Page.
using C_Negocio.Empleado ;
using C_Entidad.Empleado ;
using C_Negocio.Cliente;
using C_Entidad.Cliente;
public partial class Principal : System.Web.UI.MasterPage
{ Cls_E_Empleado objE = new Cls_E_Empleado();
Cls_E_Cliente objEC = new Cls_E_Cliente();
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{ lblFecha.Text = DateTime.Now.Date.ToLongDateString();
if (Session[“Cliente”] == null)
{ pnlCliente.Visible = false;
pnlLogin.Visible = true;
UserName.Text = “”;
Password.Text = “”;
}

else if (Session[“Cliente”].ToString().Trim() == “”)


{ pnlCliente.Visible = false;

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 375

pnlLogin.Visible = true;
UserName.Text = “”;
Password.Text = “”;
}
else
{ pnlCliente.Visible = true;
pnlLogin.Visible = false;
lblCliente.Text = Session[“Cliente”].ToString();
}
}
}
protected void LoginButton_Click(object sender, EventArgs e)
{ if ((UserName.Text.Trim() == “” ) || (Password.Text.Trim () ==””) )
{ System.Windows.Forms.MessageBox.Show (“Ingrese un Usuario o Password”);
return ;
}
Session[“cliente_id”] = null;
Session[“Trabajador”] = null;
Session[“Cliente”] = null;
Session[“saldo_Cta”] = null;
Session[“nro_cuenta”] = null;
string strUsuario = UserName.Text.Trim();
string strPasswd = Password.Text.Trim();
pnlLogin.Visible = true;
pnlCliente.Visible = false;
if (rbCual.SelectedIndex == 1)
{ //ADMINITRADOR
objE.Email = strUsuario;
objE.Password = strPasswd;
DataTable tblTRab = Cls_N_Empleado.ValidarTrabajadorN(objE);
if (tblTRab.Rows.Count > 0)
{ Session[“Trabajador”] = tblTRab.Rows[0][1].ToString();
Response.Redirect(“./Empleado/MenuCliente.aspx”);
}
else
{ System.Windows.Forms.MessageBox.Show(“Usuario o Clave es
incorrecto, intente de nuevo”);
}
}
else
{ //CLIENTE
objEC.Cli_email = strUsuario;
objEC.Cli_password = strPasswd;
DataTable tblU = Cls_N_Cliente.ValidarClienteN(objEC);
if (tblU.Rows.Count > 0)
{ pnlLogin.Visible = false;
pnlCliente.Visible = true;
Session[“Cliente”] = tblU.Rows[0][1].ToString() + ‘ ‘ + tblU.
Rows[0][2].ToString();
lblCliente.Text = Session[“Cliente”].ToString();
Session[“cliente_id”] = tblU.Rows[0][0].ToString(); }
else

www.detodoprogramacion.org
376 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

{ System.Windows.Forms.MessageBox.Show(“Usuario o Pasword
Incorreto”);
}
}
}

protected void btnSalir_Click(object sender, EventArgs e)


{ if (System.Windows.Forms.MessageBox.Show(“Deseas cerra la sesion ?”,
“MILA S.A”, System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.
MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
{ pnlCliente.Visible = false;
pnlLogin.Visible = true;
Session[“Cliente”] = null;
Session[“cliente_id”] = null;
Session[“saldo_Cta”] = null;
Session[“nro_cuenta”] = null;
Session[“carrito”] = null;
Session.Clear();
Session.Abandon();
Response.Redirect(“Default.aspx”);
}
}

protected void LinkButton1_Click(object sender, EventArgs e)


{
Response.Redirect(“./Cliente/Registrarse.aspx”);
}
}

Ahora vamos a crear la ventana Default.aspx, que u liza el master page de la página Principal.master

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 377

El cual contará con el siguiente código HTML en su Source:


<%@ Page Language=”C#” MasterPageFile=”~/Principal.master” AutoEventWireup=”true”
CodeFile=”Default.aspx.cs” Inherits=”_Default” %>

<asp:Content ContentPlaceHolderID=”cphContenido” runat=”server”></asp:Content>

Ahora veamos el código que hemos producido en los eventos del WebForm:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ if (!Page.IsPostBack)
{
if (Session[“Cliente”] == null)
{ ((Panel)Master.FindControl(“pnlCliente”)).Visible = false;
((Panel)Master.FindControl(“pnlLogin”)).Visible = true;
else if (Session[“Cliente”].ToString().Trim() == “”)
{ ((Panel)Master.FindControl(“pnlCliente”)).Visible = false;
((Panel)Master.FindControl(“pnlLogin”)).Visible = true;
}
else
{ ((Panel)Master.FindControl(“pnlCliente”)).Visible = true;
((Panel)Master.FindControl(“pnlLogin”)).Visible = false;
}
}
}
}

Inmediatamente, veamos la estructura que se ha manejado en lo que se refiere a la programación


principal:

Carpeta Clientes.- En el cual vamos a crear mater page, que me va a servir como base para la creación
de las otras páginas; en esta carpeta tendremos todas las páginas que hacen referencia al manejo de
los clientes.

www.detodoprogramacion.org
378 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Carpeta Empleado.- Se encarga de mostrarnos las diferentes opciones


a través de los Menú, ya sea para productos, clientes, registros y
reportes.

Carpetas Flash e Imágenes.- En estas carpetas manejamos los archivos donde se encuentran los flash
que u lizamos en la aplicación; de otro lado, también almacenamos y ordenamos todas las imágenes
que u lizamos en el carrito de compra.

Carpeta Logos.- En esta carpeta vamos a guardar el Logo de la Empresa (en


este caso).

Carpeta Productos.- Aquí manejamos todas las páginas que


encierran el manejo de los productos; existen dos master page
que nos permite como base para las demás páginas.

Carpeta Reportes.- Se almacenan todos los reportes que se han


desarrollado para ser u lizados desde la aplicación usando el
Cristal Report (para los productos, clientes, trabajadores, etc.).

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 379

Carpeta Script.- Se enen todos los archivos que manejan los es los propios que se u lizan en el
formulario.

Luego de realizar una descripción genérica de la estructura de los archivos que hemos u lizado en la
aplicación, ya podemos tener una visualización estructural de la aplicación; hemos puesto sólo el script
de lás paginas principales, como referencia a todo lo que se desea realizar. Todo el aplica vo completo
lo puede encontrar en el CD, en el Capítulo IV.

Ahora vamos a describir opera vamente cómo trabaja la aplicación.

GUÍA DE REFERENCIA SOBRE LA APLICACIÓN DEL CARRITO DE COMPRA


Vamos a describir cómo se instala, cómo trabaja la aplicación del Carrito de Compra; empezaremos
desde la instalación de la base de datos hasta llegar al manejo del aplica vo.

Antes de ingresar al Carrito de Compra, la PC debe contar con los siguientes requisitos:
• Debe tener instalado el programa Microso Visual Studio 2005 (o versiones posteriores), el
cual permi rá abrir la aplicación.

www.detodoprogramacion.org
380 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

• Debe tener instalado el programa Microso SQL Server 2008, que permi rá ejecutar las bases
de datos (BD_BANCOMILA.sql - BD_MILA.sql).

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 381

Abriremos los dos archivos de la manera que se muestra la imagen; desde el explorador de
Windows nos ubicamos encima del archivo y damos clic en el botón derecho, y buscamos el editor
más conveniente:

Vemos cómo el script se ubica dentro del SQL Server, y desde ahí lo vamos a ejecutar.

www.detodoprogramacion.org
382 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

INSTALACIÓN DE AJAX
Ahora vamos a realizar la instalación de los controles de Extensiones AJAX.

Debe instalarse el ASP.AJAX para correr la aplicación correctamente.

Luego, vamos a aceptar el contrato para poder con nuar.

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 383

Seguimos con la instalación del AJAX.

Luego de haber ejecutado todas las ventanas mas completar la instalación del AJAX:

www.detodoprogramacion.org
384 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Ahora empezamos a ver cómo funciona el aplica vo.

1. Ingresamos a la página Web ‘Mila’ (página Web de ventas de ropa tejida a mano).

2. Al hacer clic en el menú ‘Quiénes Somos’ se podrá visualizar la información acerca de la Empresa
‘Mila’.

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 385

3. Al hacer clic en el menú ‘Productos’, se visualizará un listado de todos los productos por categoría
que ofrece dicha empresa.

4. Al hacer clic en el menú ‘Carrito’, aparecerá un mensaje que describirá que antes de ingresar al
carrito deberá loguearse como cliente de la empresa.

4.1. Si dispone de una cuenta creada, sólo deberá ingresar el login y el password respec vo como
‘Cliente’, haciendo un clic en el primer radiobu on.

www.detodoprogramacion.org
386 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

4.2. Al hacer clic en el botón ‘Entrar’, ingresará inmediatamente a su cuenta y se le mostrará un


mensaje de bienvenida con el listado de los productos.

4.3 El cliente visualizará el listado de los productos.

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 387

4.4 El cliente ahora podrá ingresar al ‘Carrito’, para así hacer sus pedidos.

4.5 El cliente podrá elegir el producto que desee y la can dad que requiera.

www.detodoprogramacion.org
388 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

4.6 El producto y la can dad elegida por el cliente serán añadidos automá camente al carito de
compras, en donde nos mostrará las opciones de ‘Eliminar Producto’, ‘Seguir comprando’,
‘Cancelar la compra’, ‘Recalcular’ y ‘Realizar la compra’.

4.7 Al elegir la opción ‘Seguir comprando’, nos mostrará nuevamente el listado de los productos
para elegir otro y añadirlo nuevamente al carrito de compras.

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 389

4.8 Al agregar el nuevo producto al carrito de compras, nos mostrará el listado del carrito en
donde estarán los productos elegidos con las can dades requeridas por el cliente.

4.9 Al hacer un clic en el checkbox y en el botón Eliminar Productos, el producto será eliminado
automá camente del carrito de compras.

www.detodoprogramacion.org
390 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

4.10 Luego se mostrará el listado de los productos que siguen en el carrito de compras.

4.11 Además, el cliente podrá modificar la can dad de cada producto elegido.

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 391

4.12 Al modificar la can dad de productos y presionar el botón ‘Recalcular’, el total será modificado
automá camente.

4.13 Al presionar el botón ‘Realizar Compra’ mostrará al cliente un reporte de los productos que
solicitó.

www.detodoprogramacion.org
392 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

4.14 Aparecerá un mensaje para que el cliente pueda ingresar a su cuenta y verificar su saldo antes
de proceder con la consolidación de la compra.

4.15 La página automá camente mostrará al cliente un formulario donde tendrá que acceder a su
cuenta ingresando la clave de la misma.

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 393

4.16 El cliente debe ingresar la clave de su cuenta haciendo clic en los números que aparecen en un
recuadro al costado del login.

4.17 El cliente, al acceder a su cuenta, podrá observar los datos de su cuenta y su saldo disponible.

www.detodoprogramacion.org
394 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

4.18 Al hacer clic en el botón ‘Ver Movimientos’, el cliente podrá observar los movimientos y saldos
de su cuenta.

4.19 Al hacer clic en el botón ‘Ir al Carrito de Compras’, podrá observar el carrito de compras con
el listado de los productos seleccionados.

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 395

4.20 Al hacer clic en el botón ‘Aceptar Compra’, se mostrará un mensaje de que la compra se realizó
con éxito.

4.21 El cliente después de realizar la compra puede cerrar su sesión haciendo clic en el hipervínculo
‘Salir’, que se encuentra en la parte superior de la página; luego visualizará un mensaje de
confirmación de cierre de la sesión.

www.detodoprogramacion.org
396 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

4.22 Si el usuario no es un cliente de la empresa y quiere agregarse como cliente nuevo, tendrá que
registrarse haciendo un clic en el hipervínculo ‘No estás inscrito?’.

4.23 El cliente podrá visualizar un formulario donde deberá ingresar sus datos para registrarse.

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 397

4.24 El cliente deberá llenar todos los datos que solicite el formulario.

4.25 Al presionar el Botón ‘Registrarse’, y si los datos están bien ingresados, aparecerá un mensaje
de que el usuario ya está registrado y listo para loguearse; en caso contrario, aparecerá un
mensaje de que hay datos mal ingresados.

www.detodoprogramacion.org
398 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

4.26 En el login, el usuario ‘Administrador’ o trabajador puede loguearse haciendo clic al radiobu on
de ‘Administrador’.

4.27 Al ingresar a su sesión, el Administrador podrá visualizar el submenú conformado por: ‘Cliente’,
‘Producto’, ‘Empleado’, ‘Reportes’, ‘Ventas’ y ‘Salir’.

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 399

4.28 El administrador podrá realizar búsquedas de clientes por distritos.

4.29 El administrador podrá realizar búsquedas de clientes por nombre.

www.detodoprogramacion.org
400 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

4.30 El administrador podrá realizar búsquedas de clientes por apellidos.

4.31 En el menú ‘Producto’, el administrador podrá hacer el mantenimiento de la tabla productos,


agregando o haciendo clic en el hiperlink del gridview para hacer la modificación de los datos
del producto en línea.

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 401

www.detodoprogramacion.org
402 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

4.32 En el menú ‘Empleado’, el administrador podrá hacer el mantenimiento de la tabla empleados,


agregando o haciendo clic en el hiperlink del gridview para hacer la modificación de los datos
del empleado en línea.

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 403

www.detodoprogramacion.org
404 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

4.33 En el menú ‘Reportes’, el administrador podrá hacer la consulta respec va de los ‘Clientes’,
‘Trabajadores’, ‘Productos’ y ‘Registro de Compra’.

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 405

www.detodoprogramacion.org
406 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 407

www.detodoprogramacion.org
408 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

4.32 En el menú ‘Ventas’, el administrador podrá hacer la consulta respec va de las ventas por
cliente e intervalo de fechas.

www.detodoprogramacion.org
Capítulo 4: Aplicación del carrito de compra 409

5. En el menú principal ‘Contáctenos’, se mostrará al usuario un formulario donde podrá ingresar sus
datos y el mensaje, para luego reenviarle la respuesta correspondiente a su respec vo correo.

www.detodoprogramacion.org
CAPÍTULO

5 Aplicación de copias masivas


y manejo de imágenes

APLICATIVO DE COPIA MASIVA EN WEB – SQLBULKCOPY

QUÉ ES EL SQLBULKCOPY
Permite realizar eficazmente una carga masiva de una tabla de SQL Server con datos procedentes de
otro origen.

Microso SQL Server incluye una conocida u lidad de línea de comandos denominada bcp para mover
datos de una tabla a otra, ya sea en un solo servidor o entre servidores.

La clase SqlBulkCopy permite escribir soluciones de código administrado que proporcionan una
funcionalidad similar. Hay otras maneras de cargar datos en una tabla de SQL Server (por ejemplo:
instrucciones INSERT), pero el rendimiento de SqlBulkCopy es mucho mayor.

Este aplica vo nos permite realizar copias masivas de una tabla a otra, que realizamos vía web, así
como también crear una tabla, en caso no exista la tabla donde se desea copiar; adicionalmente, toma
los pos de datos del manejador de base de datos, permite que tú decidas cómo auten ficarte. Es un
aplica vo pequeño, pero con caracterís cas especiales que te van a gustar.

Empecemos trabajando con el formulario de ingreso, al cual le hemos puesto como nombre default2.
aspx

En esta Página de Ingreso, nosotros ingresamos el código, luego seleccionamos los pos de
auten ficación que existe; si fuera de po SQL, nos mostraría dos controles más para ingresar el
usuario y clave.

www.detodoprogramacion.org
412 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Bien, ahora veamos la codificación que hemos efectuado:


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using CAPA_NEGOCIO;
using Conexion = CAPA_NEGOCIO.ClsConexion;
using System.Data.SqlClient;
public partial class Default2 : System.Web.UI.Page
{
public Conexion cone = new Conexion();
ClsDatos objdat = new ClsDatos();
protected void Page_Load(object sender, EventArgs e)
{TxtServ.Focus(); }
protected void RBLaut_SelectedIndexChanged(object sender, EventArgs e)
{ try
{ }
catch (Exception ex) { String m = ex.Message; }
}
protected void Btn_Conectar_Click(object sender, EventArgs e)
{ SqlConnection cn = new SqlConnection(“Server=” + TxtServ.Text.Trim() +
“;Database=master;Integrated Security=SSPI”);
SqlDataAdapter da = new SqlDataAdapter(“select name from sys.
databases”,cn);
DataTable dt = new DataTable();
da.Fill(dt);
DDLbd.DataSource = dt; //objdat.Listar(“Prueba”);
DDLbd.DataTextField = “name”;
DDLbd.DataValueField = “name”;
DDLbd.DataBind();
Label3.Visible = true; DDLbd.Visible = true;
}
protected void LBtn_Ingresar_Click(object sender, EventArgs e)
{
cone.Servidor = TxtServ.Text.Trim();
if (RBLaut.SelectedValue == “S”)
{ cone.Autenticacion_Win = false;
cone.Usuario = Txtusu.Text.Trim();
cone.Password = Txtpass.Text.Trim();
}
else
{ cone.Autenticacion_Win = true;
}
cone.BD = DDLbd.SelectedValue;
Session[“conex”]= cone.EnviarC(cone);
Response.Write(cone.EnviarC(cone));
Response.Redirect(“Default3.aspx?bd=”+cone.BD);
}
}

www.detodoprogramacion.org
Capítulo 5: Aplicación de copias masivas y manejo de imágenes 413

En dicha página estamos invocando a la página Default3.aspx, la cual tendrá el siguiente diseño.

Ahora veamos la Página de Ingreso y de selección de tablas, llamada default3.aspx, desde el cual
podemos crear una nueva tabla o realizar la copia masiva.

Antes de ver la codificación, en el código HTML, debemos adicionar el llamado a los link de Agregar
Nueva Tabla, Regresar y Realizar Copia.
<tr>
<td colspan=”2” align=”left”>
<asp:HyperLink ID=”HyperLink2” runat=”server” NavigateUrl=”~/Default4.aspx”
style=”font-size: 12px; color: #99cc33; font-family: Verdana; text-decoration:
none” >
- Agregar Nueva Tabla -</asp:HyperLink></td>
<td style=”width: 100px” align=”right”>
<asp:HyperLink ID=”HyperLink1” runat=”server” NavigateUrl=”~/Default2.aspx”
style=”font-size: 12px; color: #990033; font-family: Verdana; text-decoration:
none”><- Regresar</asp:HyperLink></td>
</tr>
………………………………………….
…………………………………………….
<tr>
<td align=”right” colspan=”3”>
<asp:HyperLink ID=”HyperLink3” runat=”server” Font-Bold=”True”
NavigateUrl=”~/Default5.aspx”
Style=”font-size: 12px; color: #999966; font-family: Verdana; text-
decoration: none”>.-
*| <- Realizar Copia -> |*-.</asp:HyperLink></td>
</tr>

www.detodoprogramacion.org
414 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

La codificación que hemos realizado en los eventos es la siguiente:


using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using CAPA_NEGOCIO;
using Conexion = CAPA_NEGOCIO.ClsConexion;
using System.Data.SqlClient;
public partial class Default3 : System.Web.UI.Page
{
ClsDatos objdat = new ClsDatos();
String con;
protected void Page_Load(object sender, EventArgs e)
{ try
{ con = (String)Session[“conex”];
String bd = Request.QueryString[“bd”];
if (IsPostBack) return;
Label1.Text = “BD Seleccionada: “ + bd;
SqlConnection cn = new SqlConnection(con);
SqlDataAdapter da = new SqlDataAdapter(“select name from sys.tables”,
con);
DataTable dt = new DataTable();
da.Fill(dt);
DDLTablas.DataSource = dt; //objdat.ListarCn(cn, “Ver_Tablas”);
DDLTablas.DataTextField = “name”; DDLTablas.DataValueField =
“name”;
DDLTablas.DataBind();
}
catch (Exception ex) { String m = ex.Message; }
}
protected void DDLTablas_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
SqlConnection cn = new SqlConnection(con);
SqlDataAdapter da = new SqlDataAdapter(“select * from [“ + DDLTablas.
SelectedValue + “]” , con);
DataTable dt = new DataTable();
da.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
}
catch (Exception ex) { String m = ex.Message; }
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs
e)
{
try
{ SqlConnection cn = new SqlConnection(con);
SqlDataAdapter da = new SqlDataAdapter(“select * from [“ + DDLTablas.
SelectedValue + “]”, con);

www.detodoprogramacion.org
Capítulo 5: Aplicación de copias masivas y manejo de imágenes 415

DataTable dt = new DataTable();


da.Fill(dt);
GridView1.DataSource = dt;
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
}
catch (Exception ex) { String m = ex.Message; }
}
}

Ahora veremos la codificación del WebForm default4.aspx, agregar una nueva tabla a la base de datos.

La cual tendrá la siguiente codificación en los eventos de la página:


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using CAPA_NEGOCIO;
using Conexion = CAPA_NEGOCIO.ClsConexion;
using System.Data.SqlClient;
public partial class Default4 : System.Web.UI.Page
{ String con;
DataTable dt = new DataTable();
String sql;

www.detodoprogramacion.org
416 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Conexion obj = new Conexion();


protected void Page_Load(object sender, EventArgs e)
{
con = (String)Session[“conex”];
if (IsPostBack) { return; }
else
{
//CrearNTab();
String bd = Request.QueryString[“bd”];
}
}

DataTable Lista(String nom)


{
DataTable tbl = new DataTable();
SqlConnection cn = new SqlConnection(con);
SqlDataAdapter da = new SqlDataAdapter(nom, cn);
da.Fill(tbl);
return tbl;
}

protected void BtnCrear_Click(object sender, EventArgs e)


{
try
{
}
catch (Exception ex) { String m = ex.Message; }
}

protected void LBtnInsertar_Click(object sender, EventArgs e)


{
try
{
if (dt.Rows.Count == 0)
{
CrearNTab();
}
DataRow f = dt.NewRow();
dt.Rows.Add(f);
GridView1.DataSource = dt;
GridView1.EditIndex = GridView1.Rows.Count;
GridView1.DataBind();
((TextBox)GridView1.Rows[GridView1.Rows.Count - 1].Cells[0].
FindControl(“TextBox1”)).Focus();
DropDownList ddl = new DropDownList();
ddl = (DropDownList)GridView1.Rows[GridView1.Rows.Count - 1].Cells[1].
FindControl(“DropDownList1”);
ddl.DataSource = Lista(“select * from sys.types”);
ddl.DataTextField = “name”; ddl.DataValueField = “name”; ddl.
DataBind();
ViewState[“dt”] = dt;
}

www.detodoprogramacion.org
Capítulo 5: Aplicación de copias masivas y manejo de imágenes 417

catch (Exception ex) { String m = ex.Message; }


}

protected void GridView1_RowCancelingEdit(object sender,


GridViewCancelEditEventArgs e)
{
try
{
GridView1.EditIndex = -1;
GridView1.DataSource = (DataTable)ViewState[“dt”];
GridView1.DataBind();
}
catch (Exception ex) { String m = ex.Message; }
}

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)


{
try
{
DataRow r;
dt = (DataTable)ViewState[“dt”];
r = dt.NewRow();
String des, tipo; String can = “”;
DropDownList ddl = new DropDownList();
ddl = (DropDownList)GridView1.Rows[e.RowIndex].Cells[1].
FindControl(“DropDownList1”);
des = ((TextBox)GridView1.Rows[e.RowIndex].Cells[0].
FindControl(“TextBox1”)).Text;
tipo = (ddl.SelectedValue.ToString());
can = ((TextBox)GridView1.Rows[e.RowIndex].Cells[2].
FindControl(“TextBox3”)).Text;
r[“Des”] = des;
r[“Tipo”] = tipo;
r[“Can”] = can;
dt.Rows.Add(r);
if (r[“can”].ToString() == “”)
{
sql = ViewState[“sql”] + des + “ “ + tipo + “, “;
}
else
{
sql = ViewState[“sql”] + des + “ “ + tipo + “ (“ + can + “), “;
}
ViewState[“sql”] = sql;
Response.Write(sql);
GridView1.DataSource = dt;
GridView1.EditIndex = e.RowIndex +1; //GridView1.Rows.Count + 1;
GridView1.DataBind();
((TextBox)GridView1.Rows[GridView1.EditIndex].Cells[0].
FindControl(“TextBox1”)).Focus();
DropDownList ddl2 = new DropDownList();

www.detodoprogramacion.org
418 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

ddl2 = (DropDownList)GridView1.Rows[GridView1.EditIndex].Cells[1].
FindControl(“DropDownList1”);
ddl2.DataSource = Lista(“select * from sys.types”);
ddl2.DataTextField = “name”; ddl2.DataValueField = “name”; ddl2.
DataBind();
ViewState[“dt”] = dt;
}
catch (Exception ex) { String m = ex.Message; }
}

void CrearNTab()
{ dt.Columns.Add(“Des”, typeof(String));
dt.Columns.Add(“Tipo”, typeof(String));
dt.Columns.Add(“Can”, typeof(String));
}

int Ejecutar(String sql)


{ String cadena, sql2;
sql2 = sql.Substring(0, sql.Length - 1);
cadena = “create table “ + Txtnomtab.Text.Trim() + “ ( “ + sql2 + “)”;
SqlConnection cn = new SqlConnection(con);
SqlCommand cmd = new SqlCommand(cadena, cn);
cn.Open();
int f = cmd.ExecuteNonQuery();
cn.Close(); return f;
}

protected void GridView1_SelectedIndexChanging(object sender,


GridViewSelectEventArgs e)
{
Response.Write(e.NewSelectedIndex.ToString());
}

protected void BtnConfirmar_Click(object sender, EventArgs e)


{
sql = ViewState[“sql”].ToString();
Ejecutar(sql);
}

protected void GridView1_PageIndexChanging(object sender,


GridViewPageEventArgs e)
{
GridView1.DataSource = (DataTable)ViewState[“dt”];
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
}
}

www.detodoprogramacion.org
Capítulo 5: Aplicación de copias masivas y manejo de imágenes 419

Y ahora veamos el WebForm donde podemos realizar la copia masiva, que es el default5.aspx, en el
cual pondremos las dos tablas donde se desea copiar:

En el cual hemos codificado de la siguiente manera:


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using CAPA_NEGOCIO;
using Conexion = CAPA_NEGOCIO.ClsConexion;
using System.Data.SqlClient;
using System.Drawing;

public partial class Default5 : System.Web.UI.Page


{
String con;
Conexion obj = new Conexion();

protected void Page_Load(object sender, EventArgs e)


{
if (Session[“conex”] == null) { Response.Redirect(“Default2.aspx”); } else {
con = (String)Session[“conex”];
if (IsPostBack) return;
DropDownList1.DataSource = Lista(“select * from sys.tables”);

www.detodoprogramacion.org
420 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

DropDownList1.DataTextField = “name”;
DropDownList1.DataValueField = “object_id”;
DropDownList1.DataBind();

DropDownList2.DataSource = Lista(“select * from sys.tables”);


DropDownList2.DataTextField = “name”;
DropDownList2.DataValueField = “object_id”;
DropDownList2.DataBind();
}
}
DataTable Lista(String nom)
{
DataTable tbl = new DataTable();
SqlConnection cn = new SqlConnection(con);
SqlDataAdapter da = new SqlDataAdapter(nom, cn);
da.Fill(tbl);
return tbl;
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{ try
{
ViewState[“origen”] = “select * from [“ + DropDownList1.SelectedItem.
Text.ToString() + “]”;
GridView1.DataSource = Lista(“select * from [“ + DropDownList1.
SelectedItem.Text.ToString() + “]”);
GridView1.DataBind(); txttot.Text = “ “ + Lista(“select * from [“ +
DropDownList1.SelectedItem.Text.ToString() + “]”).Rows.Count; //GridView1.Rows.
Count;
}
catch (Exception ex) { String m = ex.Message; }
}

protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)


{ try
{ ViewState[“destino”] = “select * from [“ + DropDownList2.SelectedItem.
Text.ToString() + “]”;
GridView2.DataSource = Lista(“select * from [“ + DropDownList2.
SelectedItem.Text.ToString() + “]”);
GridView2.DataBind(); Lbltot1.Text = “ “ + Lista(“select * from [“ +
DropDownList2.SelectedItem.Text.ToString() + “]”).Rows.Count; //GridView2.Rows.
Count;
}
catch (Exception ex) { String m = ex.Message; }
}

protected void BtnCopia_Click(object sender, EventArgs e)


{ try
{ DataTable dtOr = new DataTable(); DataTable dtDes = new DataTable();
dtOr = Lista(“select * from sys.columns where object_id=’” +
DropDownList1.SelectedValue.ToString() + “’”);
dtDes = Lista(“select * from sys.columns where object_id=’” +
DropDownList2.SelectedValue.ToString() + “’”); //select name from sys.columns
where object_id=’901578250’

www.detodoprogramacion.org
Capítulo 5: Aplicación de copias masivas y manejo de imágenes 421

if (dtOr.Rows.Count == dtDes.Rows.Count)
{
int tip1 = 0, tip2 = 0, lon1 = 0, lon2 = 0; int contar = 0;
for (int i = 0; i < dtDes.Rows.Count; i++)
{ tip1 = Convert.ToInt32(dtOr.Rows[i][3]); lon1 = Convert.
ToInt32(dtOr.Rows[i][5]);
tip2 = Convert.ToInt32(dtDes.Rows[i][3]); lon2 = Convert.
ToInt32(dtDes.Rows[i][5]);
if (tip1 == tip2 && lon1 == lon2) { contar++; }
}
if (dtOr.Rows.Count == contar) { obj.Msg(“Datos comprobados
correctamente”); } else { obj.Msg(“Columnas incompatibles”); }
}
else { obj.Msg(“Columnas incompatibles”); }
SqlConnection oFuenteDatosConn = new SqlConnection(con);
oFuenteDatosConn.Open();
SqlCommand oCmd = new SqlCommand(“DELETE FROM “ + DropDownList2.
SelectedItem.Text.ToString() , oFuenteDatosConn);
oCmd.ExecuteNonQuery();
oCmd.CommandType = CommandType.Text;
oCmd.CommandText = ViewState[“origen”].ToString();
SqlDataReader oReader = oCmd.ExecuteReader();
SqlConnection oDestinoDatosConn = new SqlConnection(con);
oDestinoDatosConn.Open();
SqlBulkCopy oSqlBulkCopy_Clientes = new SqlBulkCopy(oDestinoDatosConn);
oSqlBulkCopy_Clientes.DestinationTableName = DropDownList2.
SelectedItem.Text.ToString();
oSqlBulkCopy_Clientes.WriteToServer(oReader);
oSqlBulkCopy_Clientes.Close(); oReader.Close();
oDestinoDatosConn.Close(); oFuenteDatosConn.Close();
oDestinoDatosConn = new SqlConnection(con);
SqlDataAdapter dataAdapter = new SqlDataAdapter(ViewState[“destino”].
ToString(),oDestinoDatosConn);
DataSet dsClientesCopia = new DataSet();
dataAdapter.Fill(dsClientesCopia, “CopiaClientes”);
GridView2.DataSource = dsClientesCopia;
GridView2.DataMember = “CopiaClientes”;
GridView2.DataBind(); dataAdapter.Dispose();
Lbltot1.Text = “ “ + dsClientesCopia.Tables[0].Rows.Count;
}
catch (Exception ex) { String m = ex.Message; }
}

void oSqlBulkCopy_Clientes_SqlRowsCopied(object sender, SqlRowsCopiedEventArgs


e)
{
obj.Msg(String.Format(“{0} Rows have been copied.”, e.RowsCopied.
ToString()));
}

#region [Funciones]
private DataTable SelectDataFromSource(String connectionString)
{

www.detodoprogramacion.org
422 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

DataTable data = new DataTable();


using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(ViewState[“origen”].ToString(),
connection);
command.CommandType = CommandType.Text;
connection.Open();
SqlDataReader reader = command.ExecuteReader();
data.Load(reader);
}
return data;
}

private void CopyDataToDestination(String connectionString, DataTable table)


{
SqlBulkCopyColumnMapping mapping1 =
new SqlBulkCopyColumnMapping(“OrderID”, “ID”);
SqlBulkCopyColumnMapping mapping2 =
new SqlBulkCopyColumnMapping(“ShipName”, “Name”);
SqlBulkCopyColumnMapping mapping3 =
new SqlBulkCopyColumnMapping(“ShipAddress”, “Address”);
SqlBulkCopyColumnMapping mapping4 =
new SqlBulkCopyColumnMapping(“ShipCity”, “City”);
SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString);
bulkCopy.BatchSize = 100;
bulkCopy.BulkCopyTimeout = 5;
bulkCopy.ColumnMappings.Add(mapping1);
bulkCopy.ColumnMappings.Add(mapping2);
bulkCopy.ColumnMappings.Add(mapping3);
bulkCopy.ColumnMappings.Add(mapping4);
bulkCopy.DestinationTableName = “MyData”;
bulkCopy.NotifyAfter = 200;
bulkCopy.WriteToServer(table);
}

#endregion

protected void GridView1_PageIndexChanging(object sender,


GridViewPageEventArgs e)
{
GridView1.DataSource = Lista(“select * from [“ + DropDownList1.
SelectedItem.Text.ToString()+”]”);
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
}
protected void GridView2_PageIndexChanging(object sender,
GridViewPageEventArgs e)
{ GridView2.DataSource = Lista(“select * from [“ + DropDownList2.
SelectedItem.Text.ToString()+”]”);
GridView2.PageIndex = e.NewPageIndex;
GridView2.DataBind();
}
}

www.detodoprogramacion.org
Capítulo 5: Aplicación de copias masivas y manejo de imágenes 423

CÓMO TRABAJA EL APLICATIVO


Ahora vamos a ver cómo es el proceso; empecemos ingresando al sistema, el cual nos pedirá el ingreso
del servidor y el po de auten ficación que se realizará.

Luego, daremos en el botón conectar, para poder ingresar al aplica vo.

En caso de que se elija SQL, nos mostrará dos controles más en el cual ingresaremos el usuario y la
clave.

Luego de habernos auten ficado, elegimos la base de datos con la cual deseamos trabajar; en este
caso, para el ejemplo vamos a realizarlo con la base de datos Northwind, y luego daremos clic en el
link de ingresar.

Ahora vamos a visualizar las tablas y cada vez que seleccionemos alguna podremos ver sus datos.

www.detodoprogramacion.org
424 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Desde esta ventana podemos crear una nueva tabla o realizar la copia masiva; primero elegiremos
cómo crear una tabla.

En caso de que no exista la tabla para hacer la copia, podemos crearla en ese momento, de tal manera
que nos sirva como repositorio de la información a copiar.

Luego de haber visto este proceso, regresemos a la ventana de seleccionar tabla y daremos clic en el
botón realizar copia.

www.detodoprogramacion.org
Capítulo 5: Aplicación de copias masivas y manejo de imágenes 425

Ahora, seleccionamos las tablas de las que deseamos realizar la copia masiva:

Podemos notar cuál es la tabla origen de donde deseamos copiar y la tabla des no, que es la nueva
tabla donde vamos a copiar la información; al final, el resultado nos va a mostrar que las dos tablas
enen la misma can dad de registros.

TRABAJANDO CON BLOB EN ASP (MANEJO DE GRÁFICOS)


Un objeto binario grande (BLOB) se puede escribir en una base de datos en forma de datos binarios o
de caracteres, según el po de campo del origen de datos. Para escribir un valor BLOB en la base de
datos, u lice la instrucción INSERT o UPDATE correspondiente y pase el valor BLOB como parámetro
de entrada (vea U lizar procedimientos almacenados con un comando).

Si el BLOB se almacena como texto, por ejemplo, un campo text de SQL Server, puede pasar dicho
BLOB como parámetro de cadena. Si el BLOB se almacena en formato binario, por ejemplo, un campo
image de SQL Server, puede pasar una matriz de po byte como parámetro binario.

Un BLOB puede ser bastante grande y, por lo tanto, es posible que uƟlice una gran canƟdad de
memoria del sistema cuando se escribe como un único valor, lo que produce una reducción del
rendimiento de la aplicación.

Para reducir la can dad de memoria u lizada al escribir un valor BLOB, puede escribir el BLOB en la
base de datos, en ‘fragmentos’. El proceso de escritura de un BLOB en una base de datos de esta forma
depende de las caracterís cas del origen de datos. Para ver un ejemplo sobre la forma de escribir un
valor BLOB en SQL Server, en ‘fragmentos’, vea Conservar recursos al escribir valores BLOB en SQL
Server.

www.detodoprogramacion.org
426 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

CÓMO TRABAJA EL APLICATIVO DE BLOB


Veamos un ejemplo sobre cómo trabajar con el Blob. Para esto crearemos una aplicación en asp.net,
la cual al ejecutarlo en el explorador nos mostrará la siguiente página:

En la cual ingresaremos el nombre y el estado de un viajero, luego daremos clic en el botón examinar,
el cual nos permi rá seleccionar un gráfico:

www.detodoprogramacion.org
Capítulo 5: Aplicación de copias masivas y manejo de imágenes 427

Aquí podemos seleccionar una gráfico y, luego, dar clic en el Botón guardar. Ahora revisemos la base
de datos para poder visualizar cómo se ha guardado la información:

Ahora vamos a visualizar la información que hemos almacenado; para esto daremos clic en la opción
de listado.

Donde la información nos presentará de la siguiente manera la información que hemos ingresado:

En el cual podemos ver los registros que hemos ingresado; en la parte izquierda notamos un link
que nos permi ría poder ver la imagen relacionada a ese registro. Para ver cómo se puede visualizar,
buscaremos cualquier registro y daremos clic en ese link.

www.detodoprogramacion.org
428 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Dando como resultado el llamado el siguiente formulario, que se mostrará de esta forma:

De esta manera, trabajamos con los Archivos Gráficos o archivos de po texto grande.

Luego de haber visto cómo trabaja, vamos a revisar el código que se ha generado para dicho aplica vo:

Lo primero que debemos hacer es generar una base de datos que nos permita guardar la información;
esto lo haremos de la manera más sencilla, mediante el siguiente script:
CREATE DATABASE dbBancaVirtual
GO
USE dbBancaVirtual
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N’[dbo].
[travelers]’) AND type in (N’U’))
BEGIN
CREATE TABLE [dbo].[travelers](
[id] [int] IDENTITY(1,1) NOT NULL,
[nombre] [varchar](50) NULL,
[foto] [image] NULL,
[estado] [char](1) NULL,
CONSTRAINT [PK_travelers] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
END
GO

www.detodoprogramacion.org
Capítulo 5: Aplicación de copias masivas y manejo de imágenes 429

Luego, empezaremos a desarrollar las respec vas páginas:

Crearemos la página default.aspx.

En la parte de los eventos hemos codificado lo siguiente:


Imports System.Data.SqlClient
Imports System.Data
Imports System.IO
Partial Class _Default
Inherits System.Web.UI.Page
Sub grabar()
Try
Dim grabame As String
grabame = “INSERT INTO travelers(nombre,foto,estado)”
grabame += “Values(@nombre,@foto,@estado)”
Dim cn As New SqlConnection(“Data Source=.;Initial Catalog=dbBancaVirt
ual;Integrated Security=True”)
Dim cmdgrabame As SqlCommand = New SqlCommand(grabame, cn)
cmdgrabame.Parameters.Add(“@nombre”, SqlDbType.VarChar, 50).Value =
txtnom.Text
cmdgrabame.Parameters.Add(“@foto”, SqlDbType.VarChar).Value =
FileUpload1.PostedFile.FileName
cmdgrabame.Parameters.Add(“@estado”, SqlDbType.VarChar, 1).Value =
txtest.Text
cn.Open()
cmdgrabame.ExecuteNonQuery()
Catch ex As Exception
End Try
txtnom.Text = “”
txtest.Text = “”
End Sub

www.detodoprogramacion.org
430 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Button1.Click
Try
grabar()
lblruta.Text = FileUpload1.PostedFile.FileName

Dim id As String
id = lblid.Text
Dim con As New SqlConnection(“Server=.;database=dbBancaVirtual;Integra
ted Security=True”)
Dim da As New SqlDataAdapter(“SELECT * FROM travelers where id=’” +
id.ToString() + “’”, con)
Dim mycb As SqlCommandBuilder = New SqlCommandBuilder(da)
Dim ds As New DataSet()
da.MissingSchemaAction = MissingSchemaAction.AddWithKey
con.Open()
da.Fill(ds, “travelers”)
Dim fs As New FileStream(“” + lblruta.Text.Trim() + “”, FileMode.
OpenOrCreate, FileAccess.Read)
‘Grabacion de La Grafica
Dim mydata(fs.Length) As Byte
fs.Read(mydata, 0, fs.Length)
fs.Close()
ds.Tables(“Travelers”).Rows(0)(“foto”) = mydata
da.Update(ds, “Travelers”)
fs = Nothing
mycb = Nothing
ds = Nothing
da = Nothing
con.Close()
con = Nothing
MsgBox(“Archivo guardado en la base de datos”)
Response.Redirect(“listado.aspx”)
Catch ex As Exception
End Try
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
Dim con As New SqlConnection(“server=.;Database=dbBancaVirtual;Integrated
Security=True”)
Dim dap As New SqlDataAdapter(“SELECT COUNT(id) AS Cantidad from travelers
“, con)
Dim dt As New DataTable
dap.Fill(dt)
Dim num As String
num = dt.Rows(0)(0).ToString
lblid.Text = num + 1
End Sub

End Class

www.detodoprogramacion.org
Capítulo 5: Aplicación de copias masivas y manejo de imágenes 431

Este página puede llamar la página de listado (listado.aspx), la cual tendrá la siguiente estructura:

El código con el que cuenta es el siguiente:


Imports System.Data.SqlClient
Imports System.Data

Partial Class listado


Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
Dim con As New SqlConnection(“Server=.;database=dbBancaVirtual;Integrated
Security=True”)
Dim da As New SqlDataAdapter(“SELECT * FROM travelers”, con)
Dim mycb As SqlCommandBuilder = New SqlCommandBuilder(da)
Dim ds As New DataSet()
ds.Clear()
da.Fill(ds, “viajeros”)
GridView1.DataSource = ds
GridView1.DataBind()
End Sub

Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e


As System.EventArgs) Handles GridView1.SelectedIndexChanged
Dim cod As String
cod = GridView1.SelectedRow.Cells(1).Text.ToString()
Response.Redirect(“fotos.aspx?foto=” + cod)
‘MsgBox(cod)
End Sub
End Class

www.detodoprogramacion.org
432 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Ahora si queremos cargar una foto relacionada con el registro insertado, llamamos a la página foto.
aspx.

El cual consta del código:


Imports System.Data.SqlClient
Imports System.Data
Partial Class Default2
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
Dim foto As String = Request.Params(“foto”)
Image1.ImageUrl = “image.aspx?id=” + foto

End Sub
End Class

Bien, si se dan cuenta la aplicación es muy sencilla, la puedes mejorar poniéndole otros controles u
otras validaciones. Inténtalo.

Ante de terminar, me preguntaba lo siguiente, cómo realizo esos efectos.

Bueno, en primer lugar vamos a ver la definición que se le dio en HTML


<div id=”sidebar”>
<a href=”default.aspx” class=”btnSidebar”>Formulario de datos</a>
<a href=”listado.aspx” class=”btnSidebar”>Listado de datos</a>
</div

www.detodoprogramacion.org
Capítulo 5: Aplicación de copias masivas y manejo de imágenes 433

Bueno, es un script muy simple, el cual desde el botón btnSideBar llama a un archivo de po es lo, el
cual ene por nombre default.css. Ahora, veamos las siguientes caracterís cas de dicho archivo:
body { margin:0;
padding:0;
background: url(images/bg_body.jpg) left top repeat;
font-family:Arial, Helvetica, sans-serif;
font-size:12px; }
#wrapper {width:100%;
display:block; }
#container {width:980px;
margin-left:auto;
margin-right:auto;
height:100%; }
#head { display:block;
height:80px;
background:url(images/logo.jpg) left center no-repeat; }
#outContent{ background:url(images/top_content.jpg) left top no-repeat;
display:block;
padding:20px 20px 20px 0px; }
#content { display:block;
background: url(images/bg_content.jpg) left top repeat-y;
margin:0;
}
#bottomContent{
display:block;
margin:0;
background:url(images/bottom_content.jpg) left bottom no-repeat;
height:20px;
}
#sidebar {
float:left;
width:250px;
padding:60px 0 0 0;
}
#details {
float:left;
width:690px;
padding:10px 0 0 0;
}
.clearFix {
display:block;
clear:both;
height:1px;
}
.btnSidebar {
background:url(images/btnSidebar.jpg) left top no-repeat;
color:#FFFFFF;
text-decoration:none;
height:51px;
display:block;
padding:0 0 0 40px;
font:bold 16px/40px Arial, Helvetica, sans-serif;

www.detodoprogramacion.org
434 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

}
.padding {
padding:15px;}

Otro ejemplo de trabajo con BLOB.

En el mercado, casi la mayoría de aplicaciones trabajan con gráficos y videos. En el siguiente ejemplo
vamos a emplear los dos pos, trabajando con base de datos.

Lo primero que vamos hacer, es crear una base de datos y un par de tablas para trabajar ahí la
información requerida:

Este se encuentra en el archivo cantante.sql, y ene el siguiente script:


CREATE DATABASE MUSICA
GO
USE MUSICA
GO

CREATE TABLE CANTANTE


(
CODIGO CHAR(5) PRIMARY KEY,
NOMBRE varChar(50),
CANCION VARCHAR(50),
IMAGEN varBinary(MAX)
)
GO

CREATE PROC USP_GENERAR


AS
Declare @CODIGO varchar(5)
SET @CODIGO=(SELECT MAX(CODIGO) FROM CANTANTE)
SET @CODIGO= ‘0’++right(‘0000’+LTRIM(RIGHT(ISNULL(@CODIGO,’0000’),4)+1),4)
SELECT @CODIGO
GO

CREATE PROC USPlISTADO


AS
SELECT * FROM CANTANTE ORDER BY CODIGO ASC
GO

CREATE PROC USPBUSQUEDA


@CODIGO CHAR(5)
AS
SELECT * FROM CANTANTE WHERE CODIGO=@CODIGO
GO
CREATE PROC USPELIMINAR
@CODIGO CHAR(100)
AS
EXEC(‘DELETE FROM CANTANTE WHERE CODIGO IN(‘+@CODIGO+’)’)
GO

www.detodoprogramacion.org
Capítulo 5: Aplicación de copias masivas y manejo de imágenes 435

Bien, ahora vamos a codificar; para esto, el formulario que es default.aspx lo dividiremos en tres partes.

La primera es donde vamos a realizar el mantenimiento:

Ahora vamos a poner la parte donde aparecen los registros insertados, en forma de listado.

Inmediatamente, veamos la parte del seleccionar, donde apreciaremos el registro en su detalle.

www.detodoprogramacion.org
436 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Ahora veamos el código HTML que se ha generado de este WebForm:


<%@ Page Language=”VB” AutoEventWireup=”false” CodeFile=”Default.aspx.vb”
Inherits=”_Default” %>
<%@ Register Assembly=”ASPNetFlashVideo.NET2.AJAX” Namespace=”ASPNetFlashVideo”
TagPrefix=”ASPNetFlashVideo” %>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/
TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml” >
<head runat=”server”>
<title>Mantenimiento de Videos y de Fotos</title>
</head>
<body>
<form id=”form1” runat=”server”>
<div> &nbsp;&nbsp;
<br /><table border=”1” >
<tbody>
<tr>
<td colspan=”4” style=”text-align: center”>
<asp:Label ID=”Label1” runat=”server” Font-Bold=”True”
Font-Size=”16pt” Text=”Reproduccion de Videos - FYSH” Width=”230px”></
asp:Label></td>
</tr>
<tr> <td style=”width: 100px”>
&nbsp;<asp:Label ID=”Label7” runat=”server” Text=”Cod Registro:”
Width=”179px” Font-Bold=”True” ForeColor=”DimGray”></asp:Label></td>
<td style=”width: 100px”>
<asp:Label ID=”lblcodigo” runat=”server” Width=”128px” Font-Bold=”True”
ForeColor=”#FF0066”> </asp:Label></td>
<td style=”width: 94px”> </td>
<td style=”width: 100px”> </td>
</tr>
<tr> <td style=”width: 100px; height: 19px;”>
&nbsp;<asp:Label ID=”Label2” runat=”server” Text=”Nombre
de Artista:” Width=”179px” Font-Bold=”True” ForeColor=”DimGray”></asp:Label>
</td>
<td style=”width: 100px; height: 19px;”>
<asp:TextBox ID=”txtnombre” runat=”server”
Width=”265px”></asp:TextBox></td>
<td style=”width: 94px; height: 19px;”>
</td>
<td style=”width: 100px; height: 19px;”>
<asp:Button ID=”Button1” runat=”server” Text=”Nuevo” Font-Bold=”True”
Width=”93px” /></td>
</tr>
<tr>
<td style=”width: 100px”>
<asp:Label ID=”Label3” runat=”server” Text=”Cancion”
Width=”179px” Font-Bold=”True” ForeColor=”DimGray”></asp:Label></td>
<td style=”width: 100px”>
<asp:TextBox ID=”txtcancion” runat=”server”
Width=”262px”></asp:TextBox></td>
<td style=”width: 94px”>
</td>

www.detodoprogramacion.org
Capítulo 5: Aplicación de copias masivas y manejo de imágenes 437

<td style=”width: 100px”>


<asp:Button ID=”btngrabar” runat=”server” Text=”Grabar” Font-Bold=”True”
Width=”93px” /></td>
</tr>
<tr>
<td style=”width: 100px”>
<asp:Label ID=”Label4” runat=”server” Text=”Foto:” Width=”179px” Font-
Bold=”True”
ForeColor=”DimGray”> </asp:Label></td>
<td style=”width: 100px”>
<asp:FileUpload ID=”FileUpload1” runat=”server” Width=”267px” /></td>
<td style=”width: 94px”> </td>
<td style=”width: 100px”>
<asp:Button ID=”btnmodificar” runat=”server” Text=”Modificar” Font-
Bold=”True” Width=”92px” />
</td> </tr>
<tr>
<td style=”width: 100px”>
<asp:Label ID=”Label5” runat=”server” Text=”Video” Width=”179px”
Font-Bold=”True”
ForeColor=”DimGray”></asp:Label></td>
<td style=”width: 100px”>
<asp:FileUpload ID=”FileUpload2” runat=”server”
Width=”267px” /></td>
<td style=”width: 94px”>
</td>
<td style=”width: 100px”>
<asp:Button ID=”btneliminar” runat=”server” Text=”Eliminar” Font-
Bold=”True” Width=”93px” />
</td>
</tr>
</tbody>
</table>
<br />

<asp:Label ID=”lblmensaje” runat=”server” Text=”lblmensaje”></asp:Label></


div>
<br />
<asp:GridView ID=”GridView1” runat=”server” AutoGenerateColumns=”False”
BorderStyle=”None”
BorderWidth=”1px” Caption=”Reproduccion de Cantantes” CellPadding=”4”
ForeColor=”#333333”
GridLines=”None” Width=”547px”>
<FooterStyle BackColor=”#5D7B9D” Font-Bold=”True” ForeColor=”White” />
<Columns>
<asp:CommandField ButtonType=”Button” HeaderText=”Seleccionar”
SelectText=”Seleccionar”
ShowSelectButton=”True” />
<asp:TemplateField HeaderText=”Eliminar”>
<ItemTemplate>
<asp:CheckBox ID=”CheckBox1” runat=”server” />
</ItemTemplate>

www.detodoprogramacion.org
438 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

</asp:TemplateField>
<asp:BoundField DataField=”Codigo” HeaderText=”Cod Registro” />
<asp:BoundField DataField=”nombre” HeaderText=”Artista” />
<asp:BoundField DataField=”cancion” HeaderText=”Tema” />
</Columns>
<RowStyle BackColor=”#F7F6F3” ForeColor=”#333333” />
<EditRowStyle BackColor=”#999999” />
<SelectedRowStyle BackColor=”#E2DED6” Font-Bold=”True”
ForeColor=”#333333” />
<PagerStyle BackColor=”#284775” ForeColor=”White”
HorizontalAlign=”Center” />
<HeaderStyle BackColor=”#5D7B9D” Font-Bold=”True” ForeColor=”White” />
<AlternatingRowStyle BackColor=”White” ForeColor=”#284775” />
</asp:GridView>
<br />
<br />
<table >
<tr>
<td style=”width: 100px; height: 511px” valign=”top”>
<asp:DataList ID=”DataList1” runat=”server”>
<ItemTemplate>
<table border=”1”>
<tr>
<td style=”width: 100px; height: 18px”>
<asp:Label ID=”Label7” runat=”server”
Text=”Cod Registro:” Width=”128px” Font-Bold=”True” ForeColor=”#000099”></
asp:Label></td>
<td style=”width: 100px; height: 18px”>
<asp:Label ID=”Label6” runat=”server” Text=’<%#
Eval(“codigo”) %>’ Width=”124px” Font-Bold=”True” ForeColor=”#0066CC”></
asp:Label></td>
</tr>
<tr>
<td style=”width: 100px”>
<asp:Label ID=”Label2” runat=”server”
Text=”Artista:” Width=”128px” Font-Bold=”True” ForeColor=”#000099”></asp:Label></
td>
<td style=”width: 100px”>
<asp:Label ID=”Label8” runat=”server”
Text=’<%# Eval(“Nombre”) %>’ Width=”157px” Font-Bold=”True” ForeColor=”#0066CC”></
asp:Label></td>
</tr>
<tr>
<td style=”width: 100px; height: 21px”>
<asp:Label ID=”Label3” runat=”server”
Text=”Tema:” Width=”128px” Font-Bold=”True” ForeColor=”#000099”></asp:Label></td>
<td style=”width: 100px; height: 21px”>
<asp:Label ID=”Label9”
runat=”server” Text=’<%# Eval(“Cancion”) %>’ Width=”157px” Font-Bold=”True”
ForeColor=”#0066CC”></asp:Label></td>
</tr>
<tr>
<td style=”width: 100px”>
</td>

www.detodoprogramacion.org
Capítulo 5: Aplicación de copias masivas y manejo de imágenes 439

<td style=”width: 100px”>


<asp:LinkButton ID=”LinkButton1”
runat=”server” OnClick=”LinkButton1_Click”>Ver Foto</asp:LinkButton></td>
</tr>
<tr>
<td style=”width: 100px”>
<asp:Label ID=”Label10” runat=”server” Font-Bold=”True”
ForeColor=”#000099” Text=”Reproducir:”
Width=”128px”></asp:Label></td>
<td style=”width: 100px”>
<asp:HyperLink ID=”HyperLink1”
runat=”server” ImageUrl=”~/img/PlayButton.png” NavigateUrl=’<%# Eval(“Codigo”,”~/
default.aspx?cod={0}”) %>’>HyperLink</asp:HyperLink></td>
</tr>
</table>
</ItemTemplate>
</asp:DataList></td>
<td style=”width: 100px; height: 511px” valign=”top”>
<ASPNetFlashVideo:FlashVideo ID=”FlashVideo1” runat=”server”
Height=”250px” Width=”407px”>
</ASPNetFlashVideo:FlashVideo>
</td>
</tr>
</table>
</form>
</body>
</html>

Esto es el código HTML en el cual hemos subrayado algunos aspectos que se deben tener cuenta en la
creación de tu página.

Bien, ahora veamos el script que desarrollaremos en los eventos del formulario, el cual es el siguiente:

El evento que vamos a desarrollar es el del botón Grabar, en el cual grabaremos la imagen y guardaremos
los archivos en una carpeta.

Imports System.Data.SqlClient
Imports System.Data

Partial Class _Default


Inherits System.Web.UI.Page
Dim cn As New SqlConnection(“server=(local);integrated security
=sspi;database=MUSICA”)

Protected Sub btngrabar_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btngrabar.Click
Try
If FileUpload1.PostedFile.FileName = “” Then
lblmensaje.Text = “Seleccione la Imagen”
lblmensaje.ForeColor = Drawing.Color.Red
lblmensaje.Font.Bold = True
Exit Sub

www.detodoprogramacion.org
440 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

End If
If FileUpload2.PostedFile.FileName = “” Then
lblmensaje.Text = “Seleccione el Video”
lblmensaje.ForeColor = Drawing.Color.Red
lblmensaje.Font.Bold = True
Exit Sub
End If
Dim video As String = FileUpload2.PostedFile.FileName.Substring( _
FileUpload2.PostedFile.FileName.LastIndexOf(“\”) + 1)
FileUpload2.PostedFile.SaveAs(Server.MapPath(“Videos/”) + video)
My.Computer.FileSystem.RenameFile( _
Server.MapPath(“Videos/”) + video, lblcodigo.Text + “.flv”)

Dim cad As String = “INSERT INTO CANTANTE


(CODIGO,NOMBRE,CANCION,IMAGEN)” & _
“ SELECT ‘” & lblcodigo.Text & “’,’” & txtnombre.Text & “’,’ “ & txtcancion.
Text & “ ‘,” & _
“ BulkColumn FROM OPENROWSET( Bulk ‘” & FileUpload1.PostedFile.FileName & “’,
SINGLE_BLOB) AS BLOB”
Dim cmd As New SqlCommand(cad, cn)
cn.Open()
Dim r As Integer = cmd.ExecuteNonQuery
If r > 0 Then
MsgBox(“Grabo Sastifactoriamente”, MsgBoxStyle.Information)
Call ListadoCantate()
End If
cn.Close()
Catch ex As Exception
lblmensaje.Text = ex.Message
End Try
End Sub

Este es el evento Load que se ejecuta cuando cargamos el formulario:


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load

Try
If Not Page.IsPostBack Then
If Request.QueryString(“cod”) = “” Then
Call GenerarCodigo()
Call ListadoCantate()
Else
FlashVideo1.VideoURL = “~/Videos/” & Request.
QueryString(“cod”) & “.flv”
DataList1.DataSource = Session(“data”)
DataList1.DataBind()
GridView1.DataSource = Session(“tbl”)
GridView1.AllowPaging = True
GridView1.PageSize = 5
GridView1.DataBind()
End If

www.detodoprogramacion.org
Capítulo 5: Aplicación de copias masivas y manejo de imágenes 441

End If
Catch ex As Exception
End Try
End Sub

Ahora crearemos unas subru nas que nos permiten limpiar los controles, listar los cantantes y generar
código u lizando el procedimiento almacenado USP_GENERAR:

Sub nuevo()
txtcancion.Text = “”
txtnombre.Text = “”
txtnombre.Focus()
End Sub

Sub ListadoCantate()
Dim da As New SqlDataAdapter(“USPlISTADO”, cn)
Dim tbl As New DataTable
da.Fill(tbl)
Session(“tbl”) = tbl
GridView1.DataSource = Session(“tbl”)
GridView1.AllowPaging = True
GridView1.PageSize = 5
GridView1.DataBind()
End Sub

Sub GenerarCodigo()
Dim cmd As New SqlCommand(“USP_GENERAR”, cn)
cmd.CommandType = CommandType.StoredProcedure
cn.Open()
Dim cod As String = cmd.ExecuteScalar
lblcodigo.Text = cod
cn.Close()
End Sub

Ahora trabajamos con eventos del GridView:


Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal
e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.
PageIndexChanging
GridView1.PageIndex = e.NewPageIndex
GridView1.DataSource = Session(“tbl”)
GridView1.DataBind()
End Sub

Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e


As System.EventArgs) Handles GridView1.SelectedIndexChanged
Dim cmd As New SqlCommand(“USPBUSQUEDA”, cn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add(“@codigo”, SqlDbType.Char, 5).Value = GridView1.
SelectedRow.Cells(2).Text
Dim da As New SqlDataAdapter(cmd)
Dim tbl As New DataTable

www.detodoprogramacion.org
442 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

da.Fill(tbl)
Session(“data”) = tbl
DataList1.DataSource = Session(“data”)
DataList1.DataBind()
lblcodigo.Text = GridView1.SelectedRow.Cells(2).Text
txtnombre.Text = GridView1.SelectedRow.Cells(3).Text
txtcancion.Text = GridView1.SelectedRow.Cells(4).Text
End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles Button1.Click
Call GenerarCodigo()
Call nuevo()
End Sub

Protected Sub btneliminar_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btneliminar.Click
Try
Dim cod As String = “”
For i As Integer = 0 To Me.GridView1.Rows.Count - 1
Dim ch As CheckBox = CType(GridView1.Rows(i).Cells(1).
FindControl(“CheckBox1”), CheckBox)
If (ch.Checked = True) Then
cod = cod + “’” + GridView1.Rows(i).Cells(2).Text + “’,”
System.IO.File.Delete(Server.MapPath(“Videos/”) + _
GridView1.Rows(i).Cells(2).Text + “.flv”)
End If
Next
cod = cod.Substring(0, cod.Length - 1)
Dim res As Integer = ElimarMusica(cod)
If res >= 1 Then
MsgBox(“Elimino Sastifactoriamente”, MsgBoxStyle.Information)
ListadoCantate()
End If
Catch ex As Exception
End Try
End Sub

Creación de la función eliminar musica:


Public Function ElimarMusica(ByVal codigo As String) As Integer
Dim cmd As New SqlCommand(“USPELIMINAR”, cn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add(“@CODIGO”, SqlDbType.VarChar, 100).Value = codigo
cn.Open()
Dim i As Integer = cmd.ExecuteNonQuery
cn.Close()
Return i
End Function

www.detodoprogramacion.org
Capítulo 5: Aplicación de copias masivas y manejo de imágenes 443

Ahora desarrollaremos el botón Modificar:


Protected Sub btnmodificar_Click(ByVal sender As Object, ByVal e As System.
EventArgs) Handles btnmodificar.Click
Try
If (txtcancion.Text = “”) Then
lblmensaje.Text = “Ingrese datos”
lblmensaje.ForeColor = Drawing.Color.Red
lblmensaje.Font.Bold = True
Exit Sub
End If
If FileUpload1.PostedFile.FileName = “” Then
lblmensaje.Text = “Seleccione la Imagen”
lblmensaje.ForeColor = Drawing.Color.Red : lblmensaje.Font.Bold
= True
Exit Sub
End If
If FileUpload2.PostedFile.FileName = “” Then
lblmensaje.Text = “Seleccione el Video”
lblmensaje.ForeColor = Drawing.Color.Red : lblmensaje.Font.
Bold = True
Exit Sub
End If
System.IO.File.Delete(Server.MapPath(“Videos/”) + lblcodigo.Text +
“.flv”)
Dim video As String = FileUpload2.PostedFile.FileName.Substring( _
FileUpload2.PostedFile.FileName.LastIndexOf(“\”) + 1)
FileUpload2.PostedFile.SaveAs(Server.MapPath(“Videos/”) + video)
My.Computer.FileSystem.RenameFile( Server.MapPath(“Videos/”) + video,
lblcodigo.Text + “.flv”)
Dim cad As String = “UPDATE CANTANTE SET “ & _
“ NOMBRE=’” & txtnombre.Text & “’,CANCION =’” & txtcancion.Text & “’,IMAGEN=”
& _
“ BulkColumn FROM OPENROWSET( “ & _
“ Bulk ‘” & FileUpload1.PostedFile.FileName & “’, SINGLE_BLOB) AS
BLOB” & _
“ WHERE CODIGO=’” & lblcodigo.Text & “’”
Dim cmd As New SqlCommand(cad, cn)
cn.Open()
Dim r As Integer = cmd.ExecuteNonQuery
If r > 0 Then
MsgBox(“Actualizo Sastifactoriamente”, MsgBoxStyle.Information)
Call ListadoCantate()
FlashVideo1.VideoURL = “”
DataList1.DataSource = Nothing
End If
cn.Close()
Catch ex As Exception
End Try
End Sub

www.detodoprogramacion.org
444 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Seguidamente, vamos a manejar el comando ItemCommand:


Protected Sub DataList1_ItemCommand(ByVal source As Object, ByVal e As System.
Web.UI.WebControls.DataListCommandEventArgs) Handles DataList1.ItemCommand
For i As Integer = 0 To DataList1.Items.Count - 1
Dim btn As LinkButton = CType(DataList1.Items(i).
FindControl(“LinkButton1”), LinkButton)
btn.Attributes.Add(“onclick”, _
“window.open(‘default2.aspx?cod=” & _
CType(DataList1.Items(i).FindControl(“Label6”), Label).Text & “ “ & _
“’,’ventana_Emergente’,’width=500,heigth=500,” & _
“menubar=no,resizables=no’);”)
Next
End Sub
End Class

CÓMO TRABAJA EL APLICATIVO


Bien, ahora veamos el aplica vo en funcionamiento.

En primer lugar cargamos la página, la cual nos va a mostrar la página donde ingresaremos la
información.

Donde hemos puesto en un círculo los datos que se han ingresado, como por ejemplo: el nombre del
ar sta, el nombre de la canción; en el caso de la foto y el video, lo recuperamos de archivos que ya
existen. Luego damos clic en el botón Grabar. Si todo es correcto nos mostrará una ventana de alerta
de la siguiente manera:

www.detodoprogramacion.org
Capítulo 5: Aplicación de copias masivas y manejo de imágenes 445

Luego, visualizamos la información de los registros ingresados, de la siguiente manera:

Ahora, si nosotros quisiéramos ver la información de los registros que tenemos, damos clic en el botón
seleccionar:

El cual nos permi ría visualizar el detalle del registro seleccionado, de la siguiente manera:

www.detodoprogramacion.org
446 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Si queremos seleccionar la foto para poder visualizarla, esta se mostraría de la siguiente manera:

Ahora, si queremos visualizar el archivo de video que hemos adicionado al registro, lo podemos hacer
dando clic en el Botón de reproducción.

Bueno, este es otro ejemplo de cómo se pueden manejar gráficos y videos desde ASP.NET. Ojalá te
guste, no olvides que el código fuente lo puedes encontrar en la carpeta del Capítulo 5. Suerte.

www.detodoprogramacion.org
CAPÍTULO

6 Aplicación trabajando con


Linq (ejemplos cortos)

TRABAJANDO CON LINQ


Ahora desarrollaremos algunos ejemplos sobre LINQ.

DEFINICIÓN
Una consulta es una expresión que recupera datos de un origen de datos. Normalmente, se expresan
en un lenguaje de consultas especializado. A lo largo del empo se han ido desarrollando lenguajes
diferentes para los dis ntos pos de orígenes de datos, como SQL para las bases de datos relacionales
y XQuery para XML.

Por consiguiente, los programadores han tenido que aprender un nuevo lenguaje de consultas para cada
po de formato u origen de datos que deben admi r. LINQ simplifica esta situación, proporcionando un
modelo coherente para trabajar con datos de dis ntos pos de formatos y orígenes de datos. En una
consulta LINQ siempre se trabaja con objetos. Se u lizan los mismos modelos de codificación básicos
para consultar y transformar datos de documentos XML, bases de datos SQL, conjuntos de datos ADO.
NET, colecciones .NET y cualquier otro formato para el que haya disponible un proveedor LINQ.

LINQ define operadores de consulta estándar que permiten a lenguajes habilitados con LINQ filtrar,
enumerar y crear proyecciones de varios pos de colecciones usando la misma sintaxis. Tales
colecciones pueden incluir arreglos (vectores) y clases, XML, conjuntos de datos desde bases de datos
relacionales y orígenes de datos de terceros. El proyecto LINQ usa caracterís cas de la versión 2.0
del .NET Framework, nuevos ensamblados relacionados con LINQ, así como extensiones para los
lenguajes C# y Visual Basic .NET. Microso ha distribuido una versión previa del LINQ, consistente de
estas bibliotecas y compiladores para C# 3.0 y Visual Basic 9. Otros lenguajes, como F# y Nemerle, han
anunciado brindar soporte preliminar.

EJEMPLO DE BÚSQUEDA UTILIZANDO LINQ


Desarrollaremos un procedimiento que nos permite realizar un servicio de información de números
telefónicos, tanto de par culares como de empresas. Este buscador estará desarrollado u lizando la
tecnología LINQ.

Pasos para la Realización:


Antes de empezar a trabajar en visual Studio, vamos a crear la base de datos, las tablas y los
procedimientos con los cuales trabajaremos. Todo el script se encuentra en la carpeta CapítuloVI, en
el Archivo bdBuscador.Sql.
set quoted_identifier on
go
use master

www.detodoprogramacion.org
448 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

drop database buscador


create database buscador
go
use buscador
go
CREATE TABLE actividad (
id_activ char(5) NOT NULL,
nom_activ varchar(50) NULL
)
go
ALTER TABLE actividad ADD PRIMARY KEY NONCLUSTERED (id_activ)
go
-- exec sp_primarykey actividad,id_activ
go
CREATE TABLE Distrito (
id_distrito char(5) NOT NULL,
nom_dist varchar(50) NULL
)
go
ALTER TABLE Distrito ADD PRIMARY KEY NONCLUSTERED (id_distrito)
go
-- exec sp_primarykey Distrito,id_distrito
go
CREATE TABLE Distrito_Emp (
id_distrito char(5) NOT NULL,
id_empre char(5) NOT NULL
)
go
ALTER TABLE Distrito_Emp ADD PRIMARY KEY NONCLUSTERED (id_distrito, id_empre)
go
-- exec sp_primarykey Distrito_Emp,id_distrito,id_empre
go
CREATE TABLE Emp_activ (
id_empre char(5) NOT NULL,
id_activ char(5) NOT NULL
)
go
ALTER TABLE Emp_activ ADD PRIMARY KEY NONCLUSTERED (id_empre, id_activ)
go
-- exec sp_primarykey Emp_activ,id_empre,id_activ
go
CREATE TABLE empr_clave (
id_empre char(5) NOT NULL,
id_clave char(5) NOT NULL
)
go
ALTER TABLE empr_clave ADD PRIMARY KEY NONCLUSTERED (id_empre, id_clave)
go
-- exec sp_primarykey empr_clave,id_empre,id_clave
go
CREATE TABLE Empresa (
id_empre char(5) NOT NULL,

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 449

nombre varchar(50) NULL,


descrip varchar(100) NULL,
direccion varchar(100) NULL,
nro_direc char(10) NULL,
telefono char(18) NULL,
estado char(5) NULL
)
go
ALTER TABLE Empresa ADD PRIMARY KEY NONCLUSTERED (id_empre)
go
-- exec sp_primarykey Empresa,id_empre
go
CREATE TABLE Palabra_clave (
id_clave char(5) NOT NULL,
nom_clave varchar(50) NULL
)
go
ALTER TABLE Palabra_clave ADD PRIMARY KEY NONCLUSTERED (id_clave)
go
-- exec sp_primarykey Palabra_clave,id_clave
go
CREATE TABLE Particular (
id_partic char(5) NOT NULL,
nombre varchar(50) NULL,
prim_ape varchar(50) NULL,
segun_ape varchar(50) NULL,
direccion varchar(100) NULL,
nro_direc char(10) NULL,
telefono char(18) NULL,
estado char(5) NULL,
id_distrito char(5) NULL
)
go
ALTER TABLE Particular ADD PRIMARY KEY NONCLUSTERED (id_partic)
go
-- exec sp_primarykey Particular,id_partic
go
ALTER TABLE Distrito_Emp ADD FOREIGN KEY (id_empre) REFERENCES Empresa (id_empre)
go
ALTER TABLE Distrito_Emp ADD FOREIGN KEY (id_distrito)REFERENCES Distrito (id_
distrito)
go
-- exec sp_foreignkey Distrito_Emp, Empresa,id_empre
go
-- exec sp_foreignkey Distrito_Emp, Distrito, id_distrito
go
ALTER TABLE Emp_activ ADD FOREIGN KEY (id_activ)REFERENCES actividad (id_activ)
go
ALTER TABLE Emp_activ ADD FOREIGN KEY (id_empre)REFERENCES Empresa (id_empre)
go
-- exec sp_foreignkey Emp_activ, actividad,id_activ
go

www.detodoprogramacion.org
450 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

-- exec sp_foreignkey Emp_activ, Empresa, id_empre


go
ALTER TABLE empr_clave ADD FOREIGN KEY (id_clave)REFERENCES Palabra_clave (id_
clave)
go
ALTER TABLE empr_clave ADD FOREIGN KEY (id_empre) REFERENCES Empresa (id_empre)
go
-- exec sp_foreignkey empr_clave, Palabra_clave,id_clave
go
-- exec sp_foreignkey empr_clave, Empresa,id_empre
go
ALTER TABLE Particular ADD FOREIGN KEY (id_distrito)REFERENCES Distrito (id_
distrito)
go
-- exec sp_foreignkey Particular, Distrito,id_distrito
go
---------------------------- inserciones --------------------------------
-- realizar mas inserciones para la base de datos ------
insert into palabra_clave values(‘C0001’,’españa’)
insert into palabra_clave values(‘C0002’,’peruana’)
insert into palabra_clave values(‘C0003’,’china’)
insert into palabra_clave values(‘C0004’,’japonesa’)
insert into palabra_clave values(‘C0005’,’francesa’)
insert into palabra_clave values(‘C0006’,’criolla’)
insert into palabra_clave values(‘C0007’,upper(‘5 tenedores’))
insert into palabra_clave values(‘C0008’,upper(‘’))

insert into distrito values(‘d0001’,’Ate’)


insert into distrito values(‘d0002’,’Barranci’)
insert into distrito values(‘d0003’,’Breña’)
insert into distrito values(‘d0004’,’Comas’)
insert into distrito values(‘d0005’,’El Agustino’)
insert into distrito values(‘d0006’,’Jesús María’)
insert into distrito values(‘d0007’,’San Martin de Porres’)
insert into distrito values(‘d0008’,’San Miguel’)
insert into distrito values(‘d0009’,’Santiago de Surco’)

insert into particular values(‘p0001’,’juan’,’santos’,’chavez’,’calle rosales’,’20


’,’752469’,’1’,’d0007’)
insert into particular values(‘p0002’,’antoni’,’santos’,’chavez’,’calle gan’,’60’,
’5242015’,’1’,’d0005’)
insert into particular values(‘p0003’,’cristian’,’cotrina’,’gutierrez’,’calle avar
es’,’23’,’4586327’,’1’,’d0003’)
insert into particular values(‘p0004’,’carlos’,’chirito’,’mesa’,’calle vacios’,’31
’,’1896354’,’1’,’d0004’)
insert into particular values(‘p0005’,’cesar’,’saldaña’,’armanza’,’calle armas’,’2
2’,’7513592’,’1’,’d0001’)
insert into particular values(‘p0006’,’edson’,’portes’,’espal’,’calle cristobal’,’
15’,’8524369’,’1’,’d0006’)
insert into particular values(‘p0007’,’fernando’,’leiva’,’lurdez’,’calle exposicio
n’,’37’,’7931246’,’1’,’d0004’)
insert into particular values(‘p0008’,’enrique’,’aldazabal’,’sanchez’,’calle lunas
’,’18’,’8268423’,’1’,’d0002’)

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 451

insert into particular values(‘p0009’,’carol’,’rojas’,’pimentel’,’calle girasoles’


,’42’,’1188649’,’1’,’d0008’)
insert into particular values(‘p0010’,’maria’,’jimenez’,’soto’,’calle alverez’,’32
’,’4875123’,’1’,’d0008’)
insert into particular values(‘p0011’,’maicol’,’flores’,’taiza’,’calle chivorazo’,’
11’,’8364400’,’1’,’d0002’)
insert into particular values(‘p0012’,’carlos’,’naveros’,’aika’,’calle alamos’,’38
’,’7236045’,’1’,’d0008’)
insert into particular values(‘p0013’,’luis’,’nolasko’,’challco’,’calle cruz’,’53’
,’3701258’,’1’,’d0004’)
insert into particular values(‘p0014’,’angui’,’servantes’,’cuevas’,’calle buen air
e’,’41’,’3300583’,’1’,’d0009’)

insert into empresa values(‘e0001’,upper(‘ferreteria meli’),’ferreteria y


articulos de todo tipo’, ‘av.peru’,’24’,’5478024’,’1’)
insert into empresa values(‘e0002’,upper(‘farmacia gloria’),’medicinas de todo
tipo’, ‘av.morales duares’,’30’,’5874226’,’1’)
insert into empresa values(‘e0003’,upper(‘panaderia rosita’),’panaderia y
reposteria’, ‘av.peru’,’23’,’8547710’,’1’)
insert into empresa values(‘e0004’,upper(‘capinteria pedro’),’maderas de toda
clase’, ‘av.salaberry’,’15’,’4512836’,’1’)
insert into empresa values(‘e0005’,upper(‘muebleria lucia’),’muebles, mesas y
demas’, ‘av.panamerica norte’,’21’,’4875129’,’1’)
insert into empresa values(‘e0006’,upper(‘bodega biki’),’viveres y dulces’, ‘av.
pachacamac’,’16’,’3628459’,’1’)
insert into empresa values(‘e0007’,upper(‘locutorio jose’),’llamadas a cualquier
lugar’, ‘av.venezuela’,’18’,’4152684’,’1’)
insert into empresa values(‘e0008’,upper(‘internet bandido’),’juego en lan y
online’, ‘av.jose granda’,’22’,’4589632’,’1’)
insert into empresa values(‘e0009’,upper(‘heladeria julio’),’los mejores helados’,
‘av.rimax’,’13’,’4875135’,’1’)

insert into empr_clave values(‘e0001’,’c0008’)


insert into empr_clave values(‘e0002’,’c0008’)
insert into empr_clave values(‘e0003’,’c0008’)
insert into empr_clave values(‘e0004’,’c0008’)
insert into empr_clave values(‘e0005’,’c0008’)
insert into empr_clave values(‘e0006’,’c0008’)
insert into empr_clave values(‘e0007’,’c0008’)
insert into empr_clave values(‘e0008’,’c0008’)
insert into empr_clave values(‘e0009’,’c0008’)

insert into actividad values(‘a0001’,’carpintero’)


insert into actividad values(‘a0002’,’carpinteria’)
insert into actividad values(‘a0003’,’farmacia’)
insert into actividad values(‘a0004’,’hotel’)
insert into actividad values(‘a0005’,’sauna’)
insert into actividad values(‘a0006’,’ceramicas’)
insert into actividad values(‘a0007’,’cerrajero’)
insert into actividad values(‘a0008’,’ferreteria’)
insert into actividad values(‘a0009’,’restaurante’)
insert into actividad values(‘a0010’,’panaderia’)

www.detodoprogramacion.org
452 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

insert into actividad values(‘a0011’,’muebleria’)


insert into actividad values(‘a0012’,’bodega’)
insert into actividad values(‘a0013’,’ocio’)

insert into Emp_activ values(‘e0001’,’a0002’)


insert into Emp_activ values(‘e0002’,’a0003’)
insert into Emp_activ values(‘e0001’,’a0001’)
insert into Emp_activ values(‘e0003’,’a0010’)
insert into Emp_activ values(‘e0004’,’a0001’)
insert into Emp_activ values(‘e0005’,’a0005’)
insert into Emp_activ values(‘e0006’,’a0010’)
insert into Emp_activ values(‘e0006’,’a0012’)
insert into Emp_activ values(‘e0008’,’a0013’)
insert into Emp_activ values(‘e0009’,’a0012’)
insert into Emp_activ values(‘e0008’,’a0002’)
insert into Emp_activ values(‘e0007’,’a0013’)

insert into distrito_emp values(‘d0001’,’e0001’)


insert into distrito_emp values(‘d0004’,’e0002’)
insert into distrito_emp values(‘d0004’,’e0003’)
insert into distrito_emp values(‘d0008’,’e0004’)
insert into distrito_emp values(‘d0005’,’e0005’)
insert into distrito_emp values(‘d0009’,’e0006’)
insert into distrito_emp values(‘d0008’,’e0007’)
insert into distrito_emp values(‘d0006’,’e0008’)
insert into distrito_emp values(‘d0005’,’e0009’)

-- --------------------------CREACION DE PROCEDIMIENTOS ALMACENADOS --------


--------------------------------
create proc listar_empre
as
select * from distrito
go
create proc listar_dist
@nom varchar(50)
as
select * from distrito where nom_dist=@nom
go
-- exec busc_activi ‘fer’
-- select nom_activ from actividad where nom_activ like ‘%ua%’)
------------------ ---------------------------------------
create proc buscar_empre --’FAR’
@nom_empre varchar(100)
as
select Empresas = upper(nombre) + ‘, ‘+ descrip,direcciones = direccion + ‘, ‘ +
nro_direc,d.nom_dist , telefono
from empresa e, distrito d, Distrito_Emp t
where e.id_empre=t.id_empre and t.id_distrito=d.id_distrito and e.nombre like ‘%’
+ @nom_empre + ‘%’
go

create proc busc_activi

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 453

@nom_act varchar(60)
as
select nom_activ
from actividad
where nom_activ like ‘%’ + @nom_act + ‘%’
go

create proc busca_dis


@nom_dis varchar(50)
as
select nom_dist
from distrito
where nom_dist like ‘%’ + @nom_dis + ‘%’
go

create proc buscar_cla


@nom_cla varchar(20)
as
select Palabra_Clave=upper(nom_clave)
from palabra_clave
where nom_clave like ‘%’ + @nom_cla + ‘%’
go

create proc busXempXdist


@empre varchar(120),
@dist varchar(60)
as
select distinct Empresas = e.nombre + ‘, ‘+ descrip,direcciones = direccion + ‘, ‘
+ nro_direc,d.nom_dist , telefono
from empresa e, distrito d, Distrito_Emp t
where e.id_empre=t.id_empre and t.id_distrito=d.id_distrito and e.nombre like ‘%’
+ @empre + ‘%’ and d.nom_dist like ‘%’ + @dist + ‘%’
go

CREATE proc busXempXactXtodo1


@empre varchar(100),
@dist varchar(60),
@direc varchar(100),
@num varchar(10),
@act varchar(50)
as
select Empresas = upper(E.nombre) + ‘, ‘+ descrip,direcciones = direccion + ‘, ‘ +
nro_direc,d.nom_dist , telefono
from empresa e, distrito d, Distrito_Emp t, actividad a , Emp_activ v
where e.id_empre = t.id_empre and t.id_distrito = d.id_distrito
and a.id_activ = v.id_activ and e.id_empre = v.id_empre
and e.nombre like ‘%’ + @empre + ‘%’ and a.nom_activ like ‘%’ + @act + ‘%’
and d.nom_dist like ‘%’ + @dist + ‘%’
and e.direccion like ‘%’ + @direc + ‘%’
and e.nro_direc like ‘%’ + @num + ‘%’
go
--busxtodoxpar ‘ju’,’’,’cha’,’’,’’,’san’

www.detodoprogramacion.org
454 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

create proc busxtodoxpar --’ju’,’’,’cha’,’’,’’,’san’


@nom varchar(50),
@ape1 varchar(50),
@ape2 varchar(50),
@direc varchar(100),
@num varchar(50),
@dist varchar(100)
as
select distinct particular = prim_ape + ‘ ‘ + segun_ape + ‘, ‘ + p.nombre ,
direcciones = direccion + ‘, ‘ + nro_direc, d.nom_dist, telefono
from particular p, distrito d
where p.id_distrito = d.id_distrito
and nombre like ‘%’ + @nom + ‘%’
and prim_ape like ‘%’ + @ape1 + ‘%’
and segun_ape like ‘%’ + @ape2 + ‘%’
and direccion like ‘%’ + @direc + ‘%’
and nro_direc like ‘%’ + @num + ‘%’
and d.nom_dist like ‘%’ + @dist + ‘%’
go

create proc busXempXactXtodo3


@empre varchar(100),
@dist varchar(60),
@direc varchar(100),
@num varchar(10),
@act varchar(50),
@CLAVE1 VARCHAR(50)
as
select Empresas = upper(E.nombre) + ‘, ‘+ descrip,direcciones = direccion + ‘, ‘ +
nro_direc,d.nom_dist , telefono
from empresa e, distrito d, Distrito_Emp t, actividad a , Emp_activ v , palabra_
clave l , empr_clave p
where e.id_empre = t.id_empre and t.id_distrito = d.id_distrito
and a.id_activ = v.id_activ and e.id_empre = v.id_empre
and e.id_empre=p.id_empre and p.id_clave=l.id_clave
and e.nombre like ‘%’ + @empre + ‘%’ and a.nom_activ like ‘%’ + @act + ‘%’
and d.nom_dist like ‘%’ + @dist + ‘%’
and e.direccion like ‘%’ + @direc + ‘%’
and e.nro_direc like ‘%’ + @num + ‘%’
and l.nom_clave like ‘%’ + @CLAVE1 + ‘%’
go

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 455

Ahora empecemos a desarrollar. En Visual Studio 2008 creamos un nuevo si o web con lenguaje Visual
Basic y elegimos un Web Site; lo desarrollaremos en Visual Basic.

Luego nos ubicaremos en el explorador de soluciones y buscaremos la carpeta App_Code.

www.detodoprogramacion.org
456 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

En el App_Code, clic derecho y agregamos un nuevo item llamado LINQ TO SQL CLASSES.

Luego de haberlo seleccionado, realizaremos una conexión con el SQL.

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 457

Arrastramos las tablas y los procedimientos con las cuales vamos a trabajar, es decir, que de la base que
hemos seleccionado arrastramos todos los objetos.

Mostrando el WebForm donde desarrollaremos la aplicación, que se mostrará al ejecutar el sistema;


mejor dicho, la página Web en donde correrá el sistema trabajado con linq.

PROGRAMACIÓN QUE SE ELABORÓ PARA FUNCIONAMIENTO CORRECTO DEL LINQ


Ahora empezaremos con la programacion que hemos elaborado para que este buscador funcione
correctamente, para lo que hemos u lizado tecnología LINQ.

Se debe tomar en cuenta que para la conexión con la base de datos y los procedimientos deben
ser agregados al LINQ TO SQL CLASSES que se creó anteriormente y guardarlo para uƟlizar
nuestros procedimientos almacenados.

La forma de llamar a la conexión es Dim cn as new dataclassesdatacontext()

www.detodoprogramacion.org
458 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

A con nuación, pondremos el código que hemos desarrollado en los eventos donde hemos trabajado:
Imports System.Linq
Imports System.Data.Linq
Partial Class buscador
Inherits System.Web.UI.Page

Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal


e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.
PageIndexChanging
GridView1.PageIndex = e.NewPageIndex()
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
lista_todo()
End Sub

Protected Sub btnconsul_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btnconsul.Click
lis_parti()
lista_todo()
End Sub

Sub lista_todo()
Try

Dim a As String = txtempresa.Text


Dim b As String = txtdistr.Text
Dim c As String = txtdirec.Text
Dim d As String = txtnum_direc.Text
Dim f As String = txtact.Text
Dim cn As New DataClassesDataContext()
Dim que = cn.busXempXactXtodo1(a, b, c, d, f)
GridView1.DataSource = que
GridView1.DataBind()
Catch ex As Exception

End Try
End Sub

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles Button2.Click
GridView1.DataSource = “”
lis_parti()

End Sub

Sub lis_parti()
Try
Dim a1 As String = txtparticular.Text
Dim a2 As String = txtape1.Text
Dim a3 As String = txtape2.Text

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 459

Dim a4 As String = txtdirec.Text


Dim a5 As String = txtnum_direc.Text
Dim a6 As String = txtdistr.Text

Dim cn1 As New DataClassesDataContext()


Dim part = cn1.busxtodoxpar(a1, a2, a3, a4, a5, a6)

GridView1.DataSource = part
GridView1.DataBind()
Catch ex As Exception

End Try
End Sub

Protected Sub txtdistr_TextChanged(ByVal sender As Object, ByVal e As System.


EventArgs) Handles txtdistr.TextChanged
Try
Dim distr As String = txtdistr.Text
Dim cn2 As New DataClassesDataContext()
Dim cndis = cn2.busca_dis(distr)
GridView1.DataSource = cndis
GridView1.DataBind()
Catch ex As Exception

End Try
End Sub

End Class

Si nos damos cuenta, para este proceso de consultas múl ples no es necesario u lizar mucho código,
u lizando la clase linq podemos aprovechar al máximo las relaciones de las tablas, los procedimientos
almacenados, etc.

Bueno, siguiendo con los procesos que realiza la aplicación, podemos ver que en esta página se pueden
realizar búsquedas de números telefónicos de empresas y de personas par culares, con algunos datos
brindados por nuestros clientes.

Ahora procederemos a realizar los ejemplos.

www.detodoprogramacion.org
460 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

En la parte inferior se cargan todos los registros con los cuales se encuentran en la base de datos (en la
página se listan todas las empresas que existen).

En este ejemplo, lo que hacemos es escribir en distrito una parte de la palabra, y nuestro sistema
reconocerá las palabras relacionas con un autoposback.

Después, seleccionas el distrito que indicamos para confirmar que busque sólo en ese distrito toda la
información, tanto de personas par culares o empresas.

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 461

En este ejemplo realizamos la búsqueda de un par cular en ese distrito con el nombre y el primer
apellido del par cular, para ubicarlo en la dirección y teléfono que constan por ese nombre.

Ahora, buscaremos empresas pero por su ac vidad, en este caso ‘ocio’, pero podemos truncarlo, es
decir escribir las primeras letras.

Realizando la búsqueda se nos mostrarán dos registros que cumplen con la caracterís ca que hemos
puesto en ac vidad ‘ocio’ que existen en todos los distritos.

www.detodoprogramacion.org
462 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

En este caso, realizaremos la búsqueda de una empresa por su nombre y la dirección, cabe mencionar
que esto nos ayuda mucho por la razón que los bancos enen dis ntas sucursales y así podemos
realizar la búsqueda de un banco en un lugar específico para saber su número telefónico.

Realizamos la búsqueda de la empresa por el distrito seleccionado.

Bueno, este ejemplo nos ha servido para poder entrar al mundo de LINQ con ASP.NET, sigamos viendo
algunos más.

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 463

CONTINUANDO CON LINQ


Es un proyecto creado por Microso que agrega consultas na vas semejantes a las de SQL a los
lenguajes de la plataforma .NET, inicialmente a los lenguajes Visual Basic .NET y C#.

Se incluye en el Visual Studio 2008, en el cual nos va a permi r manipular mejor la información dentro
de nuestras aplicaciones; se basa en varias funcionalidades, tanto como XML y Base de datos, como
orientado a Objetos.

Muchos conceptos que LINQ fueron probados en Cω (C OMEGA), un proyecto de inves gación de
Microso .

OBJETIVO: El obje vo de crear LINQ es permi r que todo el código hecho en Visual Studio (incluidas
las llamadas a bases de datos, datasets, XMLs) sean también orientados a objetos. Antes de LINQ, la
manipulación de datos externos tenía un concepto más estructurado que orientado a objetos. Además,
LINQ trata de facilitar y estandarizar el acceso a dichos objetos.

USAR LINQ CON ASP.NET: Puede u lizar Language-Integrated Query (LINQ) en páginas web para
recuperar y modificar datos. LINQ aplica los principios de la programación orientada a objetos a los
datos relacionales. Proporciona un modelo de programación unificado para realizar consultas de datos
de pos diferentes de orígenes de datos.

Puede u lizar LINQ mediante el control LinqDataSource, el control ObjectDataSource o creando


consultas LINQ.

• Control Linqdatasource: Proporciona una manera fácil de conectar a los datos de una base de
datos o a una recolección de datos en memoria como una matriz. El control crea dinámicamente
las consultas LINQ a par r de los valores proporcionados mediante declaración.

Al recuperar datos de una clase de contexto de datos LINQ to SQL, también puede configurar
un control LinqDataSource para administrar las operaciones de actualización, inserción y
eliminación. El control realiza estas tareas sin requerir que se escriban comandos SQL para ello.

Ejemplo:
Para mostrar los datos en una página web, enlace un control enlazado a datos al control
LinqDataSource. Los controles GridView y DetailsView son ejemplos de controles enlazados a datos.

En el ejemplo siguiente, se muestra el marcado de un control LinqDataSource que conecta con


la base de datos AdventureWorks. Devuelve los registros de la tabla Contact cuya propiedad
EmailPromo on ene un valor igual a 1.

Mostraremos el marcado de un Control LinqDataSource que conecta con la base de datos


AdventureWorks. Devuelve los registros de la tabla Contact cuya propiedad EmailPromo on
ene un valor igual a 1.
<asp:LinqDataSource
ContextTypeName=”AdventureWorksDataContext”
TableName=”Contacts”
Where=”EmailPromotion=1”
ID=”LinqDataSource1”
runat=”server”>
</asp:LinqDataSource>

www.detodoprogramacion.org
464 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

• Control Objectdatasource: Se u liza cuando se desea interactuar con los datos de una manera
más compleja que la que permite el control LinqDataSource. Por ejemplo, puede crear un
método de actualización que permita establecer valores en tablas combinadas.

El control ObjectDataSource se puede u lizar con una clase LINQ to SQL. Para ello, se establece
la propiedad TypeName en el nombre de la clase de contexto de datos. También se establecen
los métodos SelectMethod, UpdateMethod, InsertMethod y DeleteMethod en los métodos de
la clase de contexto de datos que realizan las operaciones correspondientes.

Si u liza la ejecución diferida de consultas con el control ObjectDataSource, debe crear un


controlador de eventos para el evento ObjectDisposing con el fin de cancelar la eliminación de
la clase de contexto de datos. Este paso es necesario porque LINQ to SQL admite la ejecución
diferida, mientras que el control ObjectDataSource intenta eliminar el contexto de datos
después de la operación Select.

CONSULTAS LINQ: Puede incluir consultas LINQ en una página web sin u lizar un control de origen
de datos. Puede u lizar una consulta LINQ si necesita u lizar un operador de consulta que no está
disponible en el control LinqDataSource. También puede u lizarlo si desea mostrar datos de sólo
lectura en un control enlazado a datos sin el procesamiento necesario para crear un control de origen
de datos. Para obtener una lista de los operadores de consulta que están disponibles en el control
LinqDataSource, vea Información general sobre el control de servidor web LinqDataSource.

En el ejemplo siguiente, se muestra cómo incluir una consulta LINQ en una página web. El ejemplo
muestra los resultados de la consulta en un control GridView.

¿Qué es LINQ to SQL?

LINQ to SQL es una implementación de O/RM (object rela onal mapping, mapeador de objetos
relacionales) nos permite modelar bases de datos relacionales con clases de .NET. Podemos consultar
bases de datos con LINQ, así como actualizar, añadir, borrar datos de ellas.

• Modelando bases de datos con LINQ to SQL: Visual Studio viene con un diseñador de LINQ to
SQL que nos aporta una forma fácil de modelar y visualizar una base de datos como un modelo
de objeto de LINQ to SQL. Usando ese diseñador puedo crear fácilmente una representación de
la base de datos ‘Northwind’.

Ejemplo con LINQ


Para esto u lizaremos el asistente que trae Visual Studio 2008:
Seguiremos los siguientes pasos:
1. Creamos una solución en blanco en la carpeta LINQ.
2. Creamos un si o WEB.
3. Adicionamos una carpeta App_Code: (funciona como la carpeta Bin, salvo que se puede
almacenar código fuente en lugar de código compilado. La carpeta App_Code y su estado
especial en una aplicación Web ASP.NET permiten crear clases personalizadas y otros archivos
que sólo con enen código fuente, y u lizarlos en la aplicación Web sin tener que compilarlos
independientemente.)

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 465

4. Adicionamos un nuevo elemento Linq to SQL y le ponemos de nombre BASE_LINQ.

5. Usando el diseñador LINQ to SQL puedo crear fácilmente una representación de la base de
datos ‘Neptuno’. U lizaremos las tablas categoría y Neptuno para hacer un ejemplo sencillo:

www.detodoprogramacion.org
466 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Con esta acción debemos tener tres nuevos archivos en el proyecto:


• BASE_LINQ.dbml: es archivo xml que define el mapeo.
• BASE_LINQ.dbml.layout: es un archivo xml que u liza el diseñador.
• BASE_LINQ.designer.cs: archivo de C# donde se definen las clases y el contexto (la
conexión).

6. Realizaremos esta aplicación en el cual seleccionaremos una categoría del combo y en el


gridview veremos los productos que pertenezcan a esa categoría:

7. Seleccionamos el combo y elegimos un origen de po de dato, en este caso seleccionamos el


LINQ. Le ponemos como nombre BASE.

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 467

Luego realizaremos el siguiente proceso:

Con nuaremos de la siguiente manera:

www.detodoprogramacion.org
468 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

8. Nos aparecerán en el primer combo aquellas tablas que hemos seleccionado en el Linq to SQL;
en este caso, usaremos la tabla categoría y seleccionaremos aquellos campos que usaremos
para llenar nuestro combo. Y finalmente finish.

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 469

9. En este cuadro seleccionamos el campo que queremos que sea en el combo y los valores que
tendrán.

10. Al ejecutar este será nuestro resultado. Nuestro combo estará lleno con las categorías
correspondientes.

11. Ahora, llenaremos nuestro Gridview con los productos de acuerdo a la categoría seleccionada,
para ello, realizaremos los mismos pasos que realizamos en el combo, pero a nuestro nuevo
LINQ lo llamaremos BASE2.

Cuando lleguemos a este cuadro, seleccionaremos la tabla productos y de igual manera los
campos que mostraremos o usaremos, pero ahora seleccionamos el botón where para indicar
el campo que dará la condición, en este ejemplo será el campo idcategoria.

www.detodoprogramacion.org
470 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Y por úl mo, seleccionamos el botón adicionar.

12. Antes de ejecutar daremos un repaso a nuestro ejercicio, en el cual veremos cada uno de los
LINQ creados para cada control: BASE Y BASE2.

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 471

13. Esta será la presentación final, con nuestro pequeño ejemplo implementado seleccionamos
una categoría del combo y en el Gridview veremos los productos que pertenecen a la categoría.

ALGUNAS OBSERVACIONES PARA PODER TRABAJAR CON LINQ


Veamos un ejemplo de cómo poder trabajar con el Linq, para este ejemplo simple u lizaremos la base
de datos Northwind.

Crear el siguiente procedimiento almacenado:


Create Procedure dbo.Ins_Categoria
@ID int,
@Categoria nvarchar(30),
@Descripcion ntext,
@Imagen image

as
Insert Categories values (
@Categoria,
‘Esto es por Procedimiento almacenado’,
null
)

www.detodoprogramacion.org
472 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Observar el siguiente modelo a usar:

Seleccionar la tabla categoría y observar que el método de inserción es realizado por el Run me de
Linq.

Dentro del Web Form, en el método dentro del botón, creamos lo siguiente:

protected void Insert_Click(object sender, EventArgs e)


{
NorthwindDataContext db = new NorthwindDataContext();
Category ct = new Category { CategoryName = “Condimentos”,
Description = “Desde nuestra aplicación” };

db.Categories.InsertOnSubmit(ct);
db.SubmitChanges();

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 473

Ejecutemos el método y verifiquemos en la tabla de la BD.

Arrastremos el procedimiento como objeto en el modelo de datos.

www.detodoprogramacion.org
474 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Seleccionemos la tabla Categorías, y en propiedades modifiquemos la opción Insert por Use Run me.

Dentro de esta opción seleccionamos Customize, para seleccionar el procedimiento almacenado


creado.

Acá enlazamos con los campos correspondientes de los campos de la tabla con los campos de la
en dad categoría, así como se muestra en la siguiente figura:

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 475

Volvamos a ejecutar el proyecto y obtendremos lo siguiente:

Observación:
Retrasar la carga
LINQ to SQL permite a los desarrolladores especificar si las propiedades de las en dades deben
precargarse o retrasarse hasta el primer acceso. Podemos personalizar las reglas de precarga/retraso
para las propiedades de las en dades seleccionando cualquier propiedad o asociación en el diseñador,
y en las propiedades poner la propiedad ‘Delay Loaded’ a true o false.

Por poner un ejemplo, imaginemos la clase en dad ‘Category’ del modelo anterior. La tabla ‘Categories’
de la base de datos ‘NorthWind’ ene una columna ‘Picture’ que contenga una imagen (potencialmente
grande) para cada categoría, y sólo queremos esa imagen cuando vaya a usarla (y no cuando esté
haciendo una consulta para obtener los nombres de las categorías en una lista).

Podríamos configurar la propiedad Picture para que retrase su carga seleccionándola en el diseñador
de LINQ to SQL, y en las propiedades poner ‘Delay Loaded’ a true:

Además de configurar el significado de la precarga/retraso de las enƟdades, podemos


sobrescribirlo vía código cuando hagamos consultas LINQ en las clases enƟdad (lo veremos en el
siguiente post de esta serie).

www.detodoprogramacion.org
476 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Otro ejemplo de LINQ


Nuestro ejemplo consis rá en lo siguiente: en el menú tenemos clientes, empleados, productos,
consultas y pedidos, que desarrollaremos de la siguiente manera: haremos mantenimiento al cliente,
empleado y producto usando LINQ. Haremos una búsqueda de clientes por código.

1. Primero realizaremos nuestro mantenimiento de clientes, usando LINQ este será nuestro
diseño:

2. Usando el diseñador LINQ to SQL que ya usamos en el ejemplo anterior, seleccionamos la tabla
que usaremos.

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 477

3. Guardaremos nuestro archivo LINQ to SQL.

4. Agregamos el LINQ al Gridview, en donde realizaremos el mantenimiento al cliente.

www.detodoprogramacion.org
478 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

5. Agregamos el LINQ y le pondremos como nombre LINQClientes.

Y con nuamos dando clic en el siguiente:

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 479

6. Seleccionamos la tabla que usaremos, en este caso la tabla clientes, luego seleccionamos el
botón ADVANCED.

7. Automá camente aparecerá la siguiente ventana, la cual nos brinda opciones de eliminar,
insertar y actualizar. Siguiendo, ac varemos los recuadros para realizar nuestro manteamiento.

www.detodoprogramacion.org
480 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

8. Al finalizar ac varemos la paginación, la edición y la eliminación:

9. Al ejecutar probaremos la opción de editar los datos del cliente y actualizamos.

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 481

Y así podemos editar el registro para realizar la modificación.

10. Ahora eliminaremos los datos del cliente.

www.detodoprogramacion.org
482 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

REALIZANDO UNA TERCERA CONSULTA CON LINQ


Este será el diseño que realizaremos usando una ventana emergente para mostrar el detalle del
producto seleccionado.

U lizando el LINQ to SQL, usaremos la tabla Categoria para realizar este primer diseño.

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 483

Siempre debemos guardar el archivo creado, que en este caso le pusimos como nombre DataCategoria.
dbml.

Mostramos la ubicación, así como se muestra el archivo creado y guardado.

www.detodoprogramacion.org
484 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Ahora procederemos a usar el LINQDATASOURCE en el GridView.

Seleccionamos el LINQ y le pondremos como nombre LINCATEGORIA.

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 485

Seleccionamos el archivo dbml que hemos creado para realizar este ejemplo. Luego seleccionamos la
tabla que usaremos con sus respec vos campos.

www.detodoprogramacion.org
486 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Al ejecutar, este será nuestro resultado:

Ahora, al hacer clic en el botón, se mostrará una ventana emergente en la cual mostraremos todos
aquellos productos que pertenezcan a esa categoría.

Realizaremos este diseño:

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 487

Primero, en el formulario que llamará a la ventana emergente tendremos que hacer este código:
Protected Sub GridView1_PreRender(ByVal sender As Object, ByVal e As System.
EventArgs) Handles GridView1.PreRender
For i As Integer = 0 To Me.GridView1.Rows.Count - 1
Dim btn As Button = CType(GridView1.Rows(i).Cells(3).Controls(1), Button)
btn.Attributes.Add(“Onclick”, “window.open(‘Default.aspx?cod=” & GridView1.
Rows(i).Cells(0).Text & “&cat=” & GridView1.Rows(i).Cells(1).Text & “’)”)
Next
End Sub

De esta manera, tendremos el formulario ya realizado y ejecutado. Para ello tuvimos que usar este
código:
Partial Class _Default
Inherits System.Web.UI.Page
Dim cn As New System.Data.SqlClient.SqlConnection(“server=(local);integrated
security=sspi;database=neptuno”)

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
If Not Page.IsPostBack Then
lblcodigo.Text = Request.QueryString(“cod”)
lblcategoria.Text = Request.QueryString(“cat”)
Dim cad As String = “select idproducto,nombreproducto,CantidadPorUnid
ad,” & _
“PrecioUnidad,UnidadesEnExistencia from productos where idcategoria=”
& CInt(Request.QueryString(“cod”))
Dim da As New System.Data.SqlClient.SqlDataAdapter(cad, cn)
Dim tbl As New System.Data.DataTable
da.Fill(tbl)
GridView1.DataSource = tbl
Session(“zadith”) = tbl
GridView1.AllowPaging = True
GridView1.PageSize = 5
GridView1.DataBind()
End If
End Sub

Ahora veamos otros eventos:


Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal
e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.
PageIndexChanging
GridView1.PageIndex = e.NewPageIndex
GridView1.DataSource = Session(“zadith”)
GridView1.DataBind()
End Sub
End Class

www.detodoprogramacion.org
488 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Seleccionamos el botón ‘Consultar Producto’.

Mostramos los productos de la categoría seleccionada.

EJEMPLO CON LINQ - CONSULTA Y MANTENIMIENTO


En este ejemplo haremos dos pos de búsqueda, ya sea por código de cliente o mostramos todos los
clientes; al seleccionar un cliente veremos la can dad de pedidos por ese cliente, luego al seleccionar
un pedido veremos los detalles de ese pedido y, finalmente, al seleccionar el pedido veremos todos los
productos que con ene, todo referente al primer cliente seleccionado.

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 489

Para poder hacer este ejemplo, tenemos que crear vistas en la base de datos en las cuales estamos
trabajando.
CREATE VIEW CLIENTES_PEDIDOS_VENTAS
AS
SELECT TOP 89 C.IDCLIENTE,NOMBRECOMPAÑIA,COUNT(P.IDPEDIDO) AS [CANTIDAD PEDIDOS],
SUM(PRECIOUNIDAD*CANTIDAD) AS [TOTAL DE VENTA]
FROM CLIENTES C ,PEDIDOS P,[DETALLES DE PEDIDOS]DT
WHERE C.IDCLIENTE=P.IDCLIENTE AND P.IDPEDIDO=DT.IDPEDIDO
GROUP BY C.IDCLIENTE,NOMBRECOMPAÑIA
ORDER BY C.IDCLIENTE ASC
GO

CREATE VIEW LISTADOPEDIDOS


As
SELECT IDCLIENTE,IDPEDIDO,CONVERT(CHAR(10),FECHAPEDIDO,103) AS FECHA,CARGO,DATEDIF
F(DAY,FECHAPEDIDO,FECHAENVIO)
AS [DIAS DE DEMORA] FROM PEDIDOS
go

CREATE VIEW LISTADODETALLE


AS
SELECT IDPEDIDO,P.IDPRODUCTO,NOMBREPRODUCTO,DT.PRECIOUNIDAD,CANTIDAD,(DT.
PRECIOUNIDAD*CANTIDAD) AS TOTAL
FROM [DETALLES DE PEDIDOS]DT ,PRODUCTOS P WHERE P.IDPRODUCTO=DT.IDPRODUCTO
GO

www.detodoprogramacion.org
490 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Una vez creada las vistas, haremos el LINQ to SQL para hacer el llamado de nuestras vistas. Y los
llamaremos LinkTemporal.

Llamamos a las vistas creadas desde la ubicación que indicamos en la figura:

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 491

Una vez creadas las vistas tenemos que relacionarlas.

Guardamos los cambios. Y al seleccionar el primer Gridview seleccionamos el LinkTemporal que hemos
creado previamente.

www.detodoprogramacion.org
492 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Repe mos todos los pasos que anteriormente hemos señalado, y al ejecutar este será el resultado.
Seleccionamos el botón por código e ingresamos el código:

Ahora seleccionamos el botón Todos.

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 493

Ahora, al seleccionar mostraremos los pedidos del cliente y seguiremos los siguientes pasos. Para
mostrar los pedidos del cliente realizamos los siguientes pasos:

Seleccionamos la vista LISTADOPEDIDOS.

www.detodoprogramacion.org
494 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Al seleccionar el botón WHERE, tenemos que indicar el idcliente, que es el campo foráneo entre las
dos vistas:

Al finalizar y ejecutar, este será el resultado, seleccionamos el cliente y sus respec vos pedidos:

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 495

Finalmente, veremos los productos por pedido seleccionado. Para ello tendremos que hacer esta
pequeña programación:
Protected Sub GridView3_SelectedIndexChanged(ByVal sender As Object, ByVal e As
System.EventArgs) Handles GridView3.SelectedIndexChanged
Dim cad As String = “select * from listadodetalle where idpedido=” &
GridView3.SelectedRow.Cells(1).Text
Dim da As New System.Data.SqlClient.SqlDataAdapter(cad, cn)
Dim tbl As New System.Data.DataTable
da.Fill(tbl)
GridView4.DataSource = tbl
GridView4.DataBind()
End Sub

Este será el resultado ejecutado:

www.detodoprogramacion.org
496 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

EJEMPLOS DE LINQ CON CONEXIÓN A MYSQL


En este ejemplo, se deberán cargar las ciudades de todos los empleados en el dropdowlist; cuando se
elija una ciudad se mostrarán a los empleados de dicha ciudad, al elegir un empleado se mostrarán las
órdenes que realizó y, por úl mo, al seleccionar una orden se mostrará en el gridview los productos de
esa orden realizando el cálculo respec vo, como se muestra en el ejemplo:

Para realizar consultas de LINQ con la base de datos MySQL se necesita el instalador de doConnect
for MySQL, que se puede descargar del siguiente link: hƩp://www.devart.com/dotconnect/, que nos
permite realizar accesos de modo LINQ con MySQL:

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 497

Luego veremos la siguiente página, donde nos permi rá hacer los downloads de la página principal:

Ahora, luego de haber realizado la descarga vamos a instalar el driver:

www.detodoprogramacion.org
498 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Inmediatamente, seguimos la secuencia de instalación.

Luego aceptamos la forma de licencia.

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 499

Luego, seleccionamos la carpeta donde deseamos realizar la instalación.

Decidimos que sea full instalación.

www.detodoprogramacion.org
500 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Y luego, si deseamos, lo adicionamos al menú del sistema opera vo.

Adicionamos el toolbox al Visual Studio.

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 501

Y empezamos con la instalación del MySql.

Aquí notamos los componentes de MySQL para LINQ que se agregan al Visual Studio después de haber
concluido la instalación:

www.detodoprogramacion.org
502 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Después de adicionar, creamos un nuevo proyecto Web en el lenguaje que deseen. En este ejemplo
u lizaremos el Visual C#.

Agregamos un nuevo App_Code para que se puedan guardar los archivos que se generan al agregar el
contexto de MySQL.

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 503

Agregamos un nuevo elemento de po LINQ to SQL Model, que se agregó automá camente después
de instalar el driver anteriormente mencionado; este archivo nos abrirá una interfaz que nos permi rá
la conexión con MySQL:

Ahora realizaremos la conexión con MySQL ingresando los siguientes parámetros, realizamos un test a
la conexión para que todo este OK.

www.detodoprogramacion.org
504 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Aquí en el panel que se muestra, se podrán arrastrar las en dades de la base datos la cual seleccionamos:

Para el ejemplo, arrastraremos las en dades que necesitamos; observemos que también trae sus
propias relaciones entre ellas, para de esa manera facilitar las consultas que deseemos realizar.

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 505

Ahora entraremos a la programación del ejercicio propuesto: instanciamos una variable a la clase
ContextNortwind:

Se declara una variable LINQ (ciudades), esta tendrá una variable pivote que instancia la tabla
Employees; seleccionamos el campo ciudad y aplicamos la propiedad Dis nct() para que los datos no
se repitan:

Para el dropdowlist se declara una variable que recupera su valor y realizamos lo mismo que en
el ejemplo anterior, con la diferencia que manejamos una condicional where (donde) en la cual
comparamos que la ciudad seleccionada sea igual a las de los empleados de esa ciudad.

www.detodoprogramacion.org
506 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Realizar lo mismo para el listbox2 anterior:

Al igual que los ejemplos anteriores, se declara la variable linq, pero en este caso se relacionan 3
en dades; para calcular la suma de total de la venta del pedido elegido se agrega a la consulta anterior
la propiedad Sum(instancia=> instancia.columna_a_sumar).

www.detodoprogramacion.org
Capítulo 6: Aplicación trabajando con Linq (ejemplos cortos) 507

Y bueno, el ejemplo resuelto se mostraría de la siguiente manera:

Bueno, ya hemos visto varios ejemplos de cómo trabajar con el Linq; en la carpeta Capítulo VII podemos
encontrar todos los ejemplos de este capítulo.

www.detodoprogramacion.org
CAPÍTULO

Aplicación de
7 Facturación WEB

EJEMPLO DE CONCURRENCIAS
Bien, vamos a trabajar un ejemplo de concurrencia. El caso es que es una po de control de registros
de los manejos de información, de tal manera que podamos controlar que el registro que estamos
seleccionando no lo podemos u lizar hasta que lo liberemos de la primera selección. Ahora veamos
cómo trabaja el ejemplo:

En primer término, tenemos cargado un formulario que se llama producto.aspx, el cual te permite
hacer consultas; en este caso estamos consultando productos y hemos elegido el producto 11, tal
como se ve en el ejemplo:

www.detodoprogramacion.org
510 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

En ese mismo instante, lanzamos otro formulario al cual le llamamos Lista_Producto.aspx, en el que
podemos seleccionar cualquier registro; en este caso vamos a seleccionar el mismo registro, tal como
se ve en el ejemplo:

En ese caso, vamos a modificar el registro seleccionado, de tal manera que cambiaremos el stock, de
esta manera:

www.detodoprogramacion.org
Capítulo 7: Aplicación de Facturación WEB 511

Seguidamente, vamos a dar clic en el botón actualizar, produciéndose este mensaje de error:

Y luego, si liberamos esto, el archivo de consulta de la grabación se hará efec va, tal como se muestra
en el siguiente cuadro:

Bien, ahora empezaremos a ver el código que hemos realizado, pero ante debemos decir que vamos a
trabajar con la base de datos NegocioWeb_Data; también se debe correr el siguiente script:
use NegocioWeb
go

create PROCEDURE ActualizarProducto1


(
@IdProducto int,
@NombreProducto nvarchar(40),
@CantidadPorUnidad nvarchar(20),
@PrecioUnidad money,
@UnidadesEnExistencia smallint

)
AS

UPDATE Productos
SET NombreProducto = @NombreProducto,
CantidadPorUnidad = @CantidadPorUnidad,
PrecioUnidad = @PrecioUnidad,
UnidadesEnExistencia = @UnidadesEnExistencia
WHERE IdProducto = @IdProducto

www.detodoprogramacion.org
512 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Ahora veamos la codificación que hemos realizado en los dos diferentes WebForms con los cuales
hemos trabajado.

Empecemos con la página Lista_Producto.aspx, este es el script; primero veamos las validaciones que
hemos insertado en la página, lo vamos a ver por el código HTML.

Codigo HTML
<tr>
<td style=”height: 26px; text-align: right”> Código Producto</td>
<td style=”height: 26px; text-align: left”>
<asp:TextBox ID=”txtidprodcto” runat=”server” Width=”185px”
Enabled=”False”></asp:TextBox>
<asp:RequiredFieldValidator ID=”RequiredFieldValidator1” runat=”server”
ControlToValidate=”txtidprodcto” ErrorMessage=”Debe ingresar el codigo
del producto”> *
</asp:RequiredFieldValidator></td>
</tr>
<tr style=”color: #000000”>
<td style=”height: 21px; text-align: right”> Nombre Producto</td>
<td style=”height: 21px; text-align: left”>
<asp:TextBox ID=”txtnombreproducto” runat=”server” Width=”183px”></
asp:TextBox>
<asp:RequiredFieldValidator ID=”RequiredFieldValidator2” runat=”server”
ControlToValidate=”txtnombreproducto”ErrorMessage=”Debe ingresar el nombre
del producto”> *
</asp:RequiredFieldValidator></td>
</tr>
<tr style=”color: #000000”>
<td style=”height: 21px; text-align: right”>Precio</td>
<td style=”height: 21px; text-align: left”>

www.detodoprogramacion.org
Capítulo 7: Aplicación de Facturación WEB 513

<asp:TextBox ID=”txtPrecio” runat=”server” Width=”183px”></asp:TextBox>


<asp:RequiredFieldValidator ID=”RequiredFieldValidator3” runat=”server”
ControlToValidate=”txtPrecio”ErrorMessage=”Debe ingresar el precio del
producto”>*
</asp:RequiredFieldValidator></td>
</tr>
<tr style=”color: #000000”>
<td style=”height: 21px; text-align: right”> Stock</td>
<td style=”height: 21px; text-align: left”>
<asp:TextBox ID=”txtStock” runat=”server” Width=”181px”></asp:TextBox>
<asp:RequiredFieldValidator ID=”RequiredFieldValidator4” runat=”server”
ControlToValidate=”txtStock” ErrorMessage=”Debe ingresar el
stock”>*
</asp:RequiredFieldValidator></td>
</tr>
<tr style=”color: #000000”>
<td style=”height: 21px; text-align: right”> Canrtidad por unidad</td>
<td style=”height: 21px; text-align: left”>
<asp:TextBox ID=”txtCantidadporunidad” runat=”server” Width=”181px”></
asp:TextBox>
<asp:RequiredFieldValidator ID=”RequiredFieldValidator5” runat=”server”
ControlToValidate=”txtStock” ErrorMessage=”Debe ingresar la cantidad
por unidad”>*
</asp:RequiredFieldValidator></td>
</tr>

Ahora sí, empecemos. Veamos el código que hemos desarrollado en los eventos:
Imports System.Data
Imports System.Data.Sql
Imports System.Data.SqlClient
Partial Class Lista_Producto
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)


Handles Me.Load
listar()
End Sub

Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal


e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.
PageIndexChanging
GridView1.PageIndex = e.NewPageIndex
End Sub

Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e


As System.EventArgs) Handles GridView1.SelectedIndexChanged
txtidprodcto.Text = GridView1.SelectedRow.Cells(0).Text
Dim nom As String
nom = GridView1.SelectedRow.Cells(1).Text
If nom.IndexOf(“&”) >= 0 Then
Dim aux, l As String
aux = nom.Substring(nom.IndexOf(“&”), 6)
l = letra(aux)

www.detodoprogramacion.org
514 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

txtnombreproducto.Text = (nom.Insert(nom.IndexOf(“&”), l)).Remove(nom.


IndexOf(“&”) + 1, 6)
Else
txtnombreproducto.Text = GridView1.SelectedRow.Cells(1).Text
End If
txtPrecio.Text = GridView1.SelectedRow.Cells(3).Text
txtStock.Text = GridView1.SelectedRow.Cells(4).Text
txtCantidadporunidad.Text = GridView1.SelectedRow.Cells(2).Text
End Sub

Protected Sub btnactualizar_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btnactualizar.Click
Try
Dim cn As New SqlConnection
cn.ConnectionString = “Data source=.;database=negocioweb;integrated
security=yes”
Dim cmd As New SqlCommand(“ActualizarProducto1”, cn)
cmd.Connection = cn
‘’Creamos un comando pàra ejecutar el procedimiento almacenado
‘’Definimos el tipo de comando
cmd.CommandType = Data.CommandType.StoredProcedure
‘’Le pasamos valor a cada uno de los parametros
cmd.Parameters.AddWithValue(“@idproducto”, txtidprodcto.Text)
cmd.Parameters.AddWithValue(“@Nombreproducto”, txtnombreproducto.Text)
cmd.Parameters.AddWithValue(“@Preciounidad”, txtPrecio.Text)
cmd.Parameters.AddWithValue(“@unidadesEnExistencia”, txtStock.Text)
cmd.Parameters.AddWithValue(“@CantidadPorunidad”,
txtCantidadporunidad.Text)
cn.Open() : cmd.ExecuteNonQuery() : cn.Close()
Catch ex As Exception
Response.Write(“<script>alert(‘” + ex.Message.ToString() + “’)</
script>”)
End Try
listar()
End Sub

Sub listar()
Dim cn As New SqlConnection
Dim da As New SqlDataAdapter
Try
Dim comando As New SqlCommand
comando.Connection = cn
Dim ds As New DataSet
cn.ConnectionString = “Data source=.;database=negocioweb;integrated
security=yes”
comando.CommandType = Data.CommandType.Text
comando.CommandText = “SELECT * FROM Productos”
da.SelectCommand = comando
cn.Open()
da.Fill(ds)
GridView1.DataSource = ds.Tables.Item(0)
GridView1.DataBind()

www.detodoprogramacion.org
Capítulo 7: Aplicación de Facturación WEB 515

Catch ex As Exception
Response.Write(“<script>alert(‘” + ex.Message.ToString() + “’)</
script>”)
Finally
cn.close()
cn.Dispose()

End Try
End Sub

Protected Sub btnsalir_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btnsalir.Click
Response.Write(“<script>window.close()</script>”)
End Sub
Public Function letra(ByVal l As String) As String
Dim meses() As String = {“&#225;”, “&#233;”, “&#237;”, “&#243;”, “&#250;”,
“&#241;” _
, “&#193;”, “&#201;”, “&#205;”, “&#211;”,
“&#218;”, “&#209;”}
Dim caracter() As String = {“á”, “é”, “í”, “ó”, “ú”, “ñ”, “Á”, “É”, “Í”,
“Ó”, “Ú”, “Ñ”}
Dim i As Integer = 0
For i = 0 To 11
If l.Equals(meses(i)) Then
i = +i
Exit For
End If
Next
Return caracter(i)
End Function
End Class

Ahora veamos el código que se ha escrito en el producto.aspx:

www.detodoprogramacion.org
516 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Imports System.Data
Imports System.Data.SqlClient
Partial Class _Default
Inherits System.Web.UI.Page

Protected Sub btnbuscar_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btnbuscar.Click
Try
Dim cn As New SqlConnection()
Dim transaccion As SqlTransaction
Dim da As New SqlDataAdapter
Dim comando As New SqlCommand
comando.Connection = cn
Dim ds As New DataSet
cn.ConnectionString = “Data source=.;database=negocioweb;integrated
security=yes”
comando.CommandType = Data.CommandType.Text
comando.CommandText = “SELECT
Idproducto,NombreProducto,CantidadPorUnidad,PrecioUnidad,UnidadesEnExistencia FROM
Productos WITH (Rowlock,Xlock) “ + “WHERE Idproducto = @ID”
comando.Parameters.AddWithValue(“@ID”, txtidprodcto.Text)
da.SelectCommand = comando
cn.Open()
transaccion = cn.BeginTransaction(IsolationLevel.ReadCommitted)
comando.Transaction = transaccion
da.Fill(ds)
txtidprodcto.Text = ds.Tables.Item(0).Rows(0)(0).ToString()
txtnombreproducto.Text = ds.Tables.Item(0).Rows(0)(1).ToString()
txtCantidadporunidad.Text = ds.Tables.Item(0).Rows(0)(2).ToString()
txtPrecio.Text = ds.Tables.Item(0).Rows(0)(3).ToString()
txtStock.Text = ds.Tables.Item(0).Rows(0)(4).ToString()
Catch ex As Exception
Response.Write(“<script>alert(‘” + ex.Message.ToString() + “’)</
script>”)
End Try
End Sub

Protected Sub btnsalir_Click(ByVal sender As Object, ByVal e As System.


EventArgs) Handles btnsalir.Click
Response.Write(“<script>window.close()</script>”)
End Sub
End Class

www.detodoprogramacion.org
Capítulo 7: Aplicación de Facturación WEB 517

APLICACIÓN DE FACTURACIÓN EN WEB


Este es un módulo automa zado, donde sólo se cambian los datos de la empresa y se adaptan a otra
empresa; también se cuenta con locales separados, y si se inserta un nuevo local (con su dirección,
teléfono, fax, etc.), este también cargaría a la factura. Los usuarios pueden ingresar a un sólo local,
pero pueden consultar las futuras de otros locales.

INGRESO DE USUARIO
- Se quiso controlar el acceso de personal para el manejo de la factura.
- Se debe ingresar su id de empleado y una contraseña que se le asigna, en este logueo se valida que
el usuario exista y que esté ac vo.

MENÚ DE OPCIONES:

Una vez registrado el usuario, visualizaremos una lista de opciones de trabajo a realizar. Estas son:

Ingresar Nueva Factura: según el local al cual pertenece el usuario, se mostrará su número de factura.
Consulta de Facturas: acá se hacen todas las consultas sobre las facturas.

Anular Facturas: las facturas que enen problemas y deben ser anuladas; no todos los empleados
pueden anular una factura, sólo los administradores.

www.detodoprogramacion.org
518 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

INGRESO DE NUEVA FACTURA


Al darle clic a la opción de Nueva Factura, nos muestra esta página:

1.- Acá se ve el local y el número de factura que se ha generado en ese local.

2 3

Si el cliente no está registrado, nos da la opción de registrarlo, ingresamos sus datos y le damos clic al
link Insertar Cliente.

Al insertar con éxito al cliente, ya podemos visualizar su código de cliente, al costado de su nombre;
con esto ya podemos empezar a registrar la factura.

www.detodoprogramacion.org
Capítulo 7: Aplicación de Facturación WEB 519

Búsqueda de Cliente, en el caso de ya tenerlo registrado, se da clic en esta opción para buscarlo.

Los pos de búsqueda son por nombre, código y ruc; según lo que escribamos y le demos clic en el
botón buscar, cargará los datos.

Nosotros sólo le damos clic al link seleccionar y cargarán sus datos en las cajas de texto.

Se busca los productos para la factura.

Se da clic al hipervínculo, nos mostrará


un panel con tres opciones y un botón
para buscar. Si queremos que cargue
todos los productos, le damos clic al
botón, si queremos hacer una búsqueda
seleccionamos una opción y escribimos el
texto a buscar; seguidamente, damos clic
al botón buscar para agregar un producto a
la factura, ingresamos la can dad en la caja
de texto que está en la fila del producto a
seleccionar y le damos clic en Agregar.

www.detodoprogramacion.org
520 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Si la can dad a sacar es menor a la can dad actual, no se podrá solicitar ese producto.

Una vez que le damos clic a agregar, se guardará en nuestro detalle de la factura.

Aquí podemos seguir ingresando nuestros productos, incluso los mismos, sólo actualizaría la can dad,
y esta debe de ser menor al stock.

www.detodoprogramacion.org
Capítulo 7: Aplicación de Facturación WEB 521

Una vez que tenemos nuestros productos ya ingresados, le daremos clic al botón aceptar.

Nos pedirá una confirmación para guardar la factura, le damos ok.

Luego, se insertará la factura y nos mostrará el nuevo número de factura.

Botones de opciones, acá se registra, cancela o limpia los datos de la factura.

www.detodoprogramacion.org
522 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

CONSULTA DE FACTURAS
Acá hay 5 modos de búsqueda:
- Búsqueda de las facturas mayores a una fecha.
- Búsqueda de Factura entre 2 fechas.
- Búsqueda por nombre de cliente.
- Búsqueda por Nombre de Empleado.
- Búsqueda mayor a un monto ingresado.

ANULAR FACTURAS
Estas se cargan por local y sólo los ven los que enen privilegios.

Cuando el local no ene facturas disponibles, se mostrará así:

www.detodoprogramacion.org
Capítulo 7: Aplicación de Facturación WEB 523

Cuando el usuario no ene privilegios.

Y la vista normal de local con facturas y usuarios con privilegios.

Acá se selecciona una factura, carga los datos, le damos clic en anular y se anula la factura.
Nos pedirá una confirmación para anular la factura.

www.detodoprogramacion.org
524 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Se le confirma y la factura quedará anulada.

Bueno, hemos visto cómo trabaja el proceso de facturacion. Ahora sería bueno que tú mejores este
módulo para que se adecue a las necesidades que pudieras tener.

Vamos ver un poco la estructura de cómo hemos trabajado:

Por ejemplo, hemos creado tres clases que van a tener las funciones y subru nas, propiedades y
variables con las cuales se trabajarán:

www.detodoprogramacion.org
Capítulo 7: Aplicación de Facturación WEB 525

Tenemos las 3 clases clásicas:


- Datos: manejo de procedimientos, funciones y métodos con los cuales se va a trabajar en la
base de datos.
- EnƟdad: cada en dad de cada una de las tablas con las cuales estamos trabajando en la base de
datos, tal como se aprecia en el gráfico.
- Negocio: donde ponemos las reglas de negocio de la empresa, que están relacionadas con la
clase de en dad y la clase de negocio.

Ahora vemos la construcción de alguno de los formularios, por ejemplo:

Default.aspx

La cual consta del siguiente script:


sing System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using PF.Entidad;
using PF.Negocio;
public partial class _Default : System.Web.UI.Page
{
PF.Negocio.EmpresaNeg neg = new EmpresaNeg();
protected void Page_Load(object sender, EventArgs e)
{ if (!Page.IsPostBack) {
Empresa emp = neg.CargaEmpresa();
lbldescrip.Text = emp.Descripcion1;
lblnomemp.Text = emp.NomEmp1;
lblrazon.Text = emp.RazonSocial1;
imgemp.ImageUrl =”Imagenes\\”+ emp.RutaImg;
}
}
protected void btnenviar_Click(object sender, EventArgs e)

www.detodoprogramacion.org
526 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

{ String[] usu=neg.buscarNombreUsuario(int.Parse(txtcod.Text),txtpass.Text);
if (int.Parse(usu[0]) > 0)
{
usu[0] = txtcod.Text;
Session[“usu”] = usu;
Server.Transfer(“Menu.aspx”);
}
else { lblmsj.Text = “Codigo u Contraseña Incorrecta”; }
}
}

Antes de ver el WebForm menu, debemos ver el masterpage que lo ene como base.

Para esto, veamos el codigo HTML que con ene este Master Page:
<html xmlns=”http://www.w3.org/1999/xhtml” >
<head runat=”server”>
<title>Untitled Page</title>
</head>
<body>
<form id=”form1” runat=”server”>
<div>
&nbsp;<table style=”width: 1144px”>
<tr>
<td colspan=”3” style=”height: 98px; text-align: left”>
<table>
<tr>
<td style=”width: 100px; text-align: right”>
<asp:Label ID=”Label1” runat=”server” Font-
Bold=”True” ForeColor=”#000099” Text=”Numero:”></asp:Label></td>
<td style=”width: 275px; text-align: left”>
<asp:Label ID=”lblnum” runat=”server” Font-
Bold=”True”></asp:Label></td>
</tr>
<tr> <td style=”width: 100px; height: 21px; text-align:
right”>

www.detodoprogramacion.org
Capítulo 7: Aplicación de Facturación WEB 527

<asp:Label ID=”Label2” runat=”server” Font-


Bold=”True” ForeColor=”#000099” Text=”Usuario:”></asp:Label></td>
<td style=”width: 275px; height: 21px; text-align:
left”>
<asp:Label ID=”lblusu” runat=”server” Font-
Bold=”True”></asp:Label></td>
</tr>
</table>
</td>
</tr>
<tr> <td colspan=”3” style=”text-align: left”>
<strong><span style=”font-size: 20px; color: #000099”>&nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;Menu
de Opciones:</span></strong></td>
</tr>
<tr> <td style=”width: 536px; text-align: center”>
<table style=”height: 148px”>
<tr> <td style=”width: 187px; height: 21px; text-align:
right”>
<asp:LinkButton ID=”LinkButton1” runat=”server”
OnClick=”LinkButton1_Click” PostBackUrl=”~/nuevafactura.aspx”>Ingresar Nueva
Factura</asp:LinkButton></td>
</tr>
<tr> <td style=”width: 187px; height: 21px; text-align:
right”>
<asp:LinkButton ID=”LinkButton2” runat=”server”
PostBackUrl=”~/ConsultaFactura.aspx”>Consultas de Facturas</asp:LinkButton></td>
</tr>
<tr> <td style=”width: 187px; text-align: right; height:
21px;”>
<asp:LinkButton ID=”LinkButton3” runat=”server”
PostBackUrl=”~/ModificarFactura.aspx”>Anular Factura</asp:LinkButton></td>
</tr>
<tr> <td style=”width: 187px; text-align: right”>
<asp:LinkButton ID=”LinkButton4” runat=”server”
PostBackUrl=”~/ReporteFactura.aspx” Visible=”False”>Reportes de Facturas</
asp:LinkButton></td>
</tr>
<tr> <td style=”width: 187px; text-align: right”>
<asp:LinkButton ID=”LinkButton5” runat=”server”
Visible=”False”>Modificar Tipo Cambio</asp:LinkButton></td>
</tr>
<tr> <td style=”width: 187px; height: 21px; text-align:
right”>
<asp:LinkButton ID=”LinkButton6” runat=”server”
OnClick=”LinkButton6_Click” PostBackUrl=”~/Default.aspx”>Salir</asp:LinkButton></
td>
</tr>
</table>
</td>
<td colspan=”2”>
<asp:contentplaceholder id=”ContentPlaceHolder1” runat=”server”>
</asp:contentplaceholder>
</td>

www.detodoprogramacion.org
528 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

</tr>
<tr>
<td style=”width: 536px”> </td>
<td style=”width: 452px”> </td>
<td style=”width: 443px”> </td>
</tr>
</table>
</div>
</form>
</body>
</html>
<script language=”javascript”>
function soloNumeros(){
var x=window.event.keyCode;

if((x>=48 && x<=57)||(x==8))


{
window.event.returnValue=true;
}else
{
window.event.returnValue=false;
}
}
</script>

Ahora veamos el WebForm menu.aspx:

El cual consta del siguiente código en los eventos:


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;

www.detodoprogramacion.org
Capítulo 7: Aplicación de Facturación WEB 529

using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Menu : System.Web.UI.Page


{
protected void Page_Load(object sender, EventArgs e)
{
String[] usu = (String[])Session[“usu”];
lblnum.Text = usu[0];
lblusu.Text = usu[1];
}
protected void LinkButton6_Click(object sender, EventArgs e)
{
Session[“usu”]=new String[2];
Server.Transfer(“Default.aspx”);
}

ConsultaFactura.aspx:

Ahora, el código que a con nuación sigue está escrito en el código HTML:

<script runat=”server”>
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//son 5 textbox que se deshabilitan al inicio
txtclie.Enabled = false;
txtemp.Enabled = false;

www.detodoprogramacion.org
530 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

txtfec1.Enabled = false;
txtfec2.Enabled = false;
txtmonto.Enabled = false;
ckfecha1.Enabled = false;
ckfecha2.Enabled = false;
PF.Negocio.FacturaNeg fneg = new PF.Negocio.FacturaNeg();
Session[“todos”] = fneg.listaCliFac();
GridView1.DataSource = Session[“todos”];
GridView1.DataBind();
txtmonto.Attributes.Add(“onkeypress”, “soloNumeros();”);
}
}
protected void GridView1_PageIndexChanging(object sender,
GridViewPageEventArgs e)
{ GridView gv = (GridView)sender;
gv.PageIndex = e.NewPageIndex;
GridView1.DataSource = Session[“todos”];
GridView1.DataBind();
}

protected void ckfecha_CheckedChanged(object sender, EventArgs e)


{ if (ckfecha.Checked)
{
ckfecha1.Enabled = true;
ckfecha2.Enabled = true;
}
else {
ckfecha1.Checked = false;
ckfecha2.Checked = false;
ckfecha1.Enabled = false;
ckfecha2.Enabled = false;
txtfec1.Enabled = false; txtfec1.Text = “”;
txtfec2.Enabled = false; txtfec2.Text = “”;
}
}
protected void ckfecha1_CheckedChanged(object sender, EventArgs e)
{
if (ckfecha1.Checked){txtfec1.Enabled = true;
}
else { txtfec1.Enabled = false; txtfec1.Text = “”; }
}
protected void ckfecha2_CheckedChanged(object sender, EventArgs e)
{
if (ckfecha2.Checked){ txtfec2.Enabled = true;
}
else { txtfec2.Enabled = false; txtfec2.Text = “”; }
}
protected void ckcliente_CheckedChanged(object sender, EventArgs e)
{
if (ckcliente.Checked)
{

www.detodoprogramacion.org
Capítulo 7: Aplicación de Facturación WEB 531

txtclie.Enabled = true;
}
else { txtclie.Enabled = false; txtclie.Text = “”; }
}
protected void ckemplreado_CheckedChanged(object sender, EventArgs e)
{
if (ckemplreado.Checked)
{
txtemp.Enabled = true;
}
else { txtemp.Enabled = false; txtemp.Text = “”; }
}
protected void ckmonto_CheckedChanged(object sender, EventArgs e)
{
if (ckmonto.Checked)
{
txtmonto.Enabled = true;
}
else { txtmonto.Enabled = false; txtmonto.Text = “”; }
}

protected void btnbuscar_Click(object sender, EventArgs e)


{ int opt=0;
String t1=””, t2=””;
PF.Negocio.FacturaNeg fneg = new PF.Negocio.FacturaNeg();
System.Collections.Generic.List<PF.Entidad.EntTodos> lista = fneg.
listaCliFac();
if (ckfecha1.Checked && (ckfecha2.Checked == false && ckcliente.Checked
== false && ckemplreado.Checked == false && ckmonto.Checked == false)) {
opt = 1; t1 = txtfec1.Text;
}
if ((ckfecha1.Checked && ckfecha2.Checked) && (ckcliente.Checked == false
&& ckemplreado.Checked == false && ckmonto.Checked == false))
{ opt = 2; t1 = txtfec1.Text; t2 = txtfec2.Text;
}
if (ckcliente.Checked && (ckfecha2.Checked == false && ckfecha1.Checked ==
false && ckemplreado.Checked == false && ckmonto.Checked == false))
{ opt = 4;
t1 = txtclie.Text;
}
if (ckemplreado.Checked && (ckfecha2.Checked == false && ckfecha1.Checked
== false && ckcliente.Checked == false && ckmonto.Checked == false))
{ opt = 8;
t1 = txtemp.Text;
}
if (ckmonto.Checked && (ckfecha2.Checked == false && ckfecha1.Checked ==
false && ckemplreado.Checked == false && ckcliente.Checked == false))
{ opt = 16;
t1 = txtmonto.Text;
}
if ((ckcliente.Checked && ckemplreado.Checked) && (ckfecha2.Checked ==
false && ckfecha1.Checked == false && ckmonto.Checked == false))

www.detodoprogramacion.org
532 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

{ opt = 12;
t1 = txtclie.Text;
t2 = txtemp.Text;
}
if ((ckcliente.Checked && ckemplreado.Checked && ckmonto.Checked &&
(ckfecha2.Checked == false && ckfecha1.Checked == false )))
{ opt = 16;
t1 = txtclie.Text;
t2 = txtemp.Text;
lista = fneg.busquedaTodos(12, t1, t2, lista);
t1 = txtmonto.Text;
}
Session[“todos”] = fneg.busquedaTodos(opt, t1, t2, lista);
GridView1.DataSource = Session[“todos”];
GridView1.DataBind();
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{ if (e.CommandName.Equals(“Select”))
{ int local = int.Parse(GridView1.Rows[int.Parse(e.CommandArgument.
ToString())].Cells[0].Text);
int numf = int.Parse(GridView1.Rows[int.Parse(e.CommandArgument.
ToString())].Cells[1].Text);
PF.Negocio.FacturaNeg fneg = new PF.Negocio.FacturaNeg();
System.Collections.Generic.List<PF.Entidad.Factura> f = fneg.
facturaProductos(numf,local);
GridView2.DataSource = f;
GridView2.DataBind();
}
}
</script>

Ahora veamos el WebForm ModificarFactura.aspx:

www.detodoprogramacion.org
Capítulo 7: Aplicación de Facturación WEB 533

El siguiente código se ha escrito en el source HTML:


<script runat=”server”>
protected void Page_Load(object sender, EventArgs e)
{

if (!Page.IsPostBack)
{
PF.Negocio.FacturaNeg fneg = new PF.Negocio.FacturaNeg();
String[] usu = (String[])Session[“usu”];
int local = (int)Session[“local”];
PF.Entidad.Factura f= new PF.Entidad.Factura();
Session[“factura”] = fneg.listaFacturaCliente(local);

if (fneg.validarNivel(int.Parse(usu[0])))
{
GridView1.DataSource = Session[“factura”];
GridView1.DataBind();
if (GridView1.Rows.Count < 1) {
lblmsj.Text = “No Se Encontraton Facturas Disponibles”;
}
}
else { lblmsj.Text = “Acceso Denegado, No tiene suficientes
Privilegios”; UpdatePanel1.Visible = false; }
}
}

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)


{
if (e.CommandName.Equals(“Select”)) {
int numf =int.Parse( GridView1.Rows[int.Parse(e.CommandArgument.
ToString())].Cells[0].Text);
PF.Entidad.Factura f = new PF.Entidad.Factura();
PF.Negocio.FacturaNeg fneg = new PF.Negocio.FacturaNeg();
f = fneg.getFactura(numf, (System.Collections.Generic.List<PF.Entidad.
Factura>)Session[“factura”]);
f.Num_L1 = (int)Session[“local”];
lbllocal.Text =””+ f.Num_L1;
lblcodcli.Text = f.Cod_clie;
lblfecha.Text = f.Fec_Emision1;
lblnomcli.Text = f.Guia_Remision1;
lblnumfac.Text =””+ f.Num_Fac1;

}
}
protected void GridView1_PageIndexChanging(object sender,
GridViewPageEventArgs e)
{
GridView gv = (GridView)sender;
gv.PageIndex = e.NewPageIndex;
GridView1.DataSource = Session[“factura”];
GridView1.DataBind();
}

www.detodoprogramacion.org
534 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

protected void Button1_Click(object sender, EventArgs e)


{
PF.Entidad.Factura f = new PF.Entidad.Factura();
PF.Negocio.FacturaNeg fneg = new PF.Negocio.FacturaNeg();
if (lblnumfac.Text.Length > 0)
{
if (fneg.anularFactura(int.Parse(lbllocal.Text), int.Parse(lblnumfac.
Text)))
{
System.Collections.Generic.List<PF.Entidad.Factura> lista =
(System.Collections.Generic.List<PF.Entidad.Factura>)Session[“factura”];
f = fneg.getFactura(int.Parse(lblnumfac.Text), lista);
lista.Remove(f);
Session[“factura”] = lista;
GridView1.DataSource = Session[“factura”];
GridView1.DataBind();

}
}
}
protected void limpiar() {
lbllocal.Text = “”;
lblcodcli.Text =””;
lblfecha.Text = “”;
lblnomcli.Text = “”;
lblnumfac.Text = “”;
}
</script>

Ahora veamos el WebForm NuevaFactura.aspx:

www.detodoprogramacion.org
Capítulo 7: Aplicación de Facturación WEB 535

El código que vamos a mostrar se encuentra desarrollado en los eventos del WebForm:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using PF.Entidad;
using PF.Negocio;
public partial class nuevafactura : System.Web.UI.Page
{

EmpresaNeg neg = new EmpresaNeg();


FacturaNeg fneg = new FacturaNeg();
List<Cliente> cliente = new List<Cliente>();
List<Producto> productos = new List<Producto>();
String[] usu;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{

txtruccli.Attributes.Add(“onkeypress”, “soloNumeros();”);
txttelcli.Attributes.Add(“onkeypress”, “soloNumeros();”);
usu = (String[])Session[“usu”];
lblcodemp.Text = usu[0];
lblvendedor.Text = usu[1];

//Se carga los datos de la Empresa


Empresa emp = neg.CargaEmpresa();

Image1.ImageUrl = “Imagenes\\” + emp.RutaImg;


lblnomemp.Text = emp.NomEmp1;
lblrazon.Text = emp.RazonSocial1;
lblrucemp.Text= emp.NroRuc1;
lblinfemp.Text= emp.Pagina1;
lblempdescrip.Text = emp.Descripcion1;

panelCliente.Visible = false;
// btn002.Visible = false;
panelProductos.Visible = false;

dptcategoria.DataSource = fneg.ListarCategoria();
dptcategoria.DataTextField = “Nom_usu”;
dptcategoria.DataValueField = “Id_usu”;
dptcategoria.DataBind();
dptcategoria.Enabled = false;

www.detodoprogramacion.org
536 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

generarFactura();

}
}

protected void generarFactura() {


Session[“listaprod”] = new List<Producto>();
productos = fneg.listarProducto();
usu = (String[])Session[“usu”];
//---datos local
Local l = neg.buscaLocal(int.Parse(usu[0]));
lbllocal1.Text = (l.Direccion1.Equals(l.Direccion21)) ? “” : l.Direccion1;
lbllocal2.Text = l.Direccion21;
lbltelanexfax.Text = l.Telefono1 + “ “ + l.Fax1 + “ “ + l.Anexo1;
lbllocal.Text = “0000” + l.Num_L1;
lbllocal.Text = lbllocal.Text.Substring(lbllocal.Text.Length - 4);

lblnumfac.Text = “00000000” + fneg.generaFactura(l.Num_L1);


lblnumfac.Text = lblnumfac.Text.Substring(lblnumfac.Text.Length - 8);
//--------------------
lblfecha.Text = DateTime.Now.Date.ToShortDateString();
}
protected void btnbuscar_Click(object sender, EventArgs e)
{
int tipo = 0;
tipo = (OptBusqueda.Items[0].Selected) ? 1 : (OptBusqueda.Items[1].
Selected) ? 2 : 3;
cliente= neg.getClientes();
cliente= neg.BuscarCliente(tipo,cliente, txtcodbus.Text);
GridView1.DataSource = cliente;
GridView1.DataBind();
}
protected void GridView1_PageIndexChanging(object sender,
GridViewPageEventArgs e)
{
GridView gv = (GridView)sender;
gv.PageIndex = e.NewPageIndex;
btnbuscar_Click(sender, e);

// bindCitiesGrid();
}

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)


{
if (e.CommandName.ToString().Equals(“Select”)) {
int indice = int.Parse(e.CommandArgument.ToString());
String prueba =GridView1.Rows[indice].Cells[1].Text; ;
Cliente cli = neg.getCliente(prueba, neg.getClientes());
lblcodcli.Text = cli.Cod_clie;
txtnomcli.Text = cli.Nom_clie;
txtruccli.Text = cli.Ruc_clie;
txtdircli.Text = cli.Dir_clie;

www.detodoprogramacion.org
Capítulo 7: Aplicación de Facturación WEB 537

txttelcli.Text = cli.Tel_clie;
}
}
protected void LinkButton1_Click(object sender, EventArgs e)
{
panelCliente.Visible = true;
//btn002.Visible = true;
}

protected void LinkButton2_Click(object sender, EventArgs e)


{
panelProductos.Visible = true;
}
protected void optbusqueda02_SelectedIndexChanged(object sender, EventArgs e)
{
if (optbusqueda02.Items[2].Selected)
{
dptcategoria.Enabled = true;
}
else { dptcategoria.Enabled = false; }
}
protected void btnbuscar02_Click(object sender, EventArgs e)
{
int opt = 0;
String cad = “”;
productos =new List<Producto>();
productos = fneg.listarProducto();
if (optbusqueda02.Items[0].Selected) { opt = 1; cad = txtbusprod.Text; }
if (optbusqueda02.Items[1].Selected) {
opt = 2;
try {
cad = int.Parse( txtbusprod.Text) +””;
}
catch { cad= “0”;}
}
if (optbusqueda02.Items[2].Selected) { opt = 3; cad = dptcategoria.
SelectedValue.ToString(); }
if (optbusqueda02.Items[2].Selected && txtbusprod.Text.Length > 0) { opt =
4; cad = dptcategoria.SelectedValue.ToString()+”.” + txtbusprod.Text; }
productos = fneg.listadoProductos(opt, cad, productos);
gvProductos.DataSource = productos;
gvProductos.DataBind();

protected void gvProductos_PageIndexChanging(object sender,


GridViewPageEventArgs e)
{
GridView gv = (GridView)sender;
gv.PageIndex = e.NewPageIndex;
btnbuscar02_Click(sender, e);

www.detodoprogramacion.org
538 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

}
protected void gvProductos_RowCommand(object sender, GridViewCommandEventArgs
e)
{
if (e.CommandName.Equals(“Select”)) {

int indice =int.Parse( e.CommandArgument.ToString());


//String cod = gvProductos.Rows[indice].Cells[0].Text;
TextBox cant =(TextBox) gvProductos.Rows[indice].Cells[5].
FindControl(“txtprodcant”);
Label lbl = (Label)gvProductos.Rows[indice].Cells[5].
FindControl(“lblmontomsj”);
lbl.Text = “”;
//cantidad precio total
if (cant.Text.Length > 0)
{
int cantidad = int.Parse(cant.Text);
int stock = int.Parse(gvProductos.Rows[indice].Cells[2].Text);
int nump = int.Parse(gvProductos.Rows[indice].Cells[0].Text);
if (cantidad < stock)
{
List<Producto> lisprod = (List<Producto>)Session[“listaprod”];
//buscar si ya existe el producto
Producto prod;
prod=fneg.getProducto(nump,lisprod);
if(prod==null){
prod = new Producto();
prod.Num_prod = nump;
prod.Descripcion = gvProductos.Rows[indice].Cells[1].Text;
prod.Stock = stock;
prod.Pre_vent = double.Parse(gvProductos.Rows[indice].
Cells[3].Text);
prod.Cantidad = int.Parse(cant.Text);
lisprod.Add(prod);
}else{
//si ya existe lo actualizo (pero antes valido el stock)
cantidad +=prod.Cantidad;
if(cantidad<stock){
prod.Cantidad=cantidad;
}else{lbl.Text = “Cant. No Valida”; }
}
// ...

GridView2.DataSource = lisprod;
GridView2.DataBind();
Session[“listaprod”] = lisprod;
cargaTotales();
}
else {
lbl.Text = “Cant. No Valida”;
}

www.detodoprogramacion.org
Capítulo 7: Aplicación de Facturación WEB 539

cant.Text = “”;
}
}
}

protected void gvProductos_RowDataBound(object sender, GridViewRowEventArgs e)


{
if (e.Row.RowIndex > -1)
{
// if (gvProductos.Rows[e.Row.RowIndex].Cells.GetType())
// lbl001.Text += “ Fila: “ + gvProductos.Rows[e.Row.RowIndex].
Cells.GetType();
TextBox cant = (TextBox)e.Row.Cells[5].FindControl(“txtprodcant”);
//TextBox cant = (TextBox)gvProductos.Rows[indice].Cells[5].
FindControl(“txtprodcant”);
cant.Attributes.Add(“onkeypress”, “validaPrecio(event);”);

}
protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowIndex > -1)
{
Label lbl=(Label)e.Row.Cells[4].FindControl(“lbltotal”);
lbl.Text = “” + (double.Parse(e.Row.Cells[2].Text) * int.Parse(e.Row.
Cells[3].Text));

}
protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName.Equals(“Select”)) {

int indice =int.Parse( e.CommandArgument.ToString());


List<Producto> lisprod = (List<Producto>)Session[“listaprod”];
int desc =int.Parse( GridView2.Rows[indice].Cells[0].Text);
Producto produc01 = fneg.getProducto(desc, lisprod);
lisprod.Remove(produc01);
GridView2.DataSource = lisprod;
GridView2.DataBind();
Session[“listaprod”] = lisprod;
cargaTotales();
}
}
protected void LimpiarGrid() {
List<Producto> lisprod = new List<Producto>();
GridView2.DataSource = lisprod;
GridView2.DataBind();

www.detodoprogramacion.org
540 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

Session[“listaprod”]=lisprod;

}
protected void LinkButton3_Click(object sender, EventArgs e)
{
panelProductos.Visible = false;

private void cargaTotales() {


double submonto= fneg.calcularSubTotal((List<Producto>)
Session[“listaprod”]);
lblsubtotal.Text =””+ submonto ;
double[] d=fneg.calcularTotalFactura(submonto,0.19);
igv.Text = d[0] + “”;
total.Text = d[1] + “”;
}
protected void btnaceptar_Click(object sender, EventArgs e)
{
List<Producto> lprod = (List<Producto>)Session[“listaprod”];
if (lprod.Count > 0) {
//si hay productos en la lista se inserta la factura
Factura fac = new Factura();
fac.Detalle = new List<Det_Factura>();
fac.Num_L1 =int.Parse( lbllocal.Text);
fac.Num_Fac1 = int.Parse(lblnumfac.Text);
fac.Guia_Remision1 = txtguia.Text;
fac.Igv = (float)0.19;
//validando que se halla elegido un cliente
if (lblcodcli.Text.Length == 0) {
return;
}
fac.Cod_clie = lblcodcli.Text;
fac.Num_rem = 0;
fac.Id_usu =int.Parse(lblcodemp.Text);

//llenando el detalle
foreach (Producto p in lprod) {
Det_Factura deta = new Det_Factura();
deta.Num_L1 = int.Parse(lbllocal.Text);
deta.Num_Fac1 = int.Parse(lblnumfac.Text);
deta.Num_prod = p.Num_prod;
deta.Cant = p.Cantidad;
deta.Descuento = 0;
fac.Detalle.Add(deta);
}
if (fneg.insertarFactura(fac)){
generarFactura();
LimpiarGrid();
LimpiarTexto();
Response.Write(“<script>alert(‘Factura Guardada con Exito !!!’)</
script>”);

www.detodoprogramacion.org
Capítulo 7: Aplicación de Facturación WEB 541

//----------------------
productos = new List<Producto>();
productos = fneg.listarProducto();
gvProductos.DataSource = productos;
gvProductos.DataBind();
//----------------------
}
else {
Response.Write(“<script>alert(‘No se Pudo Guardar la Factura’)</
script>”);
}

}
}

protected void LimpiarTexto() {


txtnomcli.Text = “”;
txtruccli.Text = “”;
txtdircli.Text = “”;
txtguia.Text = “”;
txttelcli.Text = “”;
lblcodcli.Text = “”;

}
protected void LinkButton4_Click(object sender, EventArgs e)
{
panelCliente.Visible = false;
//btn002.Visible = false;
}
protected void btnclear_Click(object sender, EventArgs e)
{
LimpiarGrid();
generarFactura();
LimpiarTexto();

}
protected void btncancel_Click(object sender, EventArgs e)
{
LimpiarGrid();
}
protected void LinkButton1_Click1(object sender, EventArgs e)
{
if (txtnomcli.Text.Length > 0)
{

Cliente cli = new Cliente();

cli.Nom_clie = txtnomcli.Text;
cli.Ruc_clie = txtruccli.Text;
cli.Dir_clie= txtdircli.Text ;
cli.Tel_clie=txttelcli.Text;
String cod = neg.insertarCliente(cli);

www.detodoprogramacion.org
542 Aplicaciones desarrolladas con ASP, AJAX y JQUERY

lblcodcli.Text =cod;
cliente = neg.getClientes();

GridView1.DataSource = cliente;
GridView1.DataBind();
}
}
}

Bien, ya depende de usted poder mejorar este proceso de facturación. Suerte. No olvides que el código
fuente se encuentra en la carpeta Capítulo VII. Nos Vemos.

www.detodoprogramacion.org
Impreso en los Talleres Gráficos de

Surquillo
7199700 – 7199701
Julio 2010

www.detodoprogramacion.org

También podría gustarte