Libro Lpiv

161
Asp_net -1- LENGUAJE DE PROGRAMACIÓN Autor:Ing. Alberto Moreno Cueva Universidad Nacional de Ingenieria

description

Una guia para aquellas personas que desean realizar aplicaciones con Asp Net contiene aplicaciones con bases de datos , reportes , webservice, xml que es lo mas importante en cualquier aplicacion web. Espero que les ayude este aporte Ing. Alberto Moreno

Transcript of Libro Lpiv

Page 1: Libro Lpiv

Asp_net -1-

LENGUAJE DE PROGRAMACIÓN

Autor:Ing. Alberto Moreno Cueva

Universidad Nacional de Ingenieria

Page 2: Libro Lpiv

Asp_net -2-

INDICE 1.- ASP NET

1.1 Asp Net1.2 ADO NET1.3 Clases Basicas pa gestion de Datos1.4 Acciones de Ida y Vuelta de Una WEB1.5 Directivas den ASP1.6 Tipos de Datos1.7 Web Form - controles1.8 Funciones Numéricas , cadenas y Fechas

2.- Aplicaciones2.1 Web- form calculo matemáticos2.2 Empleando el Datgrid12.3 Consultas con Hipervínculos2.4 Consultas en cascada2.5 Genrador de Propiedades de un datagrid2.6 Actualizaciones en linea2.7 Empleando Store Procedure

3.- Reportes3.1 Crystal Report entorno para el diseño3.2 Creacion de un reportes simple con campos enlazados3.3 Ejecucion de un reporte desde un formulario3.4 Filtros en un reporte

4.- Web Service4.1 Definición4.2 Web Method4.3 Publicacion de los Web Service4.4 Acceso a los servicios4.5 Aplicación con web Services

Responsable:Prof. Ing. Alberto Moreno –Coordinador de Lenguajes VisualesDocencia:

- Universidad Tecnologica del Peru- Universidad Nacional de Ingenieria- Universidad Catolica S.S.

Email: [email protected]

“Si quieres ganar, superar, vencer, vuelve a comenzar porque en este mundo hay quehacerlo todo dos o mas veces

Page 3: Libro Lpiv

Asp_net -3-

CAPITULO 11 Introducción a la plataforma .NET

Simplificando mucho las cosas para poder dar una definición corta y comprensible,se podría decir que la plataforma .NET es un amplio conjunto de bibliotecas dedesarrollo que pueden ser utilizadas por otras aplicaciones para acelerarenormemente el desarrollo y obtener de manera automática característicasavanzadas de seguridad, rendimiento, etc...

En realidad .NET es mucho más que eso ya que ofrece un entorno gestionado deejecución de aplicaciones, nuevos lenguajes de programación y compiladores, ypermite el desarrollo de todo tipo de funcionalidades: desde programas de consolao servicios Windows hasta aplicaciones para dispositivos móviles, pasando pordesarrollos de escritorio o para Internet. Son estos últimos de los que nosocuparemos en este curso. Pero antes conviene conocer los fundamentos en losque se basa cualquier aplicación creada con .NET, incluyendo las que nosinteresan.

1.1 El entorno de ejecución CLR

.NET ofrece un entorno de ejecución para sus aplicaciones conocido comoCommon Language Runtime o CLR. La CLR es la implementación de Microsoft deun estándar llamado Common Language Infrastructure o CLI. Éste fue creado ypromovido por la propia Microsoft pero desde hace años es un estándarreconocido mundialmente por el ECMA.

.Todos estos servicios unidos a su independencia respecto a arquitecturascomputacionales convierten la CLR en una herramienta extraordinariamente útilpuesto que, en teoría, cualquier aplicación escrita para funcionar según la CLIpuede ejecutarse en cualquier tipo de arquitectura de hardware. Por ejemploMicrosoft dispone de implementación de .NET para Windows de 32 bits, Windowsde 64 bits e incluso para Windows Mobile, cuyo hardware no tiene nada que vercon la arquitectura de un ordenador común.

Los espacios de nombres

Dada la ingente cantidad de clases que existen debe existir algún modo deorganizarlas de un modo coherente. Además hay que tener en cuenta quepodemos adquirir más funcionalidades (que se traducen en clases) a otrosfabricantes, por no mencionar que crearemos continuamente nuevas clasespropias.

Page 4: Libro Lpiv

Asp_net -4-

Aplicaciones Web Forms

Tradicionalmente las aplicaciones Web se han desarrollado siguiendo un modelo

mixto que intercalaba código HTML y JavaScript propio de páginas Web (parte cliente),

junto con código que se ejecutaría en el servidor (parte servidora). Este modelo

contrastaba por completo con el modelo orientado a eventos seguido por las principales

herramientas de desarrollo de aplicaciones de escritorio.

En el modelo orientado a eventos se define la interfaz de usuario colocando

controles en un contenedor y se escribe el código que actuará como respuesta

a las interacciones de los usuarios sobre estos controles. Si conoce el

diseñador de VB6 o de Windows Forms mencionado en el apartado anterior

sabe exactamente a qué nos referimos.

Page 5: Libro Lpiv

Asp_net -5-

Obviamente se podría haber simplificado sin enviar el formulario al servidor usando

JavaScript en el cliente para mostrar el saludo, pero la intención es ilustrar la mezcla de

código de cliente y de servidor que existe en este tipo de aplicaciones.

La principal aportación de ASP.NET al mundo de la programación es que ha

llevado a la Web el paradigma de la programación orientada a eventos propia

de aplicaciones de escritorio, ofreciendo:

• Separación entre diseño y lógica.

• Componentes de interfaz de usuario, tanto estándar como de

terceras empresas o propios.

• Diseñadores gráficos.

• Eventos.

• Estado.

• Enlazado a datos desde la interfaz

Herramienta Rápida de Desarrollo (RAD)

La principal ventaja de Visual Studio 2005 es realizar la creación de aplicaciones

de forma fácil y rápida, tan solo con arrastrar y soltar objetos se pueden crear

desde aplicaciones Windows hasta Servicios Web XML.

Entre algunas de las ventajas del soporte RAD de Visual Studio tenemos:

Ø Creación de Páginas Web mediante Formularios Web

Visual Studio 2005 incluye un diseñador de páginas Web HTML y ASP .NET

basado en formularios Web. el diseñador permite arrastrar controles, clases de

datos, y otros objetos y configurar sus propiedades como si fuese un formulario de

una aplicación para Windows.

Ø Creación de Servicios Web XML

Para crear Servicios Web XML, Visual Studio .NET incluye una plantilla con

Servicios Web de ejemplo, los cuales puedes modificar y personalizar a tu medida,

Page 6: Libro Lpiv

Asp_net -6-

eligiendo el lenguaje que deseas, que puede ser Visual Basic .NET, Visual C#

.NET o Visual C++.NET

Ø Acceso a Servicios Web XML

Una vez creado los Servicios Web XML deben usarse en otras aplicaciones del

negocio, para ello Visual Studio 2005 cuenta con el Explorador de Servidores

(Server Explorer) que permite ver los Servicios Web publicados y usarlos con solo

un arrastre. También podemos usar un Servicio Web haciendo referencia desde

un proyecto mediante la opción "Add Web Referente" del menú "Project".

Ø Creación de Componentes .NET

Crear componentes o controles de usuario es tan simple como crear un formulario,

ya que usando la herencia se puede pasar todas las características de un objeto a

otro, esto esta presente en todos los objetos creados en Visual Studio 2005, sean

visuales o no.

Ø Creación de archivos XML

Con el diseñador de XML, crear un archivo XML es más fácil que nunca, ya que se

muestra de colores el código y se auto completan los Tags que uno va

escribiendo. Este maneja 3 vistas: XML, esquemas y datos.

Existen mas características RAD en Visual Studio .NET, las cuales trataremos

mas adelante.

Aplicaciones Web – ASP.NET

Una aplicación web es un conjunto de páginas HTML que se transmiten por medio del

protocolo HTTP de un servidor al cliente y viceversa, brindando distintas funcionalidades a

un usuario final.

ASP.NET es un Marco (framework) para programar aplicaciones web, de un modo

similar al que se programan las aplicaciones windows. El componente principal son los

Page 7: Libro Lpiv

Asp_net -7-

Web Forms (formularios web) que permiten, entre otras cosas, separar la interfaz del

usuario de la funcionalidad de la aplicación.

Aplicaciones Web - Servidor Web

Un servidor web es un sistema informático conectado a una red, donde se

almacenan las páginas, imágenes, etc. (que forman una aplicación web)

disponibles para ser visitadas por los usuarios de la red.

Internet Information Server (IIS), es el servidor Web de Microsoft que corre sobre

plataformas Windows. Los servicios que ofrece son: FTP, SMTP, NNTP y

HTTP/HTTPS

HTML Forms

• En el corazón de toda aplicación Web genuina están los HTMLForms

• Un HTML Form es la porción de un documento HTML queaparece entre las etiquetas <form></form>

Suma.html<html> <body>

<form> <input type="text" name="op1" /> + <input type="text" name="op2" /> <input type="submit" value=" = " />

</form> </body></html>

Page 8: Libro Lpiv

Asp_net -8-

HTML Forms (Cont.)

Un botón submit (<input type= submit >) juega un rol especial en unHTML Form:

Cuando es pulsado, el navegador envía el HTML Form junto concualquier entrada de datos del usuario al servidor Web

Cómo el HTML Form es enviado, dependerá del atributo Method delform:

Si el atributo Method del form no está presente o tiene el valor GET, elnavegador enviará al servidor un comando HTTP GET

Si el atributo Method del form tiene el valor POST, el navegador enviaráal servidor un comando HTTP POST

Cualquiera sea el método utilizado, es decir GET o POST, cuando unform es enviado al servidor, decimos que se produjo un POSTBACK

Procesamiento en el Servidor

• Construir la parte del cliente es fácil , sólo es HTML

• La parte difícil es la construcción de la lógica del lado del servidor. Algo

en el servidor , tiene que interpretar las entradas del usuario enviadas

junto con el form y generar la correspondiente salida.

Aplicaciones con controles a nivel de servidor.

Page 9: Libro Lpiv

Asp_net -9-

Enlaces de datos con los controles Web FormAplicación 1.- Sin incluir controles Form

Resultado

Codificación.-<%@ Page language="vb"%><HTML><body><center><form name="frmintro" method="post" action="demo1.aspx">

Page 10: Libro Lpiv

Asp_net -10-

<h3>Primer Ejemplo</h3> <h3>Ingrese Su Nombre :<input type =text name = "nombre" value ="<%=request.form("nombre")%>"> Carrera : <select name="categoria" size=1> <% Dim i as integer Dim values() as string={"Ing. Sistemas","Medicina","Psicologia","Administracion"} for i=0 to values.length -1 %> <% if request.form("categoria")=values(i) then%> <option selected> <%else%> <option> <%end if%> <%=values(i)%></option> <%next%> </selected></h3> <input type =submit name="busqueda" value ="busqueda"> <%if(not request.form("busqueda")=nothing) then%> <p> Hola, <%=request.form("nombre")%>, has seleccionado la Carrera de : <% =request.form("categoria")%> </p> <%end if%> </form> </center> </body></HTML>

Aplicación 2.- Segunda forma empleando etiquitas script

<html><head><script language="VB" runat="server"> Sub Page_Load(sender As Object, e As EventArgs) If Not IsPostBack Then si la pagina no esta cargada Dim values as ArrayList= new ArrayList() values.Add ("Visual Net") values.Add ("Power Builder") values.Add ("Macromedia MX") values.Add ("Sql Server") values.Add ("Oracle")

Page 11: Libro Lpiv

Asp_net -11-

values.Add ("Linux") DropDown1.DataSource = values DropDown1.DataBind End If End Sub

Sub SubmitBtn_Click(sender As Object, e As EventArgs) Label1.Text = "Su elección: " + DropDown1.SelectedItem.Text End Sub</script></head><body><h3><font face="Verdana">Enlace de datos de DropDownList</font></h3><form runat="server" ID="Form1"><asp:DropDownList id="DropDown1" runat="server" /><asp:button Text="Enviar" OnClick="SubmitBtn_Click" runat="server" ID="Button1"NAME="Button1" /><p><asp:Label id="Label1" font-name="Verdana" font-size="10pt" runat="server" /></form></body></html>

Nota.-En vez de un array List tambien se puede emplear un arrgelo dinamicoDim values() as string={ Visual Net Power Builder Macromedia Mx sql server }Dropdown1.datasource=values

Ejercicios:Controles Intrínsicos y WebForms:1.-- Ingresar como datos : Nombre del Trabajador, sueldo y cantidad de Días porvacaciones Mostrar el pago por vacaciones, la fecha de retorno y el día de retorno,además si el día es sábado o domingo pintarlo con rojo sino pintarlo de color azul.(se debe codificar solo en el pagina aspx)

2.- Seleccionar en un combo el artefacto a comprar, debe mostrarautomáticamente el precio del artefacto y la foto o imagen de dicho artefacto,luego Ud. Elige una de las opciones para el pago (radio)que puede ser en 6,12,18mes respectivamente el cual debe mostrar el calendario de pago:

Page 12: Libro Lpiv

Asp_net -12-

Los incrementos de precio, son de acuerdo a los meses de pago y son 20%, 40%y 60% respectivamente, la cuota mensual es constante.

3.- El gobierno tiene un plan para vivienda para el sector privado, bajo lassiguientes condiciones: Si los ingresos del comprador son menores a $1000, darácomo cuota inicial del 2% del costo de la casa y el resto lo distribuirá en pagomensuales constantes, a pagar en 5 años; Si los ingresos del comprador esmayor a $1000 la cuota inicial será del 5% y el resto se pagara en pagomensuales de 4 añosSe pide mostrar la cuota inicial y el pago mensual y el saldo respecto a cada mesen una cuadricula de datos(grid) ; Los departamentos son seleccionados a travésde la tabla

.

Nota.- El trabajador debe tener un ingreso mínimo de $500

Calendario de Pagos

Fecha de compra :11/09/03Artefacto . Cocina.Precio a Crédito 630

Fecha Cuota Saldo11/10/03 52.44 578.11/11/03 ... ........ ... ....

<<<Retornar

area Costo85 Mts c $15000100 Mts c $ 18000120 mts c. $ 21000

Datos de ingreso:Nombre del comprador, Sueldo ,el tipo dedepartamento y la fecha de compraTodos los datos deben ser validados

Page 13: Libro Lpiv

Asp_net -13-

4.- Elabore una pro forma de venta de computadoras ensamblada.Condiciones: mediante un cuadro lista colocar tres monitores con sus preciosrespectivos( Samsung 250, Compac 180 , IBM 280).Una lista de discos duros( 20 GB 80, 30 GB 100, 40 GB 110)Mediante opciones el procesador 800 MHZ 300 , 1 GHz 400, 2 GMz 600)Mediante CheckBox colocar : Mouse 15, Teclado 20, estabilizador 25Todos los precios están expresados en dolares, mediante una pagina Aspx,coloque todo el diseño ( Puede colocar imágenes que representen cadadispositivo) al elegir un dispositivo de mostrar su precio , además debe tener unboton general para visualizar el Precio Total, el IGV y el neto a pagar en doloresy solesNota.- Ud. Debe colocar las imágenes respectivas cuando se selecciona unaccesorio.

5.- Una librería ofrece ofertas de libros, para ello en una lista muestra la categoría(Ciencia, Lenguaje, Historia), al seleccionar una categoría va mostrar solo loslibros de esa categoría en otra lista: por ejemplo ciencia(Matemática I, Física I,Química, Anatomía); Lenguaje( Antónimos, sinónimos, Caligrafía); Historia (Historia del Perú, Historia Universal, Geografía), a cada libro colocarlo un precioen la a través de un arreglo, al seleccionar un libro mostrara su precio.Luego elegir el tipo de venta: Publico General, estudiante o Docente deberácalcular un descuento de (0%, 10% y 30% respectivamente), mostrar también eltotal a pagar.

Datos de ingreso , pordefecto se colocara lafecha del sistema

Datos calculados , lospagos mensuales sonconstantes

Page 14: Libro Lpiv

Asp_net -14-

6.- Unir las paginas con un pagina tipo Índice tipo menú empleando el Framset(división de ventanas) , el cual será mostrado en una pagina principal con dosmarcos de paginas para tener acceso a las demás paginas.

Page 15: Libro Lpiv

Asp_net -15-

CAPITULO 2

CREANDO UN SITIO WEB EN ASP.NET 2.0Primero abrimos el Visual Studio .NET 20051.-Inicio Programas Microsoft Visual Studio 2005 Microsoft Visual Studio2005.2.- Observaremos la presentación del entorno, invitándonos a crear nuestroproyecto, listo para desarrollar nuestras aplicaciones.3.- Crearemos nuestro primer proyecto Web, para esto nos ubicamos en File New Web Site [Click]4.-Nos muestra un cuadro de dialogo, con plantillas definidas, para crear el tipo deproyecto que vamos a desarrollar.

5. Seleccionamos la plantilla ASP.NET Web Site, Luego en etiquetaLocalizacion que esta asociado con un combobox, seleccionamos donde vamos aalojar nuestro proyecto que vamos a crear, como los vamos a almacenar ennuestro duro seleccionamos File System (Archivo del sistema).6. Luego el tipo de lenguaje en el cual vamos a desarrollar nuestras paginasWeb, seleccionamos VisualBasic.

7. Si hemos seleccionano File System, le damos un clic en Browse paraubicar en una unidad el proyecto que vamos a almacenar. Asi pues ledamos un clic en Browse.

Page 16: Libro Lpiv

Asp_net -16-

8. Le damos un clic en el icono de la imagen para crear una nueva carpetapara alojar nuestro proyectoWeb, y le damos como nombre WebPrueba1, y le damos un clic en el boton Open.

8. Le damos un clic para crear el proyecto Web WebPrueba1.

9.- Vamos a describir el explorador de soluciones

Almacena los archivos vinculadosa la conexión de la base de datos,

Este archivo Web contiene opciones deconfiguraciones que el CLR(Lenguaje en tiempo de ejecución-

Page 17: Libro Lpiv

Asp_net -17-

12.- El Proyecto web creado en ASP NET 2.0 no incluye el tradicional SubfolderBIN. Cuando generamos y ejecutamos nuestro proyecto Web, ASP NET generauna colección de archivos temporales en la carpeta:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NETFiles\webprueba1

default.aspx.cdcab7d2_CBMResult.ccu => CodeCompileUnit (Contenedorpara un programa CodeDOMgrafico para la pagina.default.aspx.cdcab7d2_CBMResult.compiled => Lista de archivosdependendientes y valores hash para ekCodeCompileUnit (XML).hash.web => Valor hash hexadecimal de 16 byte (Seguridad de pagina).default.aspx.cdcab7d2.compiled => Archivar las dependencias y los valores dehash para la página.App_Web_8wc-9q9i.dll => Código ensamblado de los archivos 0.vb,1.vb y 2.vb.

Ubicación fisica

Page 18: Libro Lpiv

Asp_net -18-

TRABAJO 1: DESARROLLAR LAS SIGUIENTES PAGINAS WEB

Crear un proyecto Web la pagina Default.aspx, lo renombrara a webPrincipal.aspx,luego agregara 2paginas y le podrán como nombre se encuentra en la imagen.

La pagina WebPrincipal.aspx, lo usara como un menú principal, el cual llamara alos demás formularios propuestos.

Cada HiperLink llamar a las paginas propuestas.HiperLink1 => llamara a la pagina Web WebApli01.aspxHiperLink2 => llamara a la pagina Web WebApli02.aspxCuando se le da un clic en el botón Salir de la aplicación, saldrá del proyecto Web.

APLICACIÌN WebApli01.aspx

Page 19: Libro Lpiv

Asp_net -19-

1. cuando cargue la página deberá de limpiar todas las cajas de textos, se deberá demostrar la fecha de sistema en el lblFecha.2..-Cuando se ingrese una fecha inicial, en la caja de texto txtfechainicial, ynumero de incremento de meses en la caja de texto txtmes, y haga clic en elbotón Calcular, se deberá de mostrar la fecha incrementada en meses en la cajade texto txtfechaRes, y además los días en letras correspondientes de lafecha en los label lblDiaInicio y lblDiaFinal.3.-Cuando ingrese una fecha Actual en txtfechaactual y una fecha previa oanterior en txtfechaanterior y haga clic en el botón mostrar, se deberá demostrar los días en letras en los labels lblDiaFecActual yLblDiaFechaAnterior. También se deberán de mostrar todos los parámetros de esadiferencia de fechas, como cuantos días paso, meses años etc, e inclusive si esafecha actual es bisiesto es o no.4.-cuando haga clic en el botón nuevo, se deberá de limpiar todos las cajas detexto.5.-cuando haga clic en el botón cerrar, nos deberá de permitir salir de laaplicación.1.-usara el Try catch, para controlar los errores producidos en el código queprogramara, y mostrara el mensaje en el label lblerrores.

6.-cuando haga clic en hiperlink Menu principal, nos deberá de enviar a la paginaWebprincipal.aspx.

WebApli01.aspx

Page 20: Libro Lpiv

Asp_net -20-

Resultado de la pagina

1.- Pagina Webapli02.aspx

a) Cuando cargue la pagina se deberán de mostrar los artefactos en elcontrol DropDownList y demás controles deberán de inicializarse con el valor de0.b) Cuando seleccione un artefacto, se deberá de mostrar automáticamente elprecio de ese artefacto seleccionado, luego agregara una cantidad de venta y elnúmero de cuotas a pagar.c) Cuando haga clic en el botón mostrar cálculos se realizara los siguientescálculos, el pago del valor de la venta será (precio x cantidad). la cuota inicialserá (35% del valor de venta), el saldo será (valor de venta cuota inicial) asícomo también el valor de cada cuota será (saldo/nro de cuotas).d) Cuando haga clic en el botón Nuevo se deberá de inicializar las cajas a 0.e) cuando haga clic en el botón salir, se deberá de poder salir de la aplicaciónWeb.

Page 21: Libro Lpiv

Asp_net -21-

f) usara el Try catch, para controlar los errores producidos en el código queprogramara, y mostrara el mensaje en el label lblerrores.g) cuando haga clic en hiperlink Menu principal, nos deberá de enviar a la paginaWebprincipal.aspx.

Resultado de la pagina.

Page 22: Libro Lpiv

Asp_net -22-

CAPITULO 3.

VALIDACION DE ENTRADA DE USUARIO

Al crear un control de entrada de datos, como un control TextBox,podemos tener ciertas expectativas del tipo de entrada que el usuariointroducirá en ese control. Una entrada de datos incorrecta, como mínimo,retrasará al usuario, y puede incluso terminar nuestra aplicación Web. Paraverificar que la entrada de datos cumple nuestras expectativas, debemoscompararlo con el valor, intervalo o formato que esperamos recibir del usuario.Para crear esta comprobación, enlazamos al menos un control de validación deentrada de datos con el control de entrada de datos y comparamos la entrada dedatos de los usuarios con nuestras expectativas.

¿Qué es la validación de entrada de datos?

Page 23: Libro Lpiv

Asp_net -23-

La validación de entrada de datos es el proceso de verificar que la entradade datos de un usuario en un formulario Web Form concuerda con el valor,ntervalo o formato de datos previsto. La validación de la entrada de datos mejorala experiencia del usuario en el sitio Web reduciendo el tiempo de espera demensajes de error y la probabilidad de envíos incorrectos o caídas del sitioWeb debido a problemas con la entrada de datos del usuario. Cuando secombinan con mensajes de error comprensibles y útiles, los controlesde validación de entrada de datos pueden mejorar enormemente el usode una aplicación Web, mejorando por tanto la percepción de usuario de la calidadglobal del sitio Web.Los controles de validación de entrada de datos actúan para verificar que elusuario ha cumplimentado correctamente un control de entrada de datos, comoun control TextBox, antes de que la solicitud sea procesada en el servidor. Loscontroles de validación de entrada de datos de un formulario Web Formactúan como filtros de datos antes de que la página o la lógica de servidorsea procesada.En ASP.NET, la validación de entrada de datos siempre se ejecuta en el lado delservidor, y puede ejecutarse en el lado del cliente si el navegador clientesoporta la validación. Si el navegador soporta la validación del lado delcliente, los controles de validación de entrada de datos realizan la comprobaciónde errores en el cliente antes de enviar los datos al servidor. El usuario recibeinformación inmediata sobre si los datos que ha introducido son válidos o no.Por motivos de seguridad, toda validación de entrada de datos que seejecute en el lado del cliente se repite a continuación en el lado del servidor.Verificar valores de controlLa validación de entrada funciona comparando la entrada de datos delusuario con el formato de entrada de datos predeterminado. Estos formatospredeterminados de entrada de datos pueden incluir el número decaracteres, el uso de dígitos y/o letras, el intervalo del valor, una cadenaespecífica de caracteres, o una fórmula matemática.Por ejemplo, un control de entrada de datos que solicita al usuario que introduzcasu número de teléfono podría tener un control de validación de entrada de datosadjunto que verificara que el usuario únicamente introduce números en un formatobasado en el número de teléfono. Introducir letras o muy pocos númerosactivaría el control de validación de entrada de datos para validar la entrada dedatos.(Validación lado cliente-servidor)

Page 24: Libro Lpiv

Asp_net -24-

La validación de entrada de datos puede tener lugar tanto en el servidor como enel cliente. Aunque ASP.NET siempre requiere validación del lado del servidor, lavalidación del lado del cliente es una opción con algunos navegadores.Los controles de validación de ASP.NET disponen de soporte tanto del ladodel cliente como del lado del servidor. La validación del lado del clienteutiliza JavaScript y scripts DHTML (HTML Dinámico). La validación del ladodel servidor puede ser desarrollada en cualquier lenguaje basado enMicrosoft .NET, y se compila a Microsoft Intermediate Language (MSIL).Tanto la validación del lado del cliente como la validación del lado delservidor utilizan el mismo modelo de programación, aunque algunasvariaciones entre los lenguajes pueden crear pequeñas diferencias en lasfunciones de validación.

Validación del lado del clienteLa validación del lado del cliente mejora el uso del formulario Web Formcomprobando la entrada de datos del usuario mientras se produce. Alcomprobar si se generan errores mientras se introducen, la validación dellado del cliente permite detectar errores antes de que el formulario WebForm sea enviado, evitando así el viaje de ida y vuelta necesario para lavalidación del lado del servidor.Escribir múltiples versiones de código de validación para soportar tanto elservidor como los diferentes navegadores puede exigir mucho tiempo aldesarrollador. Los controles de validación ASP.NET eliminan este problemaya que la lógica de validación se encapsula en los controles. Los controles creancódigo específico para los navegadores de forma que los usuarios con soportede scripts del lado del cliente tendrán validación de entrada de datos. Losnavegadores que no soporten scripts no recibirán los scripts de validación en ellado del cliente.

Page 25: Libro Lpiv

Asp_net -25-

En versiones de navegador que soporten la validación de entrada de datos,como Microsoft Internet Explorer 4 o posterior, la validación del lado del clientese produce cuando el usuario hace clic en el botón Submit. La página no sepublicará de nuevo en el servidor hasta que toda la validación del lado del clientesea correcta. En Internet Explorer 5 o posterior, el uso de la teclaTABULADOR para moverse de un control de entrada de datos al siguienteejecuta la validación del lado del cliente para el control de entrada de datoscompleto. Esta validación utilizando el TABULADOR ofrece al usuarioinformación inmediata sobre los datos que ha introducido.

Validación del lado del servidorTodos los controles de validación de entrada de datos se ejecutan en el lado delservidor. Las validaciones del lado del cliente se repiten en el lado del servidorcuando la página se envía de nuevo al servidor. Esta repetición evita elspoofing de usuarios que no ejecutan el script del lado del cliente e intentanintroducir datos no válidos.Los controles de validación del lado del servidor pueden escribirse en cualquierlenguaje basado en .NET, y se compilan en MSIL antes de ser ejecutados en elservidor.Además de validar el formato de los datos introducidos, los controles devalidación del lado del servidor pueden utilizarse para comparar la entrada dedatos del usuario con datos almacenados. Esta funcionalidad permite validación

contra diversos elementos, como contraseñas previamente almacenadas orestricciones geográficas, incluyendo las leyes y los impuestos locales.

Controles de validación ASP.NETASP.NET incluye los controles de validación que se muestran en la siguientetabla.

ASP.NET PAG-LEVEL DIRECTIVES:

DIRECTIVE DESCRIPCION

@ Page Define atributos usados para compilar paginas ASP.NET

@ Control Define atributos usados para compilar controles de usuarios

@ Import Importa NAMESPACES desde la libreria de clases de .NET

@ Register Define alias, tags, y otros parametros para constroles de usuariosy normales

Page 26: Libro Lpiv

Asp_net -26-

@ Assembly Identifica otros archivos ( assemblies) para enlazar a esta pagina

Aplicación.- Ingresando un radio muestra su area en una etiqueta e ingresando unacadena o parrafo lo ordena de forma ascendenteEjemplos:

CodigosPublic Class SystemClass Inherits System.Web.UI.Page Protected WithEvents txtRadius AsSystem.Web.UI.WebControls.TextBox Protected WithEvents butCalculate AsSystem.Web.UI.WebControls.Button Protected WithEvents txtSort AsSystem.Web.UI.WebControls.TextBox Protected WithEvents butSort AsSystem.Web.UI.WebControls.Button Protected WithEvents litResult AsSystem.Web.UI.WebControls.Literal

+ codigo Generado

Private Sub Page_Load(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here End Sub

Private Sub butCalculate_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles butCalculate.Click ' Declare variables. Dim dblCircArea, dblRadius As Double ' Convert text input to a double (optional). If txtRadius.Text <> "" Then _ dblRadius = System.Convert.ToDouble(txtRadius.Text) ' Calculate area.

Page 27: Libro Lpiv

Asp_net -27-

dblCircArea = System.Math.PI * System.Math.Pow(dblRadius,2) ' Display result.

ShowResult(dblCircArea) End Sub

Private Sub butSort_Click(ByVal sender As System.Object, ByVale As System.EventArgs) Handles butSort.Click ' Declare an array. Dim arrSort As String() ' Place each word in an array element arrSort = txtSort.Text.Split(" ") ' Sort the array. System.Array.Sort(arrSort) ' Display result. ShowResult(String.Join(" ", arrSort)) End Sub

Sub ShowResult(ByVal Result As String) litResult.Text = "<h3>Results</h3>" litResult.Text += "<p>Sorted string: <b>" + Result +"</b>" End Sub

Sub ShowResult(ByVal Result As Double) litResult.Text = "<h3>Results</h3>" litResult.Text += "<p>The circle's area is: <b>" +Result.ToString() + "</b>" End SubEnd Class

Controles de validación

Page 28: Libro Lpiv

Asp_net -28-

Public Class WebForm3 Inherits System.Web.UI.Page+codigo GeneradoDim dt As DataTable Dim dr As DataRow

Private Sub Page_Load(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles MyBase.Load End Sub

Private Sub BtnCalcula_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles BtnCalcula.Click Dim m, mes As Integer Dim interes, monto, mactual As Double Dim fecha As Date = Date.Now mes = Val(txtmes.Text) monto = Val(txtmon.Text) dt = New DataTable() dt.Columns.Add(New DataColumn("Mes")) dt.Columns.Add(New DataColumn("Interes")) dt.Columns.Add(New DataColumn("Monto")) For m = 1 To mes interes = monto * 0.01 * m mactual = interes + monto

RequieredFieldValidator.-(valida2)Errormensage Campo oblugatorioControlTovalidate:TxtmonRangeValidator (Valida1)ErrorMessage.- Mes entre 6- 18ControlTovalidate.- Txtmes

ValidationSummary .- Resumen de errores

Page 29: Libro Lpiv

Asp_net -29-

fecha = DateAdd("m", 1, fecha) dr = dt.NewRow() dr(0) = Format(fecha, "dd/MM/yy") ' si escribe la m con minuscula asumira como m en minutos dr(1) = interes.ToString() dr(2) = mactual.ToString 'Adiciona una fila al datatable dt.Rows.Add(dr) Next

DataGrid1.DataSource = New DataView(dt) DataGrid1.DataBind() End SubEnd Class

Procesamiento en el Servidor

Existen varias tecnologías de procesamiento:

l CGI (Common Gateway Interface)l Define una API de bajo nivell Popular en entornos UNIX, no tanto en Windows

l ISAPI (Internet Server Application Programming Interface)l Son DLL Windows que corren bajo IIS. Escritas en C++l Mejor performance que CGI

l ASP (Active Server Pages)l Simple solución: HTML + Script del lado del servidorl Programadas en JScript o VBScriptl Objetos intrínsecos que abstraen detalles de bajo nivel de

HTTP. Objetos Request y Responsel Permite usar ADO (ActiveX Data Object) para acceso a

datos

ASP.NET

• ASP.NET es el framework de programación web dentro de NET• Permite desarrollar aplicaciones Web con un modelo similar al

utilizado para aplicaciones Windows• El componente fundamental de ASP.NET es el WebForm• Independencia del cliente (navegador, S.O., dispositivo

físico, etc.)• Permite utilizar cualquier lenguaje .NET• Permite desarrollar Servicios Web XML

ASP.NET - Ventajas

• La parte ejecutable de una aplicación ASP.NET esCOMPILADA

• Implementación y actualización de las aplicaciones sinreiniciar el servidor!

Page 30: Libro Lpiv

Asp_net -30-

• Acceso a toda la .NET Class Library• Independiente del lenguaje de programación• Encapsulamiento de funcionalidad a través de controles de

servidor y controles de usuario

ASP.NET – Ventajas (Cont.)

• Permite usar ADO.NET para acceso a datos• Soporta XML, Hojas de estilo CSS, etc.• Detección automática del navegador cliente, generando el

lenguaje de marcas soportado por el mismo• Mecanismo de Caching incorporado para páginas completa

o partes de la misma frecuentemente solicitadas

Componentes de una aplicación ASP.NET

1) WebForms (Formularios Web)a) Uno o más archivos con extensión .aspx

2) Archivos Code-Behinda) Archivos asociados a WebForms que contienen código del lado del

servidor (Ej. VB.NET, C#, etc.)3) Archivos de configuración con formato XML

a) Un archivo Web.config por c/aplicaciónb) Un único archivo Machine.config por servidor

4) Global.asaxa) Eventos a nivel de aplicación

Componentes de una aplicación ASP.NET

1) Directorio BINa) Contiene el assembly de la aplicación (Ej.: MiAplic.dll)b) Cero o más assemblies (Componentes externos)

2) Enlaces a Servicios Web XMLa) Permiten a la aplicación ASP.NET enviar y recibir datos desde Servicios

Web

Practica 2.-

1.- Generación de los Números de RUC (estableciendo las validaciones)

Page 31: Libro Lpiv

Asp_net -31-

2.- El gobierno tiene un plan para vivienda para el sector privado, bajo lassiguientes condiciones: Si los ingresos del comprador son menores a $1000, darácomo cuota inicial del 2% del costo de la casa y el resto lo distribuirá en pagomensuales constantes, a pagar en 5 años; Si los ingresos del comprador esmayor a $1000 la cuota inicial será del 5% y el resto se pagara en pagomensuales de 4 añosSe pide mostrar la cuota inicial y el pago mensual y el saldo respecto a cada mesen una cuadricula de datos(grid) ; Los departamentos son seleccionados a travésde la tabla

.

Nota.- El trabajador debe tener un ingreso mínimo de $500

3.- Elabore una pro forma de venta de computadoras ensamblada.Condiciones: mediante un cuadro lista colocar tres monitores con sus preciosrespectivos( Samsung 250, Compac 180 , IBM 280).Una lista de discos duros( 20 GB 80, 30 GB 100, 40 GB 110)Mediante opciones el procesador 800 MHZ 300 , 1 GHz 400, 2 GMz 600)Mediante CheckBox colocar : Mouse 15, Teclado 20, estabilizador 25Todos los precios están expresados en dolares, mediante una pagina Aspx,coloque todo el diseño ( Puede colocar imágenes que representen cadadispositivo) al elegir un dispositivo de mostrar su precio , además debe tener un

El numero de Ruc se genera a partirdel numero de libreta electoral , enel text1 solo se ingresara números,luego este numero se descomponede la sgte manera:Sm= D1*1 + D2*2 + D3*3 +.....+D8*8Donde D1, D2 ...son los dígitosLuego esta suma se divide entre 9,su residuo se le concatena con elnumero electoral al final.Los dos primeros dígitos pudenser:10 = Persona natural12= Persona Jurídica

establecer las validaciones en cada

Ingrese Libreta ElectoralTipo de Persona Jurídica Natural

Dirección de Correo

Fecha de Actualización

Teléfono

RUC GENERADO

Enviar

area Costo85 Mts c $1500095 Mts c $ 18000105 mts c. $ 21000

Datos de ingreso:Nombre del comprador, Sueldo ,el tipo dedepartamento y la fecha de compraTodos los datos deben ser validados

Page 32: Libro Lpiv

Asp_net -32-

boton general para visualizar el Precio Total, el IGV y el neto a pagar en doloresy soles.

Page 33: Libro Lpiv

Asp_net -33-

CAPITULO 4Acceso a datos

En nuestro caso, nos centraremos única y exclusivamente en ADO.NET como

modelo de objetos de acceso ADO.NET ha sufrido a lo largo de los últimos años

diferentes mejoras y actualizaciones, desde que .NET apareció.

El resumen de las diferentes versiones de ADO.NET podría quedar de la siguiente

forma.

ADO.NET 1.0 apareció con Microsoft .NET Framework 1.0. Posteriormente, ADO.NET

1.1 sufrió una pequeñas y casi inapreciables actualizaciones con la aparición de

Microsoft .NET Framework 1.1. En el caso del entorno Visual Studio 2005, éste trabaja

con Microsoft .NET Framework 2.0 y por lo tanto, utiliza ADO.NET 2.0, el cuál añade

algunas características nuevas adicionales.

ADO.NET

El acceso a fuentes de datos es algo indispensable en cualquier lenguaje oplataforma de desarrollo. La parte de la BCL que se especializa en el acceso adatos se denomina de forma genérica como ADO.NET.

ADO.NET ofrece una funcionalidad completamente nueva, que tiene poco que vercon lo existente hasta la fecha en el mercado. Sin embargo, con el ánimo de retirarbarreras a su aprendizaje, Microsoft denominó a su nuevo modelo de acceso adatos con un nombre similar y algunas de sus clases recuerdan a objetos depropósito análogo en el vetusto ADO.

ADO.NET es un modelo de acceso mucho más orientado al trabajo desconectadode las fuentes de datos de lo que nunca fue ADO. Si bien este último ofrecía laposibilidad de desconectar los Recordsets y ofrecía una forma de serialización deestos a través de las diferentes capas de una aplicación, el mecanismo no es ni delejos tan potente como el que nos ofrece ADO.NET.

Arquitectura de ADO.NET

El concepto más importante que hay que tener claro sobre ADO.NET es su modode funcionar, que se revela claramente al analizar su arquitectura:

Page 34: Libro Lpiv

Asp_net -34-

Figura 1.3.- Arquitectura de ADO.NET

Existen dos capas fundamentales dentro de su arquitectura: la capa conectada yla desconectada.

Capa conectada

La primera de ellas contiene objetos especializados en la conexión con losorígenes de datos. Así, la clase genérica Connection se utiliza para establecerconexiones a los orígenes de datos. La clase Command se encarga de enviarcomandos de toda índole al origen de datos. Por fin la clase DataReader estáespecializada en leer los resultados de los comandos mientras se permanececonectado al origen de datos.

La clase DataAdapter hace uso de las tres anteriores para actuar de puente entrela capa conectada y la desconectada.

Estas clases son abstractas, es decir, no tienen una implementación real de la quese pueda hacer uso directamente. Es en este punto en donde entran en juego losproveedores de datos. Cada origen de datos tiene un modo especial de Así, porejemplo, las clases específicas para acceder a SQL Server se llamanSqlConnection, SqlCommand, SqlDataReader y SqlDataAdapter y seencuentran bajo el espacio de nombres System.Data.SqlClient. Es decir, alcontrario que en ADO clásico no hay una única clase Connection o Command que

Page 35: Libro Lpiv

Asp_net -35-

se use en cada caso, si no que existen clases especializadas para conectarse yrecuperar información de cada tipo de origen de datos.

Existen proveedores nativos, que son los que se comunican directamente con elorigen de datos (por ejemplo el de SQL Server o el de Oracle), y proveedores"puente", que se utilizan para acceder a través de ODBC u OLEDB cuando noexiste un proveedor nativo para un determinado origen de datos.

Capa desconectada

Una vez que ya se han recuperado los datos desde cualquier origen de datos que

requiera una conexión ésta ya no es necesaria. Sin embargo sigue siendo

necesario trabajar con los datos obtenidos de una manera flexible. Es aquí cuando

la capa de datos desconectada entra en juego. Además, en muchas ocasiones es

necesario tratar con datos que no han sido obtenidos desde un origen de datos

relacional con el que se requiera una conexión. A veces únicamente necesitamos

un almacén de datos temporal pero que ofrezca características avanzadas de

gestión y acceso a la información.

¿Qué capas o qué partes hay dentro de ADO.NET?

Dentro de ADO.NET tenemos dos partes importantes.

La primera de ellas es la que corresponde con el nombre de espacio System.Data y que

constituye los objetos y clases globales de ADO.NET.

La otra parte es la que corresponde con los objetos que permiten el acceso a datos a una

determinada fuente de datos desde ADO.NET y que utilizan así mismo, las clases del

Nombre de espacio System.Data.

Esta última parte, queda constituida por las clases y objetos de los diferentes proveedores

de acceso a datos como se muestra en la figura.

Page 36: Libro Lpiv

Asp_net -36-

Visión general de las clases de ADO.NET

System.DataLas clases del nombre de espacio System.Data son bastantes extensas y variadas.Quizás las clases más importantes son la clase DataView, la clase DataSet y la claseDataTable.

La clase DataSet

El DataSet es una representación de datos residente en memoria que proporciona

una modelo de programación relacional coherente independientemente del origen

de datos que contiene. El DataSet contiene en sí, un conjunto de datos que han

sido volcados desde el proveedor de datos.

Debemos tener en cuenta que cuando trabajamos con DataSets, el origen de

datos no es lo más importante, ya que éste, puede ser cualquier tipo de origen de

datos. No tiene porqué ser una base de datos.

Un DataSet contiene colecciones de DataTables y DataRelations.

El DataTable contiene una tabla o tablas, mientras que la DataRelation contiene

las relaciones entre las DataTables.

Sin embargo, no es necesario especificar todo esto hasta el último detalle como

veremos más adelante.

La clase DataView

Page 37: Libro Lpiv

Asp_net -37-

Este objeto nos permite crear múltiples vistas de nuestros datos,además de permitirnos presentar los datos.

Es la clase que nos permite representar los datos de la clase DataTable,permitiéndonos editar, ordenar y filtrar, buscar y navegar por unconjunto de datos determinado.

La clase DataTable

Este objeto nos permite representar una determinada tabla en memoria,

de modo que podamos interactuar con ella.

A la hora de trabajar con este objeto, debemos tener en cuenta el

nombre con el cuál definamos una determinada tabla, ya que los objetos

declarados en en el DataTable es sensitivo a mayúsculas y minúsculas.

Los proveedores de acceso a datos Los proveedores de acceso a datos es la capa inferior de la parte correspondiente al

acceso de datos y es la responsable de establecer la comunicación con las fuentes de

datos.

En este conjunto de nombres de espacio, encontraremos casi siempre las clases

Connection, Command, DataAdapter y DataReader como las clases más generales, las

cuales nos permiten establecer la conexión con la fuente de datos.

Proveedores de acceso a datos de .NET Framework

Dentro del entorno .NET Framework, encontramos un nutrido conjunto de proveedoresde acceso a datos.

Estos son los siguientes:

ODBC .NET Data Provider

OLE DB .NET Data Provider

Oracle Client .NET Data Provider

SQL Server .NET Data Provider

Estos proveedores de acceso a datos incluidos en Microsoft .NET Framework, lospodemos encontrar en los nombres de espacio:

System.Data.Odbc System.Data.OleDb System.Data.OracleClient System.Data.SqlClient

Page 38: Libro Lpiv

Asp_net -38-

El proveedor ODBC .NET permite conectar nuestras aplicaciones a fuentes dedatos a través de ODBC.

El proveedor OLE DB .NET permite conectar nuestras aplicaciones a fuentes dedatos a través de OLE DB.

Otros proveedores de acceso a datos

Si bien el proveedor de acceso a datos es el mecanismo a través del cuálpodemos establecer una comunicación nativa con una determinada fuente dedatos, y dado que Microsoft proporciona los proveedores de acceso a datos máscorrientes, es cierto que no los proporciona todos, si bien, con OLE DB y ODBC,podemos acceder a la inmensa totalidad de ellos.Sin embargo, hay muchos motores de bases de datos de igual importancia comoOracle, MySql, AS/400, etc.En estos casos, si queremos utilizar un proveedor de acceso a datos nativo,deberemos acudir al fabricante o a empresas o iniciativas particulares para quenos proporcionen el conjunto de clases necesarias que nos permitan abordar estaacción.

El objeto Connection

Este objeto es el encargado de establecer una conexión física con unabase de datos determinada.Para establecer la conexión con una determinada fuente de datos, nosólo debemos establecer la cadena de conexión correctamente, sino queademás deberemos usar los parámetros de conexión y el proveedor deacceso a datos adecuado.Con este objeto, podremos además abrir y cerrar una conexión.

El objeto Command

Este objeto es el que representa una determinada sentencia SQL o un

Stored Procedure.Aunque no es obligatorio su uso, en caso de necesitarlo, lo utilizaremosconjuntamente con el objeto DataAdapter que es el encargado deejecutar la instrucción indicada.

El objeto DataReader

Este objeto es el utilizado en una sola dirección de datos.Se trata de un objeto de acceso a datos muy rápido.Este objeto puede usar a su vez el objeto Command o el método ExecuteReader.

Page 39: Libro Lpiv

Asp_net -39-

El paradigma de la conexiónCuando abordamos un proyecto de acceso a fuentes de datos, siemprenos encontramos con una duda existencial.¿Debemos crear una conexión con la base de datos al principio denuestra aplicación y cerrarla cuando la aplicación se cierre?, ¿o debemoscrear una conexión con la base de datos sólo cuando vayamos a trabajarcon la fuente de datos?. ¿Y si estamos trabajando continuamente conuna fuente de datos?, ¿cómo penalizarían todas estas acciones?.

Es difícil de asumir que acción tomar en cada caso, y es quedependiendo de lo que vayamos a realizar, a veces es más efectiva unaacción que otra, y en otras ocasiones, no está del todo claro, ya que noexiste en sí una regla clara que especifique qué acción tomar en unmomento dado.

Lo que sí está claro es que el modelo de datos de ADO.NET que hemosvisto, quedaría resumido en cuanto a la conectividad de la manera en laque se representa en la figura 1.

Visión general de ADO.NET respecto a la conectividad con bases de datos

Figura 1

El objeto DataSet nos ofrece la posibilidad de almacenar datos, tablas ybases de datos de una determinada fuente de datos.De esta manera, podemos trabajar con las aplicaciones estandodesconectados de la fuente de datos.Sin embargo, a veces necesitamos trabajar con la fuente de datos estandoconectados a ella.El objeto DataReader nos ofrece precisamente la posibilidad de trabajar confuentes de datos conectadas.Por otro lado, el objeto DataReader tiene algunas particularidades queconviene conocer y que veremos a continuación.

Page 40: Libro Lpiv

Asp_net -40-

Conociendo el objeto DataReaderEl objeto DataReader nos permite como hemos indicado anteriormente,establecer una conexión con una fuente de datos y trabajar con esta fuentede datos sin desconectarnos de ella, sin embargo, hay diferentescualidades y particularidades que conviene conocer.

DataReader es de solo lectura

Lo que hemos dicho anteriormente, requiere sin embargo, que estaconexión se establezca en un modo de sólo lectura, al contrario de lo quese puede hacer con el objeto DataSet, con el que podemos interactuar conla fuente de datos en modo lectura y modo escritura.

DataReader se maneja en una sola dirección

El objeto DataReader sólo permite que nos desplacemos por los datos enuna sola dirección, sin vuelta atrás.Por el contrario, el objeto DataSet nos permite movernos por los registrospara adelante y para atrás.Además, sólo podemos utilizar el objeto DataReader con conexionesestablecidas en una sentencia SQL por ejemplo, pero no podemos variaresta.Para hacerlo, debemos entonces modificar la conexión con el comandoestablecido.

DataReader es rápido

Debido a su naturaleza y características, este objeto es bastante rápido a lahora de trabajar con datos.Como es lógico, consume además menos memoria y recursos que unobjeto DataSet por ejemplo.Sin embargo, dependiendo de las necesidades con las que nos encontremos, puede queeste método de acceso y trabajo no sea el más idóneo.

Analizando el flujo de trabajo de DataReader

Cuando trabajamos con fuentes de datos conectadas, trabajaremos con el objetoDataReader.

Page 41: Libro Lpiv

Asp_net -41-

Para trabajar con este objeto, utilizaremos los objetos siguientes del proveedor deacceso a datos:

Connection

Command

DataReader

Un resumen gráfico de esto es lo que podemos ver en la figura 1.

El flujo de conectividad de DataReader

Objetivo: Construir un formulario con un control GridView para visualizar,modificar y eliminar datos de la tabla “Products” de la base de datosNorthwind.NOTA: La serie de pasos utilizada en la resolución del presente ejercicio nonecesariamente refleja las mejores prácticas de Desarrollo y Arquitectura deaplicaciones empresariales establecidas por Microsoft.

1. Abra el Visual Web Developer 2005 Express Edition. Seleccione el menúFile / New Web Site para crear un nuevo Web Site, según la siguientefigura. Note que el lenguaje es el Visual Basic, pero si usted desea cambiarlo aVisual C# no hay ningún problema, ya que los pasos son los mismos.

Page 42: Libro Lpiv

Asp_net -42-

2. Luego presione el botón OK. Se abrirá una ventana conteniendo la páginaDefault.aspx con el HTML que se mostrará. A los efectos del ejercicio, vamos acrear páginas relativas al tópico abordado, por lo tanto, abra el Solution Explorer(Ctrl + Alt + L) y excluya esta página. Para agregar una nueva página al SolutionExplorer, haga click con el botón derecho sobre C:\WebSite\DCE20005 yseleccione Add New Item. Escriba GridView.aspx en el nombre de la página y hagaclick en Add.

Page 43: Libro Lpiv

Asp_net -43-

3. En caso de que quiera escribir los Tags HTML directamente en esta ventana,siéntase a gusto, sin embargo, le mostraré los controles en la ventana de Design.Siendo así, haga click en el botón Design en el pie de la página.

4. Abra la Toolbox y arrastre un control GridView hacia el formulario. Se abrirá unaSmart Tag conteniendo diversas opciones.

Page 44: Libro Lpiv

Asp_net -44-

5. Seleccione Auto Format y aplique un formato de acuerdo con su gusto.

6. Para definir la fuente de datos, en Choose Data Source seleccione New Data Source.

Page 45: Libro Lpiv

Asp_net -45-

Usted puede seleccionar cualquier fuente de datos, pero en este caso elija Database.Note que ya se define un ID (SqlDataSource1), y en caso de que quiera alterarlo bastarácon escribirlo. Como vamos a utilizar esta conexión en varios ejercicios, deje elcheckbox de conexión seleccionado para que la string de conexión sea almacenada en elarchivo Web.Config.

7. Se abrirá un “wizard” por el cual se configura la base de datos y se arma la cadenade conexión, le dejamos ese paso para que lo configure de acuerdo a susnecesidades.

8. Una vez configurada la cadena de conexión necesita identificar cuál es la tabla queserá usada como fuente de datos. Seleccione Productos y algunos campos.

Page 46: Libro Lpiv

Asp_net -46-

9. Como permitiremos la edición de datos en el GridView, haga click en el botónAdvanced para abrir esta ventana, donde seleccionará las dos opciones para incluiren el control SqlDataSource todas las instrucciones SQL que hacen efectivas estasoperaciones.

Page 47: Libro Lpiv

Asp_net -47-

10.En la Smart Tag se muestran los checkboxes para que active las operaciones.Seleccione:• Enable Paging, para permitir la paginación.• Enable Sorting, para permitir el ordenado por columna.• Enable Editing, para permitir la edición de datos directamente en el GridView.• Enable Deleting, para permitir la exclusión de datos.

11.Si desea editar las columnas, seleccione Edit Columns. Primero deberá “deseleccionar” el tilde campo “Auto generate Columns”, y luego añadir las columnasque desee

Page 48: Libro Lpiv

Asp_net -48-

12. Puede aplicar el formato que desee en los campos, por ejemplo configure elformato en el campo “ProductNumber para que sea exhibido como numérico, sindecimales (DataFormatString = {0:n0}).Se puede aplicar cualquier formato a las columnas.

13.Como fue permitida la edición de datos en el control, personalice los botones alidioma en el que el control será utilizado. Para ello, seleccione el Command Field,localice las propiedades Text de cada botón y modifique el texto.

Page 49: Libro Lpiv

Asp_net -49-

14.Seleccione Auto Format en el Smart Tag, y aplique un formato de acuerdo con suagrado. (en el ejemplo adjunto en el material se utiliza un Theme para la definicióndel estilo)

15.Guarde el proyecto y presione CTRL + F5 para ejecutarlo en el navegador.Es importante destacar que el ASP.NET 2.0 no necesita tener un IIS instalado en lamáquina, ya que trabaja con su propio servidor web de desarrollo.

Page 50: Libro Lpiv

Asp_net -50-

Empleando la BDD Northwind1.-Ingrese el código del cliente en caso que exista muestre sus pedidos de lo contrario enuna una ventana muestre código no existe.

2.-Seleccione una categoría desde un combo , seleccionando una categoría muestre todoslos productos de esa categoría

3.- Consulta por opciones

Código de Cliente

Enviar

Pedidos del ClienteCompañíaCiudadOrderId OrderDate Freight

Cantidad de Pedidos <<Retorno

1.1 Pedidos Por Mes del Año

Mes TotalEneroFebrero

Total Monto

Retorno

Page 51: Libro Lpiv

Asp_net -51-

4.- Ingresando el Nro de pedido que muestre Su detalle correspondiente: Emplear las tablas: Products (ProductId, Productname, Quantity,UnitPrice , Total)ademas al final debe sumar la columna total.

5.- Consulta en Cascada .- Ingrese dos rangos de fecha (fecha inicial y fecha final ) validarpara que la fecha final sea mayor al inicial , debe mostrar todos los pedidos en esa fecha(OrederId, Companyname y fecha ) ademas en el detalle habra un hipervínculo paramostrar su detalle correspondiente en ota pagina similar a la pregunta nro 4.

6- Mantenimiento general de una tabla , mostrar en un Datagrid la lista de productos(Idproducto, ProductName , UnitPrice y hipervínculo para editar (Modificar de los datos)como se muestra en la grafica .Ademas tendrán un botón para agregar nuevos productos.

Edición de Campos ( para Modificación de registros) y Nuevos registros

Pedidos por ClienteCustomerid Companyname Total

<<Retorno

En ambos casos emplearagrupamientos las tablas a emplearson Order y [order Details]El Primero agrupe por mes y elsegundo por código y nombre delcliente

Page 52: Libro Lpiv

Asp_net -52-

El código no se ingresa, se generao se incrementa a la hora de grabarun dato

Page 53: Libro Lpiv

Asp_net -53-

CAPITULO 5

PAGINAS MAESTRAS (MASTER PAGES)

Vamos a aprender ciertas cuestiones avanzadas de ASP.NET 2.0 que nosayudarán a crear aplicaciones más potentes y con menos esfuerzo que con cualquier otraherramienta de desarrollo, incluyendo versiones anteriores de .NET

Páginas principales o Master Pages

Lo más habitual cuando se crea una aplicación o un sitio Web es que laspáginas que lo conforman sean todas bastante parecidas o al menos queexistan varios grupos de páginas similares que sólo varían ciertos contenidosentre ellas. Por ejemplo, puede haber una categoría de páginas paramostrar artículos en el que todas son iguales excepto por el contenido delpropio artículo en su parte central, mientras que en otra zona de laaplicación el diseño es completamente diferente pero sus páginas se parecentodas entre síPor ejemplo, la siguiente figura muestra capturas de dos páginas pertenecientes alportal MSDN:

Page 54: Libro Lpiv

Asp_net -54-

Tradicionalmente para conseguir esta similitud entre páginas había quecrearlas individualmente o recurrir a artificios propios como por ejemplo elde utilizar archivos de inclusión para renderizar ciertas partes de laspáginas desde un mismo origen en disco. Aún en este último casola capacidad de modificación era limitada y normalmente se reducía a lascabeceras y pies de las páginas y poco más. En el primero de los casos(retocar una a una) cualquier cambio estético de un sitio medianamentegrande era poco menos que una locura de realizar

ASP.NET 2.0 ofrece una nueva característica destinada a paliar estatradicional carencia y permite definir páginas cuyo aspecto y funcionalidadderiva de unas páginas especiales comunes llamadas Páginas principales oMaster Pages

¿Qué son las Master Pages?

Una Master Page proporciona una forma de definir una estructura e interfazcomunes para un grupo de páginas pertenecientes a un mismo sitio Web.Esta estructura común se almacena en un único archivo independiente. Ellofacilita mucho su mantenimiento puesto que, para actualizar todas laspáginas que lo utilizan, basta con editar dicho archivo

Page 55: Libro Lpiv

Asp_net -55-

Una MP es en realidad como una página ASPX normal que contienecódigo, elementos HTML y controles Web de servidor. Sin embargo poseeuna extensión diferente (.master) y utilizan una

directiva <% @ master %> en lugar de una directiva <% @ page %>. Por lodemás se pueden considerar prácticamente equivalentes. Esto es importanteporque significa que ya sabemos todo lo necesario para crearlas.

Una página ASPX normal puede derivar su estructura a partir de una MPsimplemente añadiendo un atributo MasterPageFile a su directiva de página, así:

Definición de una Master Page

Para agregar una Master Page a nuestro proyecto sólo hay que elegir elicono Página Principal en el diálgo de agregar nueva referencia de cualquiercarpeta del mismo:

Al abrir una MP aparece un diseñador idéntico al de una página ASPXnormal. Podemos arrastrar sobre su superficie cualquier control así comoeditar su HTML de la manera usual. También lleva un archivo de códigoasociado en el que se puede responder a sus diversos eventos. La únicadiferencia apreciable a simple vista respecto a una página normal es quecontiene por defecto un control de tipo ContentPlaceHolder. La sintaxis de estecontrol es análoga a la siguiente:

Page 56: Libro Lpiv

Asp_net -56-

Su única propiedad interesante es precisamente su identificador ya que estetipo de control se utiliza para marcar las posiciones en las que iránlos diferentes contenidos de las páginas derivadas dentro de la plantilla deestructura que es una Master Page.

De este modo, cuando una página normal derive de una MP, sólo se podráintroducir código dentro de las zonas definidas por estos comodines de contenidoCuando añadimos una nueva página ASPX a nuestro proyecto y existe almenos una Master Page, podemos marcar una opción para que, antesde crearla, nos permita seleccionar de qué MP derivará:

Master Pages anidadasUna Master Page a su vez puede derivar de otra que previamentehayamos definido, por lo que heredará la estructura y contenidos de ésta.Al igual que en el caso de las páginas normales sólo hace falta establecerel atributo MasterPageFile.

Esta característica se suele utilizar para definir en una de ellas la estructurageneral del sitio Web. En otra de las MP se define únicamente la estructurade los contenidos que contiene la estructura general.

Page 57: Libro Lpiv

Asp_net -57-

La única "pega" que tiene el uso de Master Pages anidadas es que noestán soportadas por el diseñador de Visual Studio, por lo que habrá queañadir los controles directamente a mano desde la vista de marcado de lapágina. Siempre podremos diseñarlas visualmente antes de hacerlas derivarde una Master Page anidada y así salvar esta limitación.

Acceso a los elementos de una Master PageEs posible acceder a los controles y elementos de una página principaldesde el código de una página derivada a través de una directiva especialllamada MasterType. Sólo hay que indicar la ruta de la Master Page a la quequeremos acceder, así:

Por ejemplo, si nuestra Master Page tiene un elemento de imagen llamado'Logo' y queremos variarlo en cada página mediante código sólo habría queescribir:Nota: Master.FindControl("Logo")Lo mejor, sin embargo, es definir propiedades en la Master Page queencapsulen el acceso a sus elementos. El código anterior devuelve unobjeto de tipo Control que deberemos convertir en un control de imagen yasignarle la ruta al logo a utilizar. Es más mucho más fácil, menos propenso aerrores y de mejor mantenimiento futuro el definir una propiedad 'Logo' ennuestra Master Page y acceder a ella escribiendo, por ejemplo:Nota: Master.Logo = "http://www.microsoft.com/logo_msdn.gif"que nos aislará de lo que ocurra debajo para gestionar ese logo.

Temas y skin

Page 58: Libro Lpiv

Asp_net -58-

Gracias a las Master Pages podemos definir una estructura común para laspáginas de nuestra aplicación Web. Sin embargo aún no hemos resueltotodas las cuestiones sobre el mantenimiento de la interfaz que habíamosplanteado. Los controles que añadamos a las zonas de contenido denuestras páginas todavía tendrán el aspecto predeterminado. Podemosconfigurar su aspecto estableciendo las propiedades de apariencia delcontrol (como BackColor, Font, etc...). El problema que tiene este métodoes que, si deseamos cambiar por completo la apariencia de estos controles,tendríamos que tocar una por una todas las páginas. Esta no es una opciónadmisible en cuanto la aplicación dispone de más de unas pocas página

Temas y máscaras (Skins) La carpeta App_Themes Estructura de un archivo .skin Propiedades que se pueden personaliza Asignación de temas Asignación global de temas Precedencia de propiedades Deshabilitar temas en controles concretos Clases de un mismo tipo de control Inclusión automática de hojas de estilo Rutas de imágenes

HOJAS DE ESTILO

HTML ofrece una interesante opción para independizar el aspecto de suselementos del contenido de las páginas a través del uso de las hojas deestilo en cascada (Cascading Style-Sheets o CSS). Las hojas CSS permitendefinir el aspecto de cualquier elemento HTML contenido en una página.Aunque se pueden definir dentro de la propia página, hacerlo así les haceperder su verdadero sentido que no es otro que el de separar la definicióndel aspecto. Así, es posible crear archivos con extensión '.css' que se vinculana las diferentes páginas de un sitio y definen el aspecto de sus elementos.

Dentro de una hoja CSS se definen fundamentalmente dos tipos de estilos:

Redefinición de etiquetas: indican qué aspecto deben tener todas lasetiquetas de un determinado tipo en las páginas a las que esté vinculado elarchivo. Por ejemplo:

text-decoration: none;color: #DBB94F;}

Page 59: Libro Lpiv

Asp_net -59-

body { background-color: #656565;background-image: url(Images/background.gif);background-repeat: repeat;margin: 0;padding: 0;text-align: center;font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 0.7em;color: #FFFFFF;}

En este fragmento, las etiquetas definen el aspecto que deben tomar los enlaces yel cuerpo de la página.

Clases: definen aspectos que no están asociados a una etiquetaHTML concreta sino que se pueden asignar mediante el atributo class a cualquierade ellas. Por ejemplo:

EstiloSimple { text-decoration: none; color: #DBB94F;}

La gran ventaja de esta técnica es que basta con tocar el archivo CSSpara que todas las páginas que lo utilizan vean su aspecto modificado demanera acorde a los cambios. Da igual que sea sólo una o haya miles. Altener el aspecto centralizado en una ubicación única el mantenimiento esmuy sencillo.

Soporte de estilos en ASP.NETLo anterior es una característica de HTML independiente de lenguajes deprogramación como

ASP.NET. Por supuesto ASP.NET tiene en cuenta y soporta perfectamente lashojas CSS.

Se puede añadir una etiqueta <LINK> a la cabecera de una página ASPXy los elementos HTML que se generan a partir de los controles que contiene semostrarán siguiendo las indicaciones de la misma.

El entorno de desarrollo de Visual Studio permite definir los estilos de loscontroles HTML de servidor de ASP.NET utilizando su propiedad Style, tantoen tiempo de diseño como durante la ejecución. El diseñador de páginasASPX incluso ofrece un diálogo especializado para crear los estilos.

Page 60: Libro Lpiv

Asp_net -60-

La gran ventaja de esta técnica es que basta con tocar el archivo CSSpara que todas las páginas que lo utilizan vean su aspecto modificado demanera acorde a los cambios. Da igual que sea sólo una o haya miles. Altener el aspecto centralizado en una ubicación única el mantenimiento esmuy sencillo.

Soporte de estilos en ASP.NETLo anterior es una característica de HTML independiente de lenguajes deprogramación como

ASP.NET. Por supuesto ASP.NET tiene en cuenta y soporta perfectamente lashojas CSS.

Se puede añadir una etiqueta <LINK> a la cabecera de una página ASPXy los elementos HTML que se generan a partir de los controles que contiene semostrarán siguiendo las indicaciones de la misma.

El entorno de desarrollo de Visual Studio permite definir los estilos de loscontroles HTML de servidor de ASP.NET utilizando su propiedad Style, tantoen tiempo de diseño como durante la ejecución. El diseñador de páginasASPX incluso ofrece un diálogo especializado para crear los estilos.

Page 61: Libro Lpiv

Asp_net -61-

TRABAJO 3: MASTER PAGES Y EL CONTROL SQLDATASOURCE

Proyecto 1: Creara un proyecto con una página Maestra.Las imágenes serán proporcionadas por el profesor.Creara una carpeta principal y 3 subcarpetas con los nombres asignados en laimagen mostrada. En cada carpeta ubicara las imágenes que el profesor leproporcionara.

Page 62: Libro Lpiv

Asp_net -62-

Creara una Página Maestra y creara tal como se muestra en el diseño mostrado.El Diseño del Master Page (MasterPage.Master)

HyperLink1 = Llama a la pagina MisEmpleados.aspxHyperLink2 = Llama a la pagina ZonasTuristicasHyperLink3 = Llama a la pagina Expositores.aspx

Al hacer un clic en cualquier imagen, la imagen se deberá de mostrar en untamaño de 300 * 250. el cual se mostrara en otra pagina .aspx.Imágenes.aspx

Page 63: Libro Lpiv

Asp_net -63-

Ejecución de la Pagina Expositores.apx

En esta pagina Web, realizara el mismo diseño y enlazara las imágenes encada control LinkButton, también cuando se de Clic se deberá de mostraren otra pagina Web, con un tamaño de 350*250.MisEmpleados.aspx

Page 64: Libro Lpiv

Asp_net -64-

Proyecto 2: Manejo de Datos, utilizando una página maestra llamara a cuatropáginas Web en el cual se mostraran un listado del contenido de cada tabla.

Creara un Master Page, que se diseño único que tomaran todas las paginas Webque vienen a continuación.

Page 65: Libro Lpiv

Asp_net -65-

Customers.Aspx

La ejecución sera:

Page 66: Libro Lpiv

Asp_net -66-

Similar para la pagina de empleados.aspx

Similar para la El WebProducts.aspx

Y para el formulario WebOrden.aspx :

Page 67: Libro Lpiv

Asp_net -67-

CAPITULO 6

DetailsViewConstruir un formulario con el control DetailsView para visualizar y

modificar los registros de la tabla “Employes” de la base de datosAdventureWorks.

1. Agregue un nuevo Web Form al Solution Explorer, llámelo DetailsView.aspx.2. Abra la Toolbox y arrastre un control DetailsView hacia el formulario. Se abrirá una

ventana con la Smart Tag para informar la fuente de datos. Seleccione New datasource:

3. Informe cuál es la fuente de datos, en este caso es una Database.

Page 68: Libro Lpiv

Asp_net -68-

4. Seleccione la tabla Employees con algunos campos.

Page 69: Libro Lpiv

Asp_net -69-

5. Haga click en el botón Advanced Options y seleccione los dos checkboxes para quesean creados los métodos para soportar la inserción y edición de datos.

6. Volviendo al Smart Tag, seleccione todos los checkboxes para activar la paginacióny el mantenimiento de datos.

7. .Ingrese a la opción “EditFields…” y des seleccione la opción “Auto generatecolumns”. Del mismo modo que hizo con la grilla, añada los campos que desee pormedio de la opción “Add New Field…”

8. Personalice el campo “Fecha Finalización” para que quede con el formato deacuerdo con la propiedad DataFormatString, que es {0:dd/MM/yyyy}. El “0:”indica que será el campo actual y el formato viene a continuación.

Page 70: Libro Lpiv

Asp_net -70-

9. analiza el código HTML generado, notará que el contenido de la fuente de datosestá declarado dentro del HTML a través de la Tag asp:SqlDataSource.

<form id="form1" runat="server"><asp:DetailsView ID="DetailsView1" runat="server" AllowPaging="True"AutoGenerateRows="False" BackColor="#DEBA84" BorderColor="#DEBA84" BorderStyle="None"BorderWidth="1px" CellPadding="3" CellSpacing="2" DataSourceID="SqlDataSource1"Height="50px" Width="125px"><FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" /><EditRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" /><RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" /><PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" /><Fields><asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowInsertButton="True"/><asp:BoundField DataField="ProductId" HeaderText="Codigo" SortExpression="ProductId" /><asp:BoundField DataField="Name" HeaderText="Nombre" SortExpression="Name" /><asp:BoundField DataField="ProductNumber" HeaderText="Producto"SortExpression="ProductNumber" /><asp:BoundField DataField="DaysToManufacture" HeaderText="Demora en Dias"SortExpression="DaysToManufacture" /><asp:BoundField DataField="ListPrice" HeaderText="Precio" SortExpression="ListPrice" /><asp:BoundField DataField="DiscontinuedDate" DataFormatString="{0:dd/MM/yyyy}"HeaderText="Fecha Finalizacion" SortExpression="DiscontinuedDate" /> </Fields><HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" /></asp:DetailsView><asp:SqlDataSource ID="sqlDataSource" runat="server" ConnectionString="<%$ConnectionStrings:ADVENTUREWORKSConnectionString %>"ConflictDetection="CompareAllValues"SelectCommand="SELECT [ProductID], [Name], [ProductNumber], [Color], [DaysToManufacture],[ListPrice], [DiscontinuedDate] FROM [Production].[Product]"

Page 71: Libro Lpiv

Asp_net -71-

DeleteCommand="DELETE FROM [Production].[Product] WHERE [ProductID] =@original_ProductID AND [Name] = @original_Name AND [ProductNumber] =@original_ProductNumber AND [Color] = @original_Color AND [DaysToManufacture] =@original_DaysToManufacture AND [ListPrice] = @original_ListPrice AND [DiscontinuedDate] =@original_DiscontinuedDate"InsertCommand="INSERT INTO [Production].[Product] ([Name], [ProductNumber], [Color],[DaysToManufacture], [ListPrice], [DiscontinuedDate]) VALUES (@Name, @ProductNumber,@Color, @DaysToManufacture, @ListPrice, @DiscontinuedDate)"OldValuesParameterFormatString="original_{0}"UpdateCommand="UPDATE [Production].[Product] SET [Name] = @Name, [ProductNumber] =@ProductNumber, [Color] = @Color, [DaysToManufacture] = @DaysToManufacture, [ListPrice] =@ListPrice, [DiscontinuedDate] = @DiscontinuedDate WHERE [ProductID] = @original_ProductIDAND [Name] = @original_Name AND [ProductNumber] = @original_ProductNumber AND [Color] =@original_Color AND [DaysToManufacture] = @original_DaysToManufacture AND [ListPrice] =@original_ListPrice AND [DiscontinuedDate] = @original_DiscontinuedDate"><DeleteParameters> <asp:Parameter Name="original_EmployeeID"></asp:Parameter> ... <asp:Parameter Name="original_Photo"></asp:Parameter> </DeleteParameters> <UpdateParameters> <asp:Parameter Type="String" Name="LastName"></asp:Parameter> ... <asp:Parameter Name="original_Photo"></asp:Parameter> </UpdateParameters> <InsertParameters> <asp:Parameter Type="String" Name="LastName"></asp:Parameter> ... <asp:Parameter Name="Photo"></asp:Parameter> </InsertParameters></asp:SqlDataSource></form>

10.Guarde el proyecto y ejecútelo en el navegador. Incluya un nuevo registro yguárdelo. Enseguida, modifique el contenido y guarde nuevamente.

Page 72: Libro Lpiv

Asp_net -72-

Page 73: Libro Lpiv

Asp_net -73-

Capitulo 7

FormViewObjetivo: Construir un formulario con el control FormView para visualizarlos registros de la tabla “Customers” de la base de datos NorthWind.

1. Agregue un nuevo Web Form en el Solution Explorer. Arrastre el controlFormView hacia el formulario.

2. La fuente de datos será un Database. Seleccione la tabla Customers de la base dedatos Northwind y todos los campos.

3. Aplique un Auto Format según la opción.

4. Ajuste el layout de manera que quepan todos los datos.

Page 74: Libro Lpiv

Asp_net -74-

5. Guarde el proyecto y ejecútelo en el navegador. Navegue en las páginas paravisualizar los registros.

DataListConstruir un formulario con el control DataList. Este control muestra diversosregistros en la misma página en la que usted debe determinar el área de datosy el respectivo layout.

1. Agregue un nuevo Web Form al Solution Explorer.Arrastre el control DataList hacia el formulario.Como en los ejercicios anteriores seleccione el DataSource, en este caso seleccionela tabla Orders.

2. Configure con AutoFormat para que el control tenga un aspecto de su agrado.

Page 75: Libro Lpiv

Asp_net -75-

3. Personalice el campo OrderDate para que la fecha sea mostrada en el formatoadecuado.Para ello, seleccione el OrderDateLabel y el enlace Edit DataBindings.Configure el formato para Short Date.

Note que en el HTML, la propiedad clave para exhibir los datos es la Text donde usa el Eval(field).

<asp:DataList ID="DataList1" Runat="server DataSourceID="SqlDataSource1" RepeatColumns="3"><ItemTemplate> <b>OrderID: </b> <asp:Label ID="OrderIDLabel" Text='<%# Eval("OrderID") %>'/> OrderDate: <asp:Label ID="OrderDateLabel" Text='<%# Eval("OrderDate", "{0:d}") ... ShipCountry: <asp:Label ID="ShipCountryLabel" Text='<%# Eval("ShipCountry")%>'/> </ItemTemplate></asp:DataList>

Page 76: Libro Lpiv

Asp_net -76-

<asp:SqlDataSource ID="SqlDataSource1" Runat="server SelectCommand="SELECT [OrderID], [OrderDate], [ShipName], [ShipAddress], [ShipCity], [ShipCountry] FROM [Orders] ConnectionString="<%$ ConnectionStrings:AppConnectionString1 %>"></asp:SqlDataSource>

Guarde el proyecto y ejecútelo en el navegador.

Ejemplos Básicos con ADO NET

La BDD a emplear es BDVENTA y en otros casos será Northwind.Sus tablas:

Page 77: Libro Lpiv

Asp_net -77-

La conexión puede efectuarse con SqlServer o con cualquier otro Proveedor de BDDComo se muestra en la figura.

Imports system.data.sqlClientImports System.data.OleDbImports system.dataPublic Class WebApli01Inherits System.Web.UI.PageDim CnSql As New SqlConnection("Server=localhost;uid=sa;database=BDventas")Dim CnOle As New OleDbConnection("Provider=SQlOLEDB;uid=sa;database=ventas")

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.LoadIf Not Page.IsPostBack Thenlblfecha.Text = Now.ToShortDateStringEnd If2 End SubPrivate Sub CmdSQLClient_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles CmdSQLClient.ClickDim da As New SqlDataAdapter("Select * From Clientes", CnSql) Dim ds As NewDataSetda.Fill(ds)GridView1.DataSource = ds.Tables(0)GridView1.DataBind()End Sub

Private Sub CmdOLEDB_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles CmdOLEDB.ClickDim da As New OleDbDataAdapter("Select * from Empleado", CnOle)Dim ds As New DataSetda.Fill(ds, "Vendedor")Grid1View1.DataSource = ds.Tables(0)Grid1View1.DataBind()

Page 78: Libro Lpiv

Asp_net -78-

End SubEnd Class

Empleando conexiones conectadas

Su diseño

Codificación de la pagina Web02.aspx

Imports System.DataImports System.Data.sqlclientPublic Class Web02Inherits System.Web.UI.PageDim cn As New SqlConnection("Server=(Local);Uid=sa;database=Bdventas")Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.LoadIf Not Page.IsPostBack ThenDim dr As SqlDataReaderDim sql1 As String = "Select * From Clientes" Dim sql2 As String = "Select * From Fac_Cabe"

Txtlist1 TxtList2 TxtList3

Page 79: Libro Lpiv

Asp_net -79-

Dim sql3 As String = "Select * From Articulos"Dim cmd As New SqlCommand(sql1 + ";" + sql2 + ";" + sql3, cn)cn.Open()cmd.CommandType = CommandType.Textdr = cmd.ExecuteReader ‘Lectura de un solo sentido hacia adelanteWhile dr.ReadListBox1.Items.Add(dr("Cli_Nom")) End While'Desplaza al lector al siguiente resultado'de la sentencoa SQLdr.NextResult() While dr.ReadListBox2.Items.Add(dr("Fac_Num") & Space(2) & dr("fac_Fec")) End Whiledr.NextResult() While dr.ReadListBox3.Items.Add(dr("Art_nom")) ‘nombre de Articulo End Whiledr.Close()cn.Close()txtList1.Text = ListBox1.Items.Count ‘Muestra las cantidadestxtList2.Text = ListBox2.Items.CounttxtList3.Text = ListBox3.Items.CountEnd IfEnd SubEnd Class

Aplicación 03.- Empleando GridView con Vínculos y relaciones de Tablas

Empleando la BDD NOrthwindCodificación de la pagina Web03.aspxImports System.dataImports System.Data.SqlClient

Page 80: Libro Lpiv

Asp_net -80-

Public Class Web03Inherits System.Web.UI.Page‘variables GeneralesDim cn As New SqlConnection("Server=localhost;uid=sa;database=Northwind") Dim dsAs New DataSetDim da As New SqlDataAdapter("Select CategoryID,CategoryName From Categories", cn)Dim db As New SqlDataAdapter("Select ProductID,ProductName,CategoryID FromProducts", cn)Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load da.Fill(ds, "Categoria")db.Fill(ds, "Productos")

'Relacionando las tablas con el objeto DateRelationDim colP As DataColumn = ds.Tables("Categoria").Columns("CategoryID") Dim colH As DataColumn = ds.Tables("Productos").Columns("CategoryID") Dim rl As DataRelationrl = New DataRelation("Relacion", colP, colH)ds.Relations.Add(rl)GridView1.DataSource = ds.Tables("Categoria").DefaultViewGrid1View1.DataBind() End SubPrivate Sub Grid1View1_SelectedIndexChanged(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles GridView1.SelectedIndexChangedDim dv As New DataView(ds.Tables("Categoria")) Dim dr As DataRowViewdr = dv(Grid1View1.SelectRow.Index)GridView2.DataSource = dr.CreateChildView("Relacion") GridView2.DataBind()End SubEnd Class

4.- Aplicación en cascada , al seleccionar un cliente que muestre todas sus facturas:

Page 81: Libro Lpiv

Asp_net -81-

Para no hacer redundancia con sqldataAdapter , dataset y el llenado del dataset en memoria,seria ideal de realizar una función, de tal modo que cada vez que se desea tener acceso auna tabla de BDD o consulta invocamos a la funcion.

Codificación de la pagina web04.aspxImports System.DataImports System.Data.SqlClientImports System.DrawingPublic Class WebApli04Inherits System.Web.UI.Page‘Cadena de conexionConst cn ="Server=(local);uid=sa;database=Bdventas"

Function Runsql(Cad as string) as DataTableDim Da as new SqldataAdapter(cad,cn)Dim Dt as New DataTableDa.Fill(Dt)Return DtDa.dispose() ‘ Liberar memoriaEnd FunctionPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles MyBase.Load'Introducir aquí el código de usuario para inicializar la páginaIf Not Page.IsPostBack ThenDropDownList1.Datasource=Runsql(“Select * From Clientes”)DropDownList1.DataTextField=”Cli_Nom” ‘ Que muestre el nombreDropDownList1.DataValueField=”Cli_Cod” ‘Pero se puede acceder a su códigoDropDownList1.Databind()End IfEnd SubPrivate Sub DropDownList1_SelectedIndexChanged(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged

RUNSQLCadSql

Puede ser :Select * from Cliente

Nos da una Tabla

Page 82: Libro Lpiv

Asp_net -82-

TryDim codigo As String =chr(39)+ DropDownList1.SelectedValue+ chr(39)Dim strsql As Stringstrsql = "Select Fac_num From Fac_Cabe where Cli_cod=" & codigoDropDownList2.Datasource=Runsql(Strsql)DropDownList2.Databind()If DropDownList2.items.count=0 thenlblMensaje.Text = " * No tiene Facturas"lblMensaje.ForeColor = Color.Red'Ocultando la respuesta del datagridPanel1.Visible = FalseExit SubElselblMensaje.Text = ""Panel1.Visible = TrueEnd IfCatch ex As SqlExceptionResponse.Write(ex.Message) End TryEnd SubPrivate Sub DropDownList2_SelectedIndexChanged(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles DropDownList2.SelectedIndexChangedTryDim factura As String = chr(39)+DropDownList2.SelectedItem.Text+chr(39)Dim strsql As Stringstrsql = "Select Art_nom,P.Art_Pre,Art_Can,Total=(P.Art_Pre*Art_can) " & _" From Fac_deta d, Articulos p where d.Art_cod=p.Art_cod " & _" and Fac_Num=" & facturaDim da As New SqlDataAdapter(strsql, cn) Dim ds As New DataSetda.Fill(ds, "Detalle")GridView1.DataSource = ds.Tables("Detalle")DataGrid1.DataBind()'Obteniendo la suma total del detalletxtTotal.Text = Format(ds.Tables("Detalle").Compute("Sum(Total)", ""), "##0.##") Catchex As SqlExceptionResponse.Redirect(ex.Message)End TryEnd SubEnd Class

Page 83: Libro Lpiv

Asp_net -83-

Aplicacion 5.-

La salida será

Aplicación 05.aspxImports System.DataImports System.Data.SqlClientPublic Class Web05Inherits System.Web.UI.PageDim cn As New SqlConnection("Server=localhost;uid=sa;database=bdventas")

Private Sub txtdatos_TextChanged(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles txtdatos.TextChangedDim strsql As Stringstrsql = "Select cli_nom, cli_nom From clientes " & _" where Cli_nom like '" & RTrim(txtdatos.Text) & "%'" Dim da As New SqlDataAdapter(strsql, cn)Dim ds As New DataSet da.Fill(ds)ListBox1.DataSource = ds.Tables(0) ListBox1.DataTextField = "Cli_nom"

Page 84: Libro Lpiv

Asp_net -84-

ListBox1.DataValueField = "Cli_cod" ListBox1.DataBind()End SubPrivate Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVale As System.EventArgs) Handles ListBox1.SelectedIndexChangedTryDim codigo As String = chr(39) & ListBox1.SelectedItem.Value & chr(39)Dim strsql As String

strsql = "Select Top 5 A.Fac_Num,Fac_fec, Total=sum(Art_pre*Art_can) “ & _ “ From Fac_Cabe A, Fac_deta B, Articulos C Where a.Fac_num=B.fac_num " & _" And B.art_cod=C.Art_cod and Cli_cod=" & codigo & “ Order by Total desc"Dim da As New SqlDataAdapter(strsql, cn)Dim ds As New DataSetda.Fill(ds, "Facturas")GridView1.DataSource = ds.Tables("Facturas") GridView1.DataBind()Catch ex As SqlExceptionResponse.Write(ex.Message) End TryEnd SubEnd Class

6.- Búsqueda de rangos por letras.-

En el primer radioList llamado (opciones)

RadioButtonListRbletrasTxtTotal

Page 85: Libro Lpiv

Asp_net -85-

Codificación web06.aspxImports System.DataImports System.Data.SqlClientPublic Class Web06Inherits System.Web.UI.PageDim cn As New SqlConnection("Server=localhost;uid=Sa;database=Northwind") Dim dsAs New DataSetPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.LoadIf Not Page.IsPostBack ThenDim da As New SqlDataAdapter("Select CustomerID,CompanyName,ContactName FromCustomers", cn)da.Fill(ds, "Clientes")GridView1.DataSource = ds.Tables("Clientes")GridView1.DataBind()txtTotal.Text = ds.Tables(0).Rows.CountDim i As IntegerFor i = 65 To 90 ‘para llenar las opciones como letrasRbletras.Items.Add(Chr(i)) NextEnd IfEnd SubPrivate Sub Opciones_SelectedIndexChanged(ByVal sender As System.Object, ByVal eAs System.EventArgs) Handles Opciones.SelectedIndexChangedTryDim letras As String = Opciones.SelectedItem.Text

Page 86: Libro Lpiv

Asp_net -86-

Dim strsql As Stringstrsql = "Select CustomerID,CompanyName,ContactName From Customers " & _" where CompanyName Like '[" & letras & "]%'" Dim da As New SqlDataAdapter(strsql, cn)Dim dsF As New DataSet da.Fill(dsF)Session("Pagina") = dsF.Tables(0) GridView1.CurrentPageIndex = 0Grid1View1.DataSource = dsF.Tables(0) GridVew1.DataBind()txtTotal.Text = dsF.Tables(0).Rows.CountCatch ex As SqlExceptionlblmensaje.Text = ex.MessageEnd TryEnd SubPrivate Sub Grid1View1_PageIndexChangind(ByVal source As Object, ByVal e AsSystem.Web.UI.WebControls.DataGridPageChangedEventArgs) HandlesGridView1.PageIndexChangedGridView1.CurrentPageIndex = e.NewPageIndexGrid1View1.DataSource = Session ("Pagina") DataGrid1.DataBind ()End Sub

Private Sub Rbletras_SelectedIndexChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles Rbletras.SelectedIndexChangedTryDim strsql As Stringstrsql = "Select CustomerID,CompanyName,ContactName From Customers " & _" where CompanyName Like '" & Rbletras.SelectedItem.Text & "%'" Dim da As NewSqlDataAdapter(strsql, cn)Dim dsU As New DataSetda.Fill(dsU)Session("Pagina") = dsU.Tables(0) GridView1.CurrentPageIndex = 0GridView1.DataSource = dsU.Tables(0) GridView1.DataBind()txtTotal.Text = dsU.Tables(0).Rows.CountCatch ex As Exceptionlblmensaje.Text = ex.MessageEnd TryEnd SubEnd Class

Page 87: Libro Lpiv

Asp_net -87-

Eliminación de registros empleando El Control DatalistArrastrar el DataList hacia el formulario:

- Insertar una tabla 4 filas por dos columnas- Colocar los títulos correspondientes y arrastrar tres label , una imagen y un checbox- En la etiqueta código dar el nombre Lbcod- Y al checkbox dar el nombre Ck1-

Enlazar cada etiqueta con el capo que estaráen memoria cuando se ejecute la pagina:Hacer clic derecho :

luego en la caja de propiedades , asignar elcampo al objeto correspondiente

Repetir para la etiquetaapellido :Eval(“Apealumno”)Para el nombre:Eval(“Nomalumno”)La imagen esta sujeta alcodigo y relacionado con lacarpeta Fotos:Eval(“Idalumno”,”fotos/{0}.jpg”)

{0}=hace referencia alcampo.

Los Items que serán colocadosen el datalist tienen querealizarse a traves de plantillasComo se muestra en la Figura:En la sección Item templateprimero colocar:

Page 88: Libro Lpiv

Asp_net -88-

Cuando se termina de Editar las plantillas para el datalist quedara como se muestra:

El boton eleminar , realizara la accion de borrar físicamente todos los registros que hayamarcado con el Checkbox (Ck1=> nombre que se dio en la plantilla)

Imports System.DataImports System.Data.SqlClientPartial Class lista Inherits System.Web.UI.Page Const cadcon = "Server=(Local); DataBase=BDInstituto; Uid=sa Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)Handles Me.Load If Not Page.IsPostBack Then listado() End If

End SubSub listado()

Dim da As New SqlDataAdapter("select * from alumno", cadcon) Dim dt As New DataTable da.Fill(dt) DataList1.DataSource = dt DataList1.DataBind()

End Sub

Page 89: Libro Lpiv

Asp_net -89-

Protected Sub BtnDel_Click(ByVal sender As Object, ByVal e As System.EventArgs)Handles BtnDel.Click Dim f As Integer Dim ck As CheckBox Dim cad As String = "" For f = 0 To DataList1.Items.Count - 1 ck = CType(DataList1.Items(f).FindControl("ck1"), CheckBox) If ck.Checked = True Then cad = cad + Chr(39) + CType(DataList1.Items(f).FindControl("LABEL1"),Label).Text + Chr(39) + "," End If Next cad = "(" + Left(cad, Len(cad) - 1) + ")" Label4.Text = cad ' muestra los codigos anulados Dim cn As New SqlConnection(cadcon) Dim sql As String sql = "Delete From Alumno where idalumno In " + cad Dim cmd As New SqlCommand(sql, cn) cn.Open() cmd.ExecuteNonQuery() cn.Close() listado()

End SubEnd ClassLa presentacion final sera:

INTRODUCCIÓN A LOS SERVICIOS WEB

Dar forma a la lista decodigos que se ha deanular, colocar losparentesis y quitar la ultimacoma asignada en lacadena de esta formaquedaria('A0002','A0004','A0009') encaso que se hayaselccionado estos trescodigos

Page 90: Libro Lpiv

Asp_net -90-

TRABAJO Nro4: ADO.NET ASP.NET 2.0

Empleando la base de datos BDFACTURACreara un Master Page o pagina maestra, el cual será la base de todo el proyectoque va a crear.Creara un menú, y en el archivo Web.SiteMap creara todos los enlacesque llamara a cada página Web que usted creara y llamara.APLICACION 1:En esta primera aplicación mostrara los registros paginados de 10 en 10, todoslos clientes de la base de datos ventas.Cuando haga clic en un enlace, deberá de ir a la siguiente pagina llevando elcódigo como parámetro.WebApli01.aspx

Este campo Hipervínculo apuntara a la pagina WebApli02.aspx con una variableque usted creara, para que lo obtenga en el formulario siguiente donde realizaraun mantenimiento de datos de la tabla Clientes. WebApli02.aspx

Page 91: Libro Lpiv

Asp_net -91-

Cuando llama a la pagina WebApli02.aspx con el parámetro de envió, deberá demostrarse todos los datos cliente seleccionado en el formulario anterior.

Page 92: Libro Lpiv

Asp_net -92-

Realizara los procesos de mantenimiento de datos con los siguientes botones:El botón nuevo: generara el código del cliente de forma automática con el formatode código C0000. Por mas que se elimine un registre deberá de generarse elsiguiente código, tomando el ultimo registro ingresado de la tabla Clientes.El botón grabar: Antes de ingresar el nuevo registro deberá de validar si todos losdatos están completos en las cajas de texto, use los controles de validación de acuerdo acada campo requerido.

El botón Actualizar: Cuando haga clic en el código de la pagina WebWebApli01.aspx y muestre los datos del cliente en la pagina WebApli02.aspx, podráhacer la actualización del cualquier datos de la tabla cliente.El botón Eliminar: Usted podrá eliminar cualquier registro que haya realzado la búsqueda.

APLICACION 2: (WebApli02.aspx)Para realizar esta aplicación usara 2 Listboxs, un DropDownList1 dondeagregara como ítems(>,<,>=,<=,=) y una caja de texto donde se podrá filtrar el la carga ingresada y se mostraraen Listbox2.Diseño:Colocar Tres controles Textbox para Cuastomers, Ordenes (la BDD para este proyecto esel NorthWind)

Page 93: Libro Lpiv

Asp_net -93-

Desarrollara el programa bajo las siguientes consideraciones:1. Cuando cargue el programa se debera de mostrar en el Listbox1, todos los registrosde la tablaCustomers, y en la caja de texto TxtxNCustomers se deberá de mostrar el total deCustomers.2. Cuando haga un clic en cualquier Customers del Listbox1, se deberá de mostrar enel GridView1 todas las órdenes del Customers seleccionado. Los datos en el GridView1 semostrara los datos en paginación de 5 en 5.3. Se mostrara en la caja de texto LblTotal el total de órdenes emitidas por clienteseleccionado.4. En el label Lblcarga se mostrara el total de carga emitida por cliente seleccionado.5. seleccione un operador en el DropDowlist1(>,<,>=,<=,=) y agregue en la caja detexto Txtdato una carga, y haga clic en el boton Filtrar carga se deberá de mostrar en elListbox2, todas las ordenes emitidas por dicha carga filtrada, que muestran actualmente enel GridView1.Tip: Para mantener en memoria los datos que se muestran en el GridView1, usarauna variable session(Nombre de variable de session). Usted llenara la variable sesión deesta manera.Session(—Paginar“) = tbl ” este DataTable ya tiene datos.Si crea un nuevo DataTable, puede llenar de datos desde una variable session quetiene datos guardados en memoria de esta manera:Dim tbl1 as new DataTable= Session(—Paginar“)Si desea filtrar los datos del DataTable y mostrarlo en otro control puede usar el metodoSelect.Tbl1.Select(Expresión, El campo a ordenar) Una expresión puede ser por ejemplo:OrderID = 10248.6. A la vez de deberá de mostrar en la caja de texto TxtNOrden, el total de ordenesmostradas en elListbox2.El resultado final será:

Page 94: Libro Lpiv

Asp_net -94-

CAPITULO 8

Introducción:

Acceder y manipular datos directamente en una base de datos desde un formulario WebForm puede constituir un uso muy ineficaz de los recursos, y puede crear riesgos deseguridad. Una forma de mejorar la eficacia y seguridad del acceso a las bases de datoses crear procedimientos almacenados en el servidor de la base de datos, e invocarestos procedimientos almacenados desde nuestro formulario Web Form. Acceder a unabase de datos a través de un procedimiento almacenado limita el código del formularioWeb Form y el ancho de banda de la red que debemos utilizar cuando realizamostareas complicadas. Acceder a una base de datos mediante un procedimientoalmacenado también protege la base de datos al limitar el acceso directo a la base dedatos a procedimientos almacenados locales y de confianza.

Una alternativa al acceso directo a bases de datos desde nuestra aplicación Web esinvocar un procedimiento almacenado que accederá a la base de datos por nosotros.El uso de procedimientos almacenados tiene varias ventajas respecto al accesodirecto a bases de datos, incluyendo la eficacia, seguridad y la protección de la base dedatos.

Page 95: Libro Lpiv

Asp_net -95-

¿Qué es un Procedimiento Almacenado?

Un procedimiento almacenado es un procedimiento escrito por un desarrollador deaplicaciones para bases de datos y que está asociado a una base de datos específica. Acontinuación, otras aplicaciones Web pueden invocar estos procedimientos almacenadospara acceder y manipular datos de la base de datos.

Acceso programático a una base de datos

Los procedimientos almacenados permiten el acceso a una base de datos mediantela invocación de un procedimiento existente en lugar de tener que escribirnuestras propias instrucciones SQL. Los procedimientos almacenados estánformados por secuencias de instrucciones Transact-SQL, y funcionan de modo similar a losprocedimientos de una aplicación Web en cuanto a que las instrucciones se invocanpor su nombre, y pueden tener tanto parámetros de entrada como de salida.

Los tres tipos de procedimientos almacenados son:

• Procedimientos almacenados que devuelven registros.-Los procedimientosalmacenados que devuelven registros se utilizan para encontrar registros específicos,clasificar y filtrar esos registros, y devolver el resultado de las operaciones de búsqueda,clasificación y filtrado a un objeto DataSet o un control enlazado a lista. Estosprocedimientos almacenados se basan en instrucciones Select de SQL. Un ejemplo deun procedimiento almacenado que devuelve registros es una petición de la cantidad, fecha yreceptor de los tres últimos movimientos procesados en una cuenta bancaria. Estos datospodrían cargarse en un objeto DataSet para su posterior procesamiento, o mostrarsedirectamente al usuario en un control ListBox.

• Procedimientos almacenados que retornan un valor, también denominadosprocedimientos almacenados escalares Los procedimientos almacenados que retornan unvalor se utilizan para ejecutar un comando o función de la base de datos que devuelve unúnico valor. Debido a que sólo se devuelve un valor, los procedimientosalmacenados que retornan un valor a menudo se utilizan en el código y, a continuación, elresultado se muestra a los usuarios. Un ejemplo de procedimiento almacenado que

Page 96: Libro Lpiv

Asp_net -96-

retorna un valor es devolver el valor total de los tres últimos movimientos que sehan procesado en una cuenta bancaria.

• Los procedimientos almacenados de acción .-Los procedimientos almacenados deacción se utilizan para realizar algunas funciones en la base de datos, pero no devuelven unregistro o un valor. Estas funciones de la base de datos pueden incluir actualizar, editar omodificar los datos. Un ejemplo de un procedimiento almacenado de acción es unapetición para actualizar una sola dirección de correo en la base de datos de clientes deuna compañía.

Invocar procedimientos almacenados:

Antes de poder invocar un procedimiento almacenado, debemos identificar el nombredel procedimiento y los parámetros que utiliza. Una vez identificado el procedimientoalmacenado, podemos invocarlo, pasarle los parámetros de entrada que se requieran paraprocesar nuestra petición y gestionar los parámetros de salida incluidos en la respuesta.

Para invocar un procedimiento almacenado, en primer lugar debemos identificarlo,crear un objeto DataAdapter, y configurar el objeto DataAdapter para que apunte ala conexión de la base de datos. Seguidamente, establecer la propiedadCommandText al nombre del procedimiento almacenado identificado y, finalmente,establecer la propiedad CommandType en CommandType.StoredProcedure.

Identificar el procedimiento almacenado:

El primer paso para utilizar un procedimiento almacenado es identificar el tipo y el nombredel mismo. Podemos utilizar un objeto DataAdapter o un objeto DataReader para invocarlos tres tipos de procedimientos almacenados. El método que invoquemos para ejecutarel procedimiento almacenado variará dependiendo del tipo de procedimientoalmacenado que invoquemos:

• Procedimientos almacenados que devuelven registros

Cuando invocamos un procedimiento que devuelve un conjunto de registros, necesitamosalmacenar ese conjunto de registros en un DataSet, o directamente en un controlenlazado a lista utilizando un DataReader. Si deseamos utilizar un DataSet,debemos utilizar un DataAdapter y el método Fill. Si deseamos utilizar unDataReader, debemos utilizar un objeto Command y el método ExecuteReader, y vincularel registro devuelto al control enlazado a lista.

• Procedimientos almacenados que retornan un valor

Cuando invocamos un procedimiento almacenado que devuelve un valor, invocamosel método ExecuteScalar

del objeto Command, y guardamos el resultado en una variable del tipo de datos apropiado.

Page 97: Libro Lpiv

Asp_net -97-

• Procedimientos almacenados que realizan una acción

Cuando invocamos un procedimiento almacenado que realiza alguna acción en la base dedatos pero no devuelve un conjunto de registros o un valor, utilizamos el métodoExecuteNonQuery del objeto Command.

Establecer la propiedad SelectCommand

Para configurar la llamada al procedimiento almacenado, debemos crear un objetoSqlCommand y guardarlo como la propiedad SelectCommand de un DataAdapter. Acontinuación, debemos establecer las propiedades Connection, CommandText yCommandType.

Ejemplo: Creando un procedimiento Almacenado: Create Procedure Sp_ListadoClientesAs

Select * From Clientes

Go

Podemos invocar al procedimiento desde código de la siguiente manera: Dim daClientes asNew SqlDataAdapter()

daClientes.SelectCommand = New SqlCommand()

daClientes.SelectCommand.Connection = conn

daClientes.SelectCommand.CommandText = "Sp_ListadoClientes"

daClientes.SelectCommand.CommandType = CommandType.StoredProcedure

También podemos establecer directamente la conexión y el texto del comando cuandocreamos el objeto SqlDataAdapter. El siguiente código realiza la misma tarea que el códigoanterior:

Dim daClientes As New SqlDataAdapter("Sp_ListadoClientes", conn)

daClientes.SelectCommand.CommandType =CommandType.StoredProcedure

Ejecutar el Procedimiento Almacenado:

Para ejecutar el procedimiento almacenado y guardar los registros devueltos en unDataSet, invocar el método Fill del objeto SqlDataAdapter. Este método rellenaun objeto DataTable con los registros devueltos del procedimiento almacenado.

Page 98: Libro Lpiv

Asp_net -98-

Por ejemplo, el siguiente código rellena el objeto DataSet ds con losregistros devueltos desde el procedimiento almacenado Sp_ListadoClientes utilizandoel daClientes SqlDataAdapter:

daClientes.Fill(ds, "Categories")

Utilizando parámetros

Cuando utilizamos procedimientos almacenados en una base de datos SQL Server o encualquier otra base de datos basada en procedimientos, se pueden utilizar parámetros parapasar información y recuperar datos del procedimiento almacenado. Cuando utilizamosparámetros con una base de datos SQL Server, los nombres de los parámetros quese agregan a la colección Parameters del objeto Command deben coincidir con losnombres de los parámetros del procedimiento almacenado; no obstante, el orden de losparámetros es flexible.

La siguiente tabla describe los tipos de parámetros disponibles en los procedimientosalmacenados.

Parámetro Uso

Input.- Utilizado por la aplicación Web para enviar valores de datosespecíficos a un procedimiento almacenado.

Output.-Utilizado por un procedimiento almacenado para enviar valores específicos deretorno a la aplicación

Web que lo invoca.

InputOutput.- Utilizado por un procedimiento almacenado tanto para recuperarinformación enviada por nuestra aplicación Web como para enviar valores de retornoespecíficos a la aplicación Web.

ReturnValue Utilizado por un procedimiento almacenado para enviar un valor de retorno ala aplicación Web que lo invoca.

Page 99: Libro Lpiv

Asp_net -99-

Aplicaciones con Store Procedure.-Crearemos 2 paginas webApli01.aspx

Creando el Procedimiento Almacenado: Create Procedure Sp_ListClientesAsSelect Cod_Cli,Nom_Cli From ClientesGoProgramando en el WebApli01.AspxCodigo Fuente:Imports System.Data.sqlclientPublic Class WebApli01Inherits System.Web.UI.PageDim cn As New SqlConnection("Server=localhost;uid=sa;Database=Ventas")

Personalizamos nuestro DataGrid1:Clic derecho Generador dePropiedades:Tab Columnas Agregamos 2Columnas: Crear Columnasautomáticamente en tiempo deejecución: Quitar el Checkl.

Campo de texto: Cod_Cli

Texto Encabezado: CodigoCampo de texto: Cod_CliCampo de Direccion URL: Cod_Cli Cadena deformato de direccion: WebApli02.aspx?Codigo={0}

Texto Encabezado: ClientesCampo de Datos: Nom_CliTab Paginación:Permitir Paginación: ActivadoTamaño de Paginación: 7 Filas

Page 100: Libro Lpiv

Asp_net -100-

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load'Introducir aquí el código de usuario para inicializar la páginaIf Not Page.IsPostBack ThenCall MostrarDatos() End IfEnd SubSub MostrarDatos()Dim da As New SqlDataAdapter("Sp_ListClientes", cn) Dim ds As New DataSetda.Fill(ds, "Clientes")DataGrid1.DataSource = ds.Tables("Clientes") DataGrid1.DataBind()End SubPrivate Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e AsSystem.Web.UI.WebControls.DataGridPageChangedEventArgs) HandlesDataGrid1.PageIndexChangedDataGrid1.CurrentPageIndex = e.NewPageIndexCall MostrarDatos()End SubPrivate Sub CmdSalir_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) HandlesCmdSalir.ClickResponse.Write("<script>window.close();</script>")End SubEnd Class

WebApli02.aspx

Controles Web usados:HyperLinkID=HyperLink1NavigateUrl=WebApli01.aspx6 Controles de textos1 label:ID= lblmensaje.

Page 101: Libro Lpiv

Asp_net -101-

Procedimientos Almacenados:

Create Procedure Sp_BuscarCliente@Cod_Cli char(5) AsSelect Cod_Cli,Nom_Cli,Direccion,Telefono,Ruc,Fecha_ing FromClientes Where Cod_Cli=@Cod_CliGo

Create Procedure Sp_GenCodigo@Cod_Cli char(5) OutputAsDeclare @Total int ,@mayor Char(5)Select @Mayor=Select Isnull(Max(Cod_Cli),’0000’) From ClientesSet @total=right(@mayor,4)+1Set @Cod_Cli='C'+right('0000'+ltrim(@Total),4)Go

Create Procedure Sp_IngClientes@Cod_Cli char(5),@Nom_Cli varchar(50),@Direccion varchar(50),@Telefono char(8),@ruc char(11),@Fecha_ing char(12) As

Insert Into Clientes (Cod_Cli,Nom_cli,Direccion,Telefono,ruc,Fecha_ing)values(@Cod_Cli,@Nom_cli,@Direccion,@Telefono,@ruc,@Fecha_ing) Go

Create Procedure Sp_UpdClientes@Cod_Cli char(5),@Nom_Cli varchar(50),@Direccion varchar(50),@Telefono char(8),@ruc char(11),@Fecha_ing char(12) As

Update Clientes Set Nom_cli=@Nom_cli,Direccion=@Direccion,ruc=@ruc,Fecha_ing=@Fecha_ing Where Cod_Cli=@Cod_Cli

Go

Create Procedure Sp_EliClientes@Cod_Cli char(5) AsDelete From Clientes Where Cod_Cli=@Cod_CliGo

Page 102: Libro Lpiv

Asp_net -102-

Programando la Pagina WebApli02.aspxCodigo Fuente:

Imports System.DataImports System.Data.SqlClientPublic Class WebApli02Inherits System.Web.UI.PageDim cn As New SqlConnection("Server=localhost;uid=sa;database=Ventas")Sub LimpiarControles()txtcodigo.Text = ""txtnombres.Text = "" txtdireccion.Text = "" txtTelefono.Text = "" txtruc.Text = ""txtfechaing.Text = Now.ToShortDateString 'Fecha del SistemaEnd SubSub GenerarCodigo()Dim cmd As New SqlCommand("Sp_GenCodigo", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@Cod_Cli", SqlDbType.Char, 5).Direction =ParameterDirection.Output cn.Open()cmd.ExecuteNonQuery()cn.Close()txtcodigo.Text = cmd.Parameters("@Cod_Cli").ValueEnd Sub

Private Sub Page_Load(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles MyBase.Load'Introducir aquí el código de usuario para inicializar la páginaIf Not Page.IsPostBack ThenDim codigo As String = Request.Params("Codigo") If Len(codigo) > 1 ThenDim cmd As New SqlCommand("Sp_BuscarCliente", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@Cod_Cli", SqlDbType.Char, 5).Value = codigo cn.Open()Dim dr As SqlDataReader = cmd.ExecuteReaderWhile dr.Read txtcodigo.Text = dr("Cod_Cli")

txtnombres.Text = dr("Nom_Cli") txtdireccion.Text = dr("Direccion")txtTelefono.Text = dr("Telefono") txtruc.Text = dr("ruc")txtfechaing.Text = dr("fecha_ing")

End Whilecn.Close() ElseCall LimpiarControles() Call GenerarCodigo()End IfEnd IfEnd Sub

Page 103: Libro Lpiv

Asp_net -103-

Private Sub CmdNuevo_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) HandlesCmdNuevo.ClickCall LimpiarControles() Call GenerarCodigo()End Sub

Private Sub CmdGrabar_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) HandlesCmdGrabar.ClickTry

If txtnombres.Text = "" Or txtdireccion.Text = "" Or _txtTelefono.Text = "" Or txtruc.Text = "" Or _

txtfechaing.Text = "" Thenlblmensaje.Text = "Falta Datos"lblmensaje.ForeColor = Color.RedExit SubEnd IfDim cmd As New SqlCommand("Sp_IngClientes", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@Cod_Cli", SqlDbType.Char, 5).Value = txtcodigo.Textcmd.Parameters.Add("@Nom_Cli", SqlDbType.VarChar, 50).Value = txtnombres.Textcmd.Parameters.Add("@Direccion", SqlDbType.VarChar, 70).Value = txtdireccion.Textcmd.Parameters.Add("@Telefono", SqlDbType.Char, 5).Value = txtTelefono.Textcmd.Parameters.Add("@ruc", SqlDbType.Char, 11).Value = txtruc.Textcmd.Parameters.Add("@fecha_ing", SqlDbType.Char, 12).Value = txtfechaing.Textcn.Open()Dim i As Integer = cmd.ExecuteNonQueryIf i = 1 Then

lblmensaje.Text = "Cliente Registrado"lblmensaje.ForeColor = Color.Blue

End IfCatch ex As SqlException

lblmensaje.Text = ex.MessageFinallycn.Close() End TryEnd Sub

Private Sub CmdActualizar_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) HandlesCmdActualizar.ClickTry

If txtnombres.Text = "" Or txtdireccion.Text = "" Or _ txtTelefono.Text = "" Or txtruc.Text = "" Or _

txtfechaing.Text = "" Thenlblmensaje.Text = "Falta Datos"lblmensaje.ForeColor = Color.Red

Page 104: Libro Lpiv

Asp_net -104-

Exit SubEnd If

Dim cmd As New SqlCommand("Sp_UpdClientes", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@Cod_Cli", SqlDbType.Char, 5).Value = txtcodigo.Textcmd.Parameters.Add("@Nom_cli", SqlDbType.VarChar, 50).Value = txtnombres.Textcmd.Parameters.Add("@Direccion", SqlDbType.VarChar, 100).Value = txtdireccion.Textcmd.Parameters.Add("@Telefono", SqlDbType.Char, 8).Value = txtTelefono.Textcmd.Parameters.Add("@Ruc", SqlDbType.Char, 18).Value = txtruc.Textcmd.Parameters.Add("@fecha_ing", SqlDbType.Char, 12).Value = txtfechaing.Textcn.Open()Dim i As Integer = cmd.ExecuteNonQuery() If i = 1 Thenlblmensaje.Text = "Registro Actualizado"lblmensaje.ForeColor = Color.BlueEnd IfCatch ex As SqlExceptionlblmensaje.Text = ex.MessageFinallycn.Close() End TryEnd SubPrivate Sub CmdEliminar_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) HandlesCmdEliminar.ClickTryDim cmd As New SqlCommand("Sp_EliClientes", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@Cod_Cli", SqlDbType.Char, 5).Value = txtcodigo.Text cn.Open()Dim i As Integer = cmd.ExecuteNonQueryIf i = 1 Thenlblmensaje.Text = "Registro Eliminado"lblmensaje.ForeColor = Color.BlueEnd If

Catch ex As SqlExceptionlblmensaje.Text = ex.MessageFinallycn.Close() End TryEnd SubEnd Class

Page 105: Libro Lpiv

Asp_net -105-

Resultado:

Page 106: Libro Lpiv

Asp_net -106-

Ejercicios emplando Store Procedure con la BDD Northwind:

1.-Pasando dos fechas que muestre la lista de pedidos entre ambas fechas (Orderid ,Companyname, Freight, Total Pedido y un Hipervínculo en el Grid para ver su detalle),el detalle sera colocado en otro GridView2 que tendra las siguientescolumnas(Productid, Productname,Quantity, UnitPrice y Total)

2.- Realizar el Matenimiento de la Tabla Producto primero seleccione el tipo decategoría para ingresar el producto; el codigo de producto no se ingresa se visualiza

3.- Colocar una lista de opciones ( Clientes que tengan pedido y Clientes que no hayanhecho pedido) y un combo que visualiza los años ; entoces al seleccionar una opcion yescoger un año que muestre en el Gridview su resultado

4.- En un DropDownListBox colocar el pais y en otra lista (listbox) colocar susciudades este ultimo depende del primero ademas el control sera de selección multiple ,al seleccionar uno o varias ciudades que muestre en un gridView la lista de clientes conla cantidad de Pedidos y el total correspondiente .

5.- Elobrar un SiteMenu y un master Page para unir todos los formularios anteriores

Nota.- El diseño de lso formularios y la presentacion sera tomado en cuenta para lapresentacion.

Page 107: Libro Lpiv

Asp_net -107-

Capitulo 9

¿Qué es un control de usuario?

Los controles de usuario simplifican la reutilización de código y componentes de laIU en una aplicación Web

Un control de usuario es un control de servidor Web definido por el usuario conuna extensión .ascx

Contiene HTML, pero no las etiquetas <HTML>,

<BODY>, o <FORM>

Los controles de usuario pueden simplificar la reutilización de código ycomponentes habituales de la interfaz de usuario; por ello, saber qué son y cómofuncionan es una parte importante del aprendizaje del desarrollo con ASP.NET.

Los controles de usuario son páginas ASP.NET con una extensión de archivo

.ascx. Los controles de usuario ofrecen un modo fácil de particionar y reutilizarfuncionalidades habituales de la interfaz de usuario en nuestras aplicaciones WebASP.NET. Similar a una página de un formulario Web Form, podemos crear estoscontroles con cualquier editor de texto, o desarrollarlos utilizando clases de códigosubyacente. Además, de forma similar a un formulario Web Form, los controles deusuario se compilan cuando se solicitan por primera vez y se almacenan enmemoria del servidor para reducir el tiempo de respuesta de las siguientespeticiones. Sin embargo, a diferencia de los formularios Web Form, los controlesde usuario no pueden ser solicitados de modo independiente; deben estarincluidos en una página Web Form para que puedan funcionar.

El Microsoft .NET Framework impide que archivos con la extensión de archivo.ascx puedan ser visualizados en un navegador Web. Es una medida de seguridadque asegura que el control de usuario no puede ser visualizado como una páginaASP.NET independiente.

Page 108: Libro Lpiv

Asp_net -108-

Que hay en un Control de Usuario?

Un control de usuario está formado por HTML y código, pero como los controlesde usuario son utilizados por formularios Web Forms, no contienen las etiquetasHTML <HEAD>, <BODY> ni <FORM>. En lugar de ello, estas etiquetas seincluyen en cada formulario Web Form que utilice el control de usuario.

Cuando un formulario Web Form utiliza un control de usuario, éste último participaen el ciclo de vida del evento del formulario Web Form. Además, como un controlde usuario es una página ASP.NET, tiene su propia lógica de página. Por ejemplo,un control de usuario puede gestionar su propio postback en su procedimiento deevento Page_Load.

Page 109: Libro Lpiv

Asp_net -109-

Controles de Usuario asociados a la pagina subyacente:

Al igual que los formularios Web Forms tienen páginas de código subyacente, loscontroles de usuario también tienen una página de código subyacente asociada.La directiva @ Page se utiliza en los formularios Web Forms para asociar unapágina de código subyacente, mientras que la directiva @ Control se utiliza parahacer referencia a una página de código subyacente desde una página de controlde usuario. La directiva @ Control sólo puede utilizarse con controles de usuario, yúnicamente podemos incluir una directiva @ Control por cada archivo .ascx. Porejemplo, para hacer referencia a una página de código subyacente de un controlde usuario denominada WebUserControl1, en un proyecto de aplicación Webdenominado test, utilizamos la siguiente directiva @ Control:

<%@ Control Language="vb" Codebehind="WebUserControl1.ascx.vb"Inherits="test.WebUserControl1" %>

<%@ Control Language="c#" Codebehind="WebUserControl1.ascx.cs"Inherits="test.WebUserControl1" %>

Agregar un control de usuario

Utilizar la directiva @ Register para incluir un control de usuario en una página ASP.NET

<%@ Register TagPrefix="demo" TagName="validNum" Src="numberbox.ascx" %>

„ Insertar el control de usuario en un formulario Web Form

<demo:validNum id="num1" runat="server"/>

Podemos ubicar un control de usuario en cualquier formulario Web FormASP.NET. La página que hace referencia al control de usuario se denomina host,y el control se incluye en ella.

Los controles de usuario se incluyen en un formulario Web ASP.NET

utilizando la directiva @ Register, como muestra el siguiente código:

<%@ Register TagPrefix="demo" TagName="validNum"

Src="numberbox.ascx" %>

El atributo TagPrefix determina un espacio de nombres único para el control deusuario de forma que múltiples controles de usuario con el mismo nombre puedendiferenciarse entre sí. El atributo TagName es el único nombre para el control deusuario. El atributo Src es la ruta virtual al archivo del control de usuario.

Page 110: Libro Lpiv

Asp_net -110-

Aplicaciones.-

Crear un nuevo proyecto Web.Hacer clic derecho en el proyecto agregar - Agregar un control e usuario WebPonga como nombre WebuserApli01.ascx

En el Tab Columnas=> Quitar el check Crear columnas automáticamente en tiempo deejecución.Agregar en columnas disponible una columna plantilla.En el Tab Paginación => Permitir la paginación, Tamaño de pagina 5 filas.Configurando el DataGrid1:Click derecho Editar Plantilla Columns[0]

Para tener este resultado, tiene que agregarun tabla, 1 columna y 5 FilasEn la primera Fila agregar un label quemuestre el mensajeConsulta de Datos.En la Segunda Fila agregar unHyperLink1:Text= Aplicación Nro.1NavigateUrl= WebApli01.aspxEn la tercera Fila agregar unDataGrid1,click derechopropiedades/generador de propiedades.En el Tab Columnas=> Quitar el checkCrear columnas automáticamente entiempo de ejecución.Agregar en columnas disponible unacolumna plantilla.En el Tab Paginación => Permitir lapaginación, Tamaño de pagina 5 filas.En la Cuarta Fila agregar unHyperlink2:Text=Aplicación Nro.2NavigateURL=WebApli02.aspxEn la quinta columna agregar unDataGrid2,click derecho propiedades /generador de propiedades.

Page 111: Libro Lpiv

Asp_net -111-

La configuración del DataGrid2, tiene los mismo

Parámetros, solo el HyperLink4, tiene que Modificar los siguientes parámetros enel DataBindings:

Text: Databinder.Eval(Container.dataItem, CategoryName )

NavigateURL= "WebApli02.aspx?CategoryID="&DataBinder.Eval(Container.DataItem,"CategoryID")

Codificacion del Control WebUserAplicacion1.ascxImports System.DataImports System.Data.SqlClientPartial Class WebControlMenu Inherits System.Web.UI.UserControl Dim cn As New SqlConnection("Server=localhost;IntegratedSecurity=SSPI;database=NorthWind") Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)Handles Me.Load If Not Page.IsPostBack Then Dim da As New SqlDataAdapter("Select CompanyName,CustomerID FromCustomers", cn) Dim tbl As New DataTable da.Fill(tbl) GridView1.DataSource = tbl GridView1.DataBind()

Da= New SqlDataAdapter("Select CategoryId,CAtgoryName From Categories", cn)

En HeaderTemplate: Agregar un label con elmensaje Customers.En ItemTemplateAgregar un HiperLink3:DataBinding2:Text:DataBinder.Eval(Container.DataItem,"CompanyName")NavigateURL="WebApli01.aspx?Custome rID="&DataBinder.Eval(Container.DataItem,"CustomerID")

Page 112: Libro Lpiv

Asp_net -112-

Tbl= New DataTable da.Fill(tbl) GridView2.DataSource = tbl GridView2.DataBind()

End If End SubEnd ClassWebApli02.aspxProcedimientos AlmacenadosCreate Procedure Sp_C9Productos@CategoryID intAsif @CategoryID=0Select ProductID,ProductName From Products Order by ProductIDelseSelect ProductID,ProductName From Products whereCategoryID=@CategoryID Order By ProductIDGo

Create Procedure Sp_C9Paises@ProductID intAsSelect Distinct ShipCountry From Orders O,[Order Details] ODwhere O.OrderID=OD.OrderID and ProductID=@ProductIDorder by ShipCountry

Create Procedure Sp_C9Ciudades@PaisEnvio varchar(50) AsSelect Distinct ShipCity From Orders whereShipCountry=@PaisEnvio Order By ShipCityGoCreate Procedure Sp_C9Facturas@CiudadEnvio varchar(50) AsSelect O.OrderID,Convert(char(12),OrderDate,101) as OrderDate,Convert(char(12),ShippedDate,101) as ShippedDate,DateDiff(day,OrderDate,ShippedDate) as Dias,Total=Sum(UnitPrice* Quantity) From Orders O,[Order Details] ODwhere O.OrderID=OD.OrderID and ShipCity=@CiudadEnvioGroup by O.OrderID,OrderDate,ShippedDate,DateDiff(day,OrderDate,ShippedDate)Order By O.OrderID

Page 113: Libro Lpiv

Asp_net -113-

Page 114: Libro Lpiv

Asp_net -114-

Agregar un Panel y dentro del Panel agregarun control DataList1.Clic derecho en el DataList1=EditarPlantilla=Plantillas de elementosLabel9 => Databindings: text=>DataBinder.Eval(Container.DataItem,"OrderID")Label10=> DataBindings: text=>DataBinder.Eval(Container.DataItem,"OrderDate") Label11=> DataBindings: text=>DataBinder.Eval(Container.DataItem,"ShippedDate")Label12=> DataBindings: text=>DataBinder.Eval(Container.DataItem,"Dias")Label13=> DataBindings: text =>DataBinder.Eval(Container.DataItem,"Total")

Clic derecho en el DataList1=EditarPlantilla=Plantillas de encabezado y pie epagina.

Page 115: Libro Lpiv

Asp_net -115-

WebApli01.aspxProcedimientos AlmacenadosCreate Procedure Sp_C9Ordenes@CustomerID char(5) Asif @CustomerID=''Select OrderID,OrderDate From Orders elseSelect OrderID,OrderDate From Orders where CustomerID=@CustomerIDGoCreate Procedure Sp_C9Detalle@Orden intAsSelect P.ProductID,ProductName,P.UnitPrice,Quantity,

Total=(P.UnitPrice * Quantity) From [Order Details] OD, Products P whereOD.ProductID=P.ProductIDand OD.OrderID=@OrdenOrder By P.ProductIDGoCreate Procedure Sp_C9TablasAsSelect SupplierID,CompanyName From Suppliers Select CategoryID,CategoryName from categories GoCreate Procedure Sp_C9DatosProducto@ProductID intAsSelect ProductName,CompanyName,CategoryName,UnitsInStock from products P,Suppliers S,Categories C where P.SupplierID=S.SupplierID andP.CategoryID=C.CategoryID and ProductID=@ProductIDGo

Create procedure Sp_ActProducto@Proveedor int,@Categoria int,@Stock int,@Producto varchar(100) AsUpdate Products setSupplierID=@Proveedor,CategoryID=@Categoria, UnitsInStock=@Stock WhereProductName=@Producto

Page 116: Libro Lpiv

Asp_net -116-

Resultado Final

Page 117: Libro Lpiv

Asp_net -117-

Codificacion del WebAplicacion1.aspxImports System.DataImports System.Data.SqlClientPartial Class WebControlMenu Inherits System.Web.UI.webForm Dim cn As New SqlConnection("Server=localhost;IntegratedSecurity=SSPI;database=NorthWind") Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)Handles Me.Load If Not Page.IsPostBack Then Dim codc as string=Request.Querystring( “CustomerId”) ‘el Valor que es enviado desde el control de usuario

Dim cmd As New SqlCommand("Sp_BuscarCliente", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@Customeridi", SqlDbType.Char, 5).Value = codc

cn.Open()Dim dr As SqlDataReader = cmd.ExecuteReader

Listbox1.Datasource=drLisbox1.DatatextField=”OrderDate”Listbox1.DataValueField=”OrderId”Listbox1.dataBind()

Cn.close‘lenar los combos de Empleados y CategoriasCbProve.datasource=Runsql(“select SuplierId, Companyname from Supliers”)Cb.prove.dataTextField=”Companyname”CbProve.DataValueField=”SuplierId”CbProve.DataBindCbCate.datasource=Runsql(“select SuplierId, Companyname from Supliers”)Cb.Cate.dataTextField=”CategoryName”CbCate.DataValueField=”CategoryId”CbCate.DataBindEnd ifEnd subFunction Runsql(sql as string)as Datatable

Dim da as new sqldataAdpapter(sql,cn)Dim Dt as New DatatableDa.Fill(dt)Return Dt

End Function

Sub Listbox1_click(ByVal sender As Object, ByVal e As System.EventArgs) Handles dim cmd as new slqCommand(“Sp_C9Ordenes”,cn) cmd.commandType=CommandType.StoreProcedure cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add("@orden", SqlDbType.int).Value = Listbox1.seletedValue cn.Open()

Page 118: Libro Lpiv

Asp_net -118-

Dim dr As SqlDataReader = cmd.ExecuteReader GridView1.DataSource = dr GridView1.DataBind() End sub

Sub DataGrid1_SelectedIndexChanged(ByVal sender As Object, ByVal e AsSystem.EventArgs) HandlesDim codp as integercodp=dataGrid1.selectedRow.cells(1).textDim cmd As New SqlCommand("Sp_C9DatosProducto", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@ProductID ", SqlDbType.int).Value = codp cn.Open()Dim dr As SqlDataReader = cmd.ExecuteReaderWith dr.readLblNomp.text=dr(0)cbprove.selectedItem=dr(1)cbcatego.selecteditem=dr(2)LbUnits.text=dr(3)End sub

Ejercicio.-

-Completar las codificaciones para actualizar el pedido de un cliente y el formulario2

Page 119: Libro Lpiv

Asp_net -119-

SEMANA 11XML

Aunque se almacena una gran cantidad de datos en bases de datos Microsoft® SQL Server y se gestionan medianteMicrosoft ADO.NET, recientemente Extensible Markup Language (XML) se ha convertido en un sólido estándar para elalmacenamiento, gestión y transferencia de datos. XML tiene dos grandes ventajas en el almacenamiento y transferencia dedatos:

• XML es un estándar aceptado por el mercado.• XML utiliza únicamente texto plano.

¿Qué es XML?

Introducción

Actualmente, las empresas se enfrentan a numerosos problemas en laorganización de los datos porque necesitan cumplir con los siguientesrequerimientos:

• Las estaciones de trabajo y los usuarios necesitan leer datos.• Tanto el contenido como la estructura de los datos deben estar definidos.• La estructura de los datos debe estar separada de su presentación.• La estructura de los datos debe ser abierta y extensible.• XML satisface todos estos requerimientos, y por tanto es una ayuda para la

organización de datos en las empresas.Definición:XML es el formato universal utilizado para describir e intercambiar documentos ydatos estructurados en Internet. XML es un subconjunto del Standard GeneralizedMarkup Language (SGML), y está definido por el World Wide Web Consortium(W3C), y garantiza que los datos estructurados son uniformes e independientes delas aplicaciones Web y de los fabricantes.XML define la estructura de los datos de un modo abierto y autodescriptivo.

Page 120: Libro Lpiv

Asp_net -120-

Este modo abierto y autodescriptivo permite que los datos sean fácilmentetransferidos a través de una red y que el receptor los procese de modo coherente.XML describe cómo se estructuran los datos, no cómo deberían mostrarse outilizarse, de forma similar a Hypertext Markup Language (HTML). Los documentosXML contienen etiquetas que otorgan significado al contenido del documento.Estas etiquetas permiten a los programadores encontrar los datos que necesitanen el documento XML.

Partes de un documento XMLLas partes de un documento XML incluyen:

• Instrucciones de procesamiento• Elementos• Atributos• Comentarios

Instrucción de procesamientoLa mayoría de documentos XML empiezan con una instrucción de procesamientopara el procesador XML indicando que el documento sigue las recomendacionesXML del W3C.ElementosA continuación de la instrucción de procesamiento puede definirse un conjunto deelementos anidados. Respecto a los elementos:

• Normalmente, un elemento está formado por un par de etiquetas: unaetiqueta de inicio y una etiqueta de cierre.

• Entre el par de etiquetas de inicio y cierre, un elemento puede contener elcontenido de datos u otros elementos.

• Un elemento puede estar formado únicamente por la etiqueta de cierre.• El primer elemento que encuentra el procesador XML debe estar formado

por una etiqueta de inicio y una etiqueta de cierre. El primer elementocontiene el resto de elementos y se denomina elemento raíz.

• El resto de elementos, tras el primero, pero dentro del elemento raíz, sedenominan elementos secundarios.

• Los elementos secundarios pueden anidar otros elementos secundarios. Lamayoría de los datos del contenido XML se almacenan entre la etiqueta deinicio y la etiqueta de cierre de los elementos secundarios.

AtributosCualquier elemento puede contener atributos. El uso de atributos es unaalternativa al uso de elementos para almacenar el contenido. Los atributos definendatos que pertenecen a un único elemento. Respecto a los atributos:

• Crear un atributo en la etiqueta de inicio de un elemento.• Declarar el nombre del atributo, seguido de una asignación del valor.• Utilizar comillas simples o dobles para establecer el valor de un atributo.

Page 121: Libro Lpiv

Asp_net -121-

ComentariosLos comentarios son opcionales.XML de formato correctoUn documento XML con un formato correcto cumple las especificaciones listadasen la Recomendación W3C de XML 1.0. Un documento XML se considera con elformato correcto si:

• Contiene exactamente un elemento raíz (el elemento documento).• Todos los elementos secundarios están anidados correctamente uno dentro

de otro.• Existen las etiquetas de inicio y final de un determinado elemento en el

cuerpo del mismo elemento primario.Ejemplo de XML con el formato correcto:<Temp>22</Temp>Ejemplo de XML mal formado:<Temp>22</temp>El error en el ejemplo anterior es que la etiqueta de cierre <temp> no coincide conla etiqueta de inicio <Temp>.

XML válidoEl XML es válido si su vocabulario cumple con una serie de requisitos descritos enun esquema:

• En XML, un esquema es la descripción de un documento XML.• Un esquema se utiliza para validar documentos XML. Los documentos XML

validados con un esquema se denominan documentos instancia. Si undocumento instancia coincide con la definición del esquema, el documentoinstancia se considera válido.

Podemos crear un documento XML desde:• De forma manual con un block de notas.• Con SQL Server 2005• Mediante el objeto DataSet

Creando un documento XML mediante un block de notas:Abrimos el Block de notas y escribimos lo siguiente:<?xml version="1.0" encoding="utf-8" ?><Libros> <Libro> <Titulo>El arte de programar en .NET 2005</Titulo > <precio>19.95</precio> </Libro> <Libro> <Titulo>Desarrollando aplicaciones maestras con ASP.NET2.0</Titulo> <precio>49.99</precio>

Page 122: Libro Lpiv

Asp_net -122-

</Libro></Libros>

Guardas el contenido del documento con el nombre Libros.xml.Luego abres el Internet Explorer para visualizar el resultado de este documentoXML

Creando un documento XML con SQL Server 2005Abrimos SQL Server 2005, y nos conectamos a SQL Server 2005, de manera integrada de Windows o con el usuario SA.Luego te ubicas a la base de datos NorthWind, le das clic derecho nueva consulta.

Generara un enlace, le damos doble clic para visualizar documento completo quese ha generado y guardamos el documento XML con el nombre deCustomers.xml.

Page 123: Libro Lpiv

Asp_net -123-

Cuando intentamos abrir el archivo, nos mostrara un error debido a que no existe unelemento raíz.

Para solucionar adicionaremos un elemento raíz en nuestro documento Customers.xml.Abrimos con el block de notas, y cambiamos los elementos Customers por Cliente.Adicionamos el elemento en la primera línea <Clientes> y en la ultima línea </Clientes>.

Page 124: Libro Lpiv

Asp_net -124-

Page 125: Libro Lpiv

Asp_net -125-

Lo abrimos en el navegadoWeb.

Creando un documento XML mediante el objeto DataSet, con los metodosWriteXML y ReadXML.

XML y los DataSets comparten una estrecha conexión. Los DataSets son la base para elalmacenamiento en modo desconectado y la manipulación de datos relacionales. LosDataSets también son un contenedor para una o más tablas de datos. XML es el formatoestándar para los datos presentes en DataSets.

Page 126: Libro Lpiv

Asp_net -126-

XML desempeña un importante papel en el modo en que el .NET Framework gestiona losdatos. XML es el formato utilizado en el .NET Framework para almacenar y transferir todotipo de datos. Los DataSets pueden almacenar y transferir datos en formato XML.Respecto a las características de los DataSets y XML:

• La estructura de un DataSet puede definirse en un esquema XML SchemaLa estructura de un DataSet que incluye tablas, columnas, relaciones yrestricciones puede definirse utilizando un esquema XML. Los esquemas XML sonun formato basado en estándares del W3C que pueden utilizarse para definir laestructura de datos XML.

• Generar una clase DataSetPodemos generar una clase DataSet que incorpore información de esquema paradefinir sus estructuras de sus datos (como tablas y columnas) como miembros declase.

• Métodos DataSetPodemos leer un documento XML o generar un flujo en un DataSet utilizando elmétodo ReadXML del DataSet y a continuación escribir un DataSet en XMLutilizando el método WriteXML del DataSet. Como XML es un formato estándarpara intercambiar datos entre distintas aplicaciones Web, podemos cargar unDataSet con información formateada en XML que haya sido enviada por otrasaplicaciones. De forma similar, un DataSet puede escribir sus datos como un flujoXML o un documento que será compartido con otras aplicaciones o simplementealmacenado como un documento XML.

• Crear una vista XML del contenido de un DataSetPodemos crear una vista XML (un objeto XmlDataDocument) del contenido deun DataSet, y visualizar y manipular los datos utilizando métodos relacionales(mediante el DataSet) o métodos XML. Las dos vistas se sincronizanautomáticamente cuando se modifican.

• Transformación de datosPodemos utilizar el objeto XSLTransform para cargar una hoja de estilo .xsl yaplicar la transformación. El documento resultante puede ser un archivo XML oHTML.

Page 127: Libro Lpiv

Asp_net -127-

El contenido de un DataSet puede crearse desde un flujo o un documento XML. Además,con el .NET Framework, tenemos una gran flexibilidad sobre qué información se cargadesde XML, y cómo se crea el esquema o estructura relacional del DataSet.

ReadXMLPara rellenar un DataSet con datos de XML, utilizamos el método ReadXml del objetoDataSet. El método ReadXml lee de un archivo, un flujo o un XmlReader.El método ReadXml lee el contenido del flujo o documento XML y carga el DataSet conesos datos. ReadXml también crea el esquema relacional del DataSet, dependiendo delXmlReadMode especificado y de si existe ya o no un esquema relacional.WriteXMLPara escribir un DataSet a un archivo, flujo o XmlWriter, utilizamos el métodoWriteXml. El primer parámetro que pasamos a WriteXml es el destino de la salida XML.Por ejemplo, podemos pasar una cadena que contenga un nombre de archivo, un objetoSystem.IO.TextWriter, etc. Podemos pasar un segundo parámetro opcional de unXmlWriteMode para especificar cómo debe escribirse la salida XML.

Veamos un ejemplo: Como generar un documeno XML, con los metodos WriteXML y ReadXML.

Código Fuente:

Page 128: Libro Lpiv

Asp_net -128-

Imports System.DataImports System.Data.SqlClientPartial Class WebXML

Inherits System.Web.UI.PageDim cn As New SqlConnection("Server=localhost;Integrated

Security=SSPI;database=NorthWind")Protected Sub btnWriteXML_Click(ByVal sender As Object, ByVal e As

System.EventArgs) Handles btnWriteXML.ClickTry

Dim da As New SqlDataAdapter("Select Top 2 * From Products", cn)Dim ds As New DataSet

da.Fill(ds, "Productos") ds.DataSetName = "ListadoProductos"

'Guardamos el XML sin el esquema generado por el DataSet ds.WriteXml("g:\Productos.xml", XmlWriteMode.IgnoreSchema) Lblmensaje.Text = "El documento XML Productos.xml se ha generado"

Catch ex As Exception Response.Write(ex.Message)

End TryEnd SubProtected Sub btnReadXML_Click(ByVal sender As Object, ByVal e As

System.EventArgs) Handles btnReadXML.Click'Mostrando el documento en la caja de texto txtxml y GridView1Try

Dim dsXML As New DataSet dsXML.ReadXml("g:\Productos.xml")

'Mostrando en la caja de texto txtxml TxtXML.Text = dsXML.GetXml

'Mostrando en el GridView1 GridView1.DataSource = dsXML.Tables(0) GridView1.DataBind()

Catch ex As Exception Response.Write(ex.Message)

End TryEnd Sub

End Class

Resultado de WebXML.aspx

Page 129: Libro Lpiv

Asp_net -129-

Nota: Si le das 2 veces doble clic en el botón generar documento o Mostrar documento,mostrara el mensaje siguiente:

Para solucionar este problemas, nos ubicamos en source de la pagina Web WebXML.aspx,y agregamos los siguiente en la directiva.

Page 130: Libro Lpiv

Asp_net -130-

Page 131: Libro Lpiv

Asp_net -131-

Crystal reports

Teniendo la BDD Bdinsituto que cuenta con las talas :Alumno,Notas,Curso, Pagos yEspecialidad vamos realizar los siguientes reportes:a) Reporte de Alumno por Especialidad

Crear una nueva conexión

Seleccione OLE DB Provider for sql server

Page 132: Libro Lpiv

Asp_net -132-

Conectarse con la BDD BdinstitutoPor ejemplo se desea hacer un reporte de alumnos por especialidad

siguiente y nos mostrara un diagrama para verificar los enlaces de las tablas

Page 133: Libro Lpiv

Asp_net -133-

luego elegir los campos de cada tabla sin repetirlos

Page 134: Libro Lpiv

Asp_net -134-

establecer el campo de agrupamiento es necesario para realizar el quiebre respectivo:

Establecer el resumen (los totales que van a ir después de imprimir el detalle)

Page 135: Libro Lpiv

Asp_net -135-

aunque esta ficha es opcional nos pregunta si deseamos ordenar los resúmenes porespecialidad

Page 136: Libro Lpiv

Asp_net -136-

aunque las demas opciones dependen del tipo de reporte a presentar , luego de finalizar:las secciones que displayan son:

Page 137: Libro Lpiv

Asp_net -137-

se pueden cambiar los atributos , tamaño, color de los objetos a través de las propiedades ,si desea una vista rápida del reporte mediante las opciones del menú

Page 138: Libro Lpiv

Asp_net -138-

Si deseamos darle mejor presentación al reporte por ejemplo en la sección de detalle nodebería ir el código y nombre de especialidad , arrástralo hacia la sección de grupo.

Aplicacacion con reportes por ejemplo se desea obtener la lista de alumno por cada curso.

Como la conexión ya esta establecida , procedemos a insertarlas tablas que nos interesan :

Page 139: Libro Lpiv

Asp_net -139-

la agrupación es por idcurso , y luego finalizar , la presentación general es de acuerdocomo se desea obtener el reporte.

Page 140: Libro Lpiv

Asp_net -140-

Acomode las cabeceras en las secciones de grupo , como se muestra en la figura

así de forma similar para la formula observación aprobado y desaprobado

Luego arrastrar las formulas hacia el detalle respectivo

Page 141: Libro Lpiv

Asp_net -141-

Después de colocar el promedio y la observación , cambiar el resaltado del campoobservación como se muestra en la figura.

Al seleccionar Higlighting Expert (cambiar el resaltado)New agregar una nueva condición en value of especificar el campo de la tabla o el campocalculado

Page 142: Libro Lpiv

Asp_net -142-

la vista previa del reporte seria:

Mostrándolo ahora desde un formulario , seleccionado desde un combobox el curso y uncheckbox para imprimir un curso especifico o todos los cursos

Page 143: Libro Lpiv

Asp_net -143-

codificación.Imports System.DataImports System.Data.SqlClientPublic Class frmcurso Dim cn As New SqlConnection("data source=(local)\SQLEXPRESS; integratedsecurity=SSPI; database=bdinstituto") Private Sub Page_Load(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles MyBase.Load Dim da As New SqlDataAdapter("select idcurso,nomcurso from curso ", cn) Dim dt As New DataTable da.Fill(dt) cbc.DataSource = dt cbc.DatatextField = "nomcurso" cbc.DataValueField = "idcurso" End Sub Private Sub cbc_SelectedIndexChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles cbc.SelectedIndexChanged Dim fr As New repNOTA cr1.ReportSource = fr cr1.SelectionFormula = "{curso.idcurso}='" + cbc.SelectedValue.ToString + "'" cr1.RefreshReport() End SubEnd Class

Page 144: Libro Lpiv

Asp_net -144-

EMPLEANDO COMPONENETES EN VISUAL NET

Empleando componentes nos van aliviar de realizar código redundante en cadaformulario, porque todas las rutinas para ejecutar un procedimiento que nos devuelvaregistros o ejecutar una acción de grabación, modificación o eliminación de registros enrealidad una codificación similar , solo cambian los nombres de los procedimientos yparámetros recibidos. Entonces porque no hacer un proyecto de clases, que luego se compila como una DLL yse puede registrar en cualquier proyecto posterior, ya sea de tipo Windows o WEB FORMque se ha de elaborar, donde cumpla las siguientes condiciones:

a) Que se lleve a cabo para cualquier BDD , no se debe nombrar de manera especificaa la BDD con el cual se ha de trabajar, para ello tenemos un archivo web.config elcual Proporciona acceso a los valores de configuración de una sección deconfiguración especificada.

b) Crear una función runpro(nompro, lista_de_parámetros) que devuelva un Dataset ;nompro representa cualquier nombre del procedimiento, y la lista es un paramArrayque acepta un conjunto de parámetros pero también puede ser que elprocedimiento no tenga parámetros, para ello la función debe cumplir para cualquiercaso

c) Crear una función ejecutapro(nompro, lista_parámetros) el cual dicha función noes necesario que devuelva un valor, porque su labor solo va ejecutar elprocedimiento para los casos de adición, modificación y eliminación de registros

Además empleando componentes nos va dar mejor seguridad en el transporte de códigos,porque ya no será necesario llevar el código fuente donde se encuentra las funciones, bastallevar solamente el compilado *.DLL y colocarlo en la carpeta BIN del proyecto aelaborar.A partir de los componentes se manejan las capas , puesto que estos conceptos no estánmuy bien definidos en algunas paginas ya que lo hace un concepto muy abstracto, ademáslos códigos sencillos de capas lo hacen tan complejos que al alumno lo será un pocodificultoso entender su lógica, como por ejemplo dando los nombresClshelper,layerBussines, etc , que en verdad son nombres que uno puede dar para ser masdescriptivos.

Además la aplicación real de capas se da en varias maquinas donde una maquina esel para:

a) Servidor de Internetb) Servidor de Datosc) servidor de Clases para la Capa de datosd) Servidor para la capa de negocios

Arquitectura de las capas

Básicamente la Arquitectura se centra en un arquitectura de 3 capas.

Page 145: Libro Lpiv

Asp_net -145-

1. La capa de presentación que en este caso esta formada por los Componentes de IU, y loscomponentes de proceso de IU. Los componentes de IU pueden ser vistos como la partecon la cual interactuar el usuario. Las ventanas o páginas web, por decirlo de algunamanera. Los componentes de proceso de IU podríamos asociarlos a clases de tipocontroladora en UML. Es decir estos encapsulan lógica de navegación y control de eventosde la interfase.

2. La capa de negocios encapsula lógica de negocios. Los servicios de esta capa sonencapsulados en tres tipos de componentes, dos de los cuales se tocan en este ejercicio. Lasentidades empresariales, que representan objetos que van a ser manejados o consumidospor toda la aplicación, estos podrían ser un modelo de objetos, xml, datasets con tipo,estructuras de datos, que permitan representar objetos que han sido identificados durante elmodelamiento. Los otros tipos de objetos son los componentes empresariales que contienenlógica de negocio, y en algunos casos al usar COM+ son los objetos raíz que inician lastransacciones.

3. La capa de acceso a datos que contiene clases que interactúan con la base de datos. Estasclases surgen como una necesidad de mantener la cohesión o clases altamenteespecializadas que ayuden a reducir la dependencia entre las clases y capas. Aquí podemosencontrar también una clase con métodos estáticos que permiten uniformizar lasoperaciones de acceso a datos a través de un único conjunto de métodos, esta clase es elSQLHelper que también se usa en este proyecto

Page 146: Libro Lpiv

Asp_net -146-

A nivel de Proyecto elaborar una clase dentro del fólder app_codeClñsdata.vb cuya codificacion es :Clase_General.vbImports Microsoft.VisualBasicImports System.Data.SqlClientImports System.DataPublic Class clase_general

Public Const cn = "uid=sa;database=northwind;server=." Function traeds(ByVal sql As String) As DataTable Dim ds As New SqlDataAdapter(sql, cn) Dim dt As New DataTable ds.Fill(dt) Return dt End FunctionEnd Class

Y La clase para llmara a cualquier Store Procedure con N parámetros.

Imports System.Data.SqlClientImports System.DataPublic Class clsdata

Public Const CONEX = " Data Source=(local);Initial Catalog=northwind;IntegratedSecurity=True" Function RUNPRO(ByVal NOMPRO As String, ByVal ParamArray ARGU() AsObject) As DataTable Dim CN As New SqlConnection(CONEX) Dim CMD As New SqlCommand(NOMPRO, CN) CMD.CommandType = CommandType.StoredProcedure CN.Open() 'PREPARA AL COMANDO PARA RECIBIR UN CONJUNTO DE PARAMETROS SqlCommandBuilder.DeriveParameters(CMD) Dim PRM As New SqlParameter 'PASAR CADA VALOR A SU PARAMETRO RESPECTO Dim C As Integer = 0 For Each PRM In CMD.Parameters If PRM.ParameterName <> "@RETURN_VALUE" Then PRM.Value = ARGU(C) C = C + 1 End If Next Dim DA As New SqlDataAdapter(CMD) Dim DT As New DataTable DA.Fill(DT) Return DT

Page 147: Libro Lpiv

Asp_net -147-

CN.Open() DA.Dispose() End Function

Function ejecutapro(ByVal NOMPRO As String, ByVal ParamArray ARGU() AsObject) Dim CN As New SqlConnection(CONEX) Dim CMD As New SqlCommand(NOMPRO, CN) CMD.CommandType = CommandType.StoredProcedure CN.Open() 'PREPARA AL COMANDO PARA RECIBIR UN CONJUNTO DE PARAMETROS SqlCommandBuilder.DeriveParameters(CMD) Dim PRM As New SqlParameter 'PASAR CADA VALOR A SU PARAMETRO RESPECTO Dim C As Integer = 0 For Each PRM In CMD.Parameters If PRM.ParameterName <> "@RETURN_VALUE" Then PRM.Value = ARGU(C) C = C + 1 End If Next Dim res As Integer res = CMD.ExecuteNonQuery() Return res CN.Open()

End FunctionEnd Class

Aplicacion 1.- Empleando la BDD Northwind desarrollar la aplicacion como se muestra enla figura.Para colocar el select para seleccionar los campos:

Page 148: Libro Lpiv

Asp_net -148-

El diseño

Paso 1.- Elaborar el procedimiento:a) Mostrar todos los clientes pasando un rango de letrascreate proc sp_bu@cad char(3),asselect CustomerID, CompanyName from customerswhere CompanyName like ‘[‘ + @cad +’]%’go

b) Mostrar todos sus pedidos de un clientecreate proc sp_oer@cod varchar(6)asselect d.OrderID,OrderDate=convert(char(10),OrderDate,103),total=sum(UnitPrice*Quantity)from orders o,[order details] d

Page 149: Libro Lpiv

Asp_net -149-

where d.OrderID=o.OrderID and CustomerID=@codGROUP BY d.OrderID,OrderDatego

Imports System.DataPartial Class _Default

Inherits System.Web.UI.PageDim cl As New clsdataProtected Sub Page_Load(ByVal sender As Object, ByVal e As

System.EventArgs) Handles Me.LoadIf Not Page.IsPostBack Then

mostar()End If

End Sub

Page 150: Libro Lpiv

Asp_net -150-

Protected Sub RadioButtonList1_SelectedIndexChanged(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesRadioButtonList1.SelectedIndexChanged mostar()

End SubSub mostar()

Dim cad As String = RadioButtonList1.selecteditem.textMe.GridView1.DataSource = cl.RUNPRO("sp_bu ", cad)Me.GridView1.DataBind()

End Sub

Protected Sub GridView1_PageIndexChanging(ByVal sender As Object,ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) HandlesGridView1.PageIndexChanging

Me.GridView1.PageIndex = e.NewPageIndexCall mostar()

End Sub

Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object,ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged

Dim data As New DataTableDim cad As String = ""

cad = Me.GridView1.SelectedRow.Cells(0).TextMe.lblnom.Text = Me.GridView1.SelectedRow.Cells(1).Text

data = cl.RUNPRO("sp_oer", cad)Me.GridView2.DataSource = dataMe.GridView2.DataBind()Me.lbltota.Text = data.Compute("sum(total)", "")

End SubEnd Class

Aplicación 2.-Busqueda de productos , en las ciudades que se haya consumido dichoproducto.Los procedimientos almacenados a emplear:-- Mostrando los productos que tengan los primeros caracteres similarescreate proc sp_por@nom varchar(30)asselect ProductID,ProductName from productswhere ProductName like @nom +'%'go--- La lista de paisescreate proc sp_paisasselect distinct ShipCountry from ordersgo-- Ciudades por paiscreate proc sp_cui@pais varchar(30)asselect distinct ShipCity from orderswhere ShipCountry=@pais

Page 151: Libro Lpiv

Asp_net -151-

-- Ciudades donde se hayan vendido dicho productocreate proc sp_ll@nom intasselect distinct ShipCity from orders o,products p,[order details] dwhere d.OrderID=o.OrderID and d.ProductID=p.ProductID and p.ProductID=@nomgoselect* from [order details]-- la lista de pedidoscreate proc sp_fac@cod char(5)asselectd.OrderID,OrderDate=convert(char(10),OrderDate,103),dias=datediff(d,ShippedDate,RequiredDate),total=sum(UnitPrice *Quantity)from orders o,[order details] dwhere d.OrderID=o.OrderID and ProductID=@codgroup by d.OrderID,OrderDate,ShippedDate,RequiredDate

Page 152: Libro Lpiv

Asp_net -152-

Imports System.DataPartial Class page2

Inherits System.Web.UI.PageDim cl As New clsdataProtected Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As

System.EventArgs) Handles TextBox1.TextChanged mm()

End Sub

Sub mm()Me.ListBox1.DataSource = cl.RUNPRO("sp_por", Me.TextBox1.Text)Me.ListBox1.DataTextField = "ProductName"Me.ListBox1.DataValueField = "ProductID"Me.ListBox1.DataBind()Me.TextBox1.Focus()

End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e AsSystem.EventArgs) Handles Me.Load

If Not Page.IsPostBack ThenMe.ListBox1.DataSource = cl.RUNPRO("sp_por", "")Me.ListBox1.DataTextField = "ProductName"Me.ListBox1.DataValueField = "ProductID"Me.ListBox1.DataBind()Me.TextBox1.Focus()

pais()End If

End Sub

Sub pais()Me.cbo1.DataSource = cl.RUNPRO("sp_pais")Me.cbo1.DataTextField = "ShipCountry"Me.cbo1.DataValueField = "ShipCountry"Me.cbo1.DataBind()

End Sub

Protected Sub cbo1_SelectedIndexChanged(ByVal sender As Object, ByVale As System.EventArgs) Handles cbo1.SelectedIndexChanged

Me.ListBox2.DataSource = cl.RUNPRO("sp_cui",Me.cbo1.SelectedValue)

Me.ListBox2.DataTextField = "ShipCity"Me.ListBox2.DataValueField = "ShipCity"Me.ListBox2.DataBind()

End Sub

Protected Sub ListBox1_SelectedIndexChanged(ByVal sender As Object,ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

Dim vista As New datatable Session.Add("ca", Me.ListBox1.SelectedValue)

Me.ListBox2.DataSource = cl.RUNPRO("sp_ll", Session("ca"))Me.ListBox2.DataValueField = "ShipCity"Me.ListBox2.DataTextField = "ShipCity"Me.ListBox2.DataBind()

vista = cl.RUNPRO("sp_fac", Session("ca"))Me.GridView1.DataSource = vista

Page 153: Libro Lpiv

Asp_net -153-

Me.GridView1.DataBind()Me.lbltotal.Text = vista.Compute("sum(total)", "")

End Sub

Protected Sub GridView1_PageIndexChanging(ByVal sender As Object,ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) HandlesGridView1.PageIndexChanging

Me.GridView1.PageIndex = e.NewPageIndexEnd Sub

Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object,ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged

End SubEnd Class

Page 154: Libro Lpiv

Asp_net -154-

APLICACIÓN 3.-

Su Store procedurecreate proc sp_1asselect CustomerID,CompanyName from customersgocreate proc sp_2@cod char(6)asselect OrderID from orderswhere CustomerID=@codgocreate proc sp_3@nom nvarchar(30)asselect d.OrderID,OrderDate=convert(char(10),OrderDate,103),UnitPrice,Quantity,total=sum(UnitPrice *Quantity)from orders o,[order details] d

Page 155: Libro Lpiv

Asp_net -155-

where d.OrderID=o.OrderID and d.OrderID in(@nom)group by d.OrderID,OrderDate,UnitPrice ,Quantitygoselect d.OrderID,OrderDate=convert(char(10),OrderDate,103),UnitPrice,Quantity,total=sum(UnitPrice *Quantity)from orders o,[order details] dwhere d.OrderID=o.OrderID and d.OrderID in('10248','10250' )group by d.OrderID,OrderDate,UnitPrice ,Quantity

Codificacion:Imports System.DataImports System.Data.SqlClient

Partial Class page3

Inherits System.Web.UI.PageDim cl As New clsdataDim codigos As String = ""Dim tabla As New DataTablePublic Const Cn = " Data Source=(local);Initial

Catalog=northwind;Integrated Security=True"Protected Sub Page_Load(ByVal sender As Object, ByVal e As

System.EventArgs) Handles Me.Load

If Not Page.IsPostBack Then ok() Session("cn") = ""

End If

End Sub

Sub ok()Me.ListBox1.DataSource = cl.RUNPRO("sp_1")Me.ListBox1.DataTextField = "CompanyName"Me.ListBox1.DataValueField = "CustomerID"Me.ListBox1.DataBind()

End Sub

Protected Sub ListBox1_SelectedIndexChanged(ByVal sender As Object,ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

Me.ListBox2.DataSource = cl.RUNPRO("sp_2",Me.ListBox1.SelectedValue)

Me.ListBox2.DataTextField = "OrderID"Me.ListBox2.DataValueField = "OrderID"Me.ListBox2.DataBind()

End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e AsSystem.EventArgs) Handles Button1.Click

For i As Integer = 0 To Me.ListBox2.Items.Count - 1If Me.ListBox2.Items(i).Selected = True Then

codigos = codigos + Me.ListBox2.Items(i).Text + ","

Page 156: Libro Lpiv

Asp_net -156-

End IfNext

codigos = codigos.Substring(0, codigos.Length - 1) Response.Write(codigos) llena(codigos)

End Sub

Sub llena(ByVal cod As String)

Dim sql As String = "" sql += "selectd.OrderID,OrderDate=convert(char(10),OrderDate,103),UnitPrice,Quantity,total=sum(UnitPrice *Quantity) " sql += " from orders o,[order details] d " sql += " where d.OrderID=o.OrderID and d.OrderID in(" + cod + ")" sql += " group by d.OrderID,OrderDate,UnitPrice ,Quantity "

Dim ds As New SqlDataAdapter(sql, Cn)Dim dt As New DataTable

ds.Fill(dt)Me.GridView1.DataSource = dtMe.GridView1.DataBind()Me.lbltotal.Text = dt.Compute("sum(total)", "")

End Sub

Protected Sub GridView1_PageIndexChanging(ByVal sender As Object,ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) HandlesGridView1.PageIndexChanging

Me.GridView1.PageIndex = e.NewPageIndex

End Sub

Page 157: Libro Lpiv

Asp_net -157-

Page 158: Libro Lpiv

Asp_net -158-

WEB SERVICE

Podemos definir un servicio Web XML como una clase a la que podemos accederutilizando estándares de Internet.Como es de suponer, el tener que utilizar esos estándares de comunicación deInternet es porque esa "clase" está alojada en un servidor de Internet, es decir, unservicio Web es una clase que está alojada en la Web y que podemos acceder aella mediante ciertos estándares como XML, que a su vez utiliza otro estándar:SOAP, (Simple Object Access Protocol), que es el lenguaje que define cómo noscomunicaremos con el servicio Web.

Antes de pasar a ver ejemplos prácticos sobre cómo crear y utilizar servicios Webutilizando Visual Studio 2005, veamos un poco la historia de porqué finalmente losservicios Web son lo que son y cómo nos facilitan toda la comunicación a travésde la red, ya sea local o global.

¿Qué son los servicios Web?

La expresión "Servicio Web" se oye con fuerza desde hace unos años en elámbito del desarrollo de aplicaciones e incluso en ambientes poco técnicos y dedirección. Lo cierto es que no se trata de un concepto tan novedoso como cabríaesperar y las innovaciones que conlleva no son tanto tecnológicas, comoconceptuales.

En esta lección explicaremos desde un punto de vista no-técnico los conceptosrelacionados con los Servicios Web, cómo funcionan, de dónde vienen y a dóndevan.

El concepto de Arquitectura Orientada a Servicios o SOA se basa en el uso deeste tipo de componentes que suplen las necesidades de una o variasaplicaciones, son independientes entre sí y trabajan independientemente delsistema operativo o la plataforma.

Aunque muchos programadores piensan que SOA está relacionado únicamentecon los Servicios Web lo cierto es que se pueden conseguir arquitecturas SOA conotras tecnologías como veremos.

3 Comunicación entre componentes

Existen diversas dificultades técnicas a la hora de llevar a la práctica lasarquitecturas orientadas a servicios. Entre éstas están la comunicación entre lasdistintas capas y componentes que constituyen la aplicación, la gestión depeticiones y el balanceado de carga entre servidores cuando un mismocomponente reside en varios de ellos (para aplicaciones muy grandes con muchosclientes), la gestión de transacciones entre componentes y algunas otras cosasmás.

Page 159: Libro Lpiv

Asp_net -159-

Existe la posibilidad de escribir un protocolo de comunicaciones propio que seocupe de todas estas cuestiones, pero por supuesto se trata de una opción muypoco realista dada la complejidad que conllevaría. Para responder a estasnecesidades de los programadores, diversos fabricantes y asociaciones de laindustria crearon servicios y protocolos específicos orientados a la interaccióndistribuida de componentes. Aunque existe una gran variedad, de todos ellos losmás importantes sin duda son:

DCOM (Distributed Common Object Model), la propuesta de Microsoft, ligada asus sistemas Windows. Se trata de algo más que un protocolo de invocaciónremota de procedimientos (RPC) ya que su última encarnación, COM+, incluyeservicios avanzados para balanceado de carga, gestión de transacciones ollamadas asíncronas. Los parámetros son transmitidos a través de la red medianteun formato binario propio llamado NDR (Network Data Representation).

RMI (Remote Method Invocation), es la metodología de llamada remota aprocedimientos de Java. No se centra en la definición de interfaces paracompatibilidad binaria de componentes, ni en otros conceptos avanzados, y sebasa en la existencia de un cliente y un servidor que actúan de intermediariosentre los componentes que se quieren comunicar. Es una tecnología bastantesimple que es fácil de utilizar para aplicaciones básicas.

CORBA (Common Object Request Broker Architecture). Se trata de una serie deconvenciones que describen cómo deben comunicarse los distintos componentes,cómo deben transferir los datos de las llamadas y sus resultados o cómo sedescriben las interfaces de programación de los componentes para que los demássepan cómo utilizarlos. Fue desarrollado por el OMG (Object Management Group)en la segunda mitad de la década de los '90 y es el modelo que más éxito hatenido en el mundo UNIX. Su método de empaquetado y transmisión de datos através de la red se llama CDR (Common Data representation). Existen diversasimplementaciones de distintos fabricantes.

SOAP

La tecnología que está detrás de todo ello se llama SOAP (jabón en inglés). Esteacrónimo (Simple Object Access Protocol) describe un concepto tecnológicobasado en la sencillez y la flexibilidad que hace uso de tecnologías yestándares comunes para conseguir las promesas de la ubicuidad de losservicios, la transparencia de los datos y la independencia de la plataforma quesegún hemos visto, se hacen necesarios en las aplicaciones actuales.

Descubrimiento de servicios: WSDL y UDDI

Otro de los estándares que se definen en SOAP es WSDL (Web Service DefinitionLanguage). Se trata de un formato estándar para describir las interfaces de losservicios web. WSDL describe qué métodos están disponibles a través de un

Page 160: Libro Lpiv

Asp_net -160-

servicio Web y cuáles son los parámetros y valores devueltos por éstos. Antes deusar un componente que actúa como servicio web se debe leer su archivo WSDLpara averiguar cómo utilizarlo.

servicios web llamado UDDI (Universal Description Discovery and Integration).Esta especificación permite la creación de directorios de servicios web, donde sedefinen métodos que permiten consultarlos para encontrar fácilmente aquelservicio que se necesite. Windows Server 2003 incluye gratuitamente un servidorpara implementar directorios UDDI en organizaciones

Creación de servicios Web

ASP.NET 2.0 nos facilita grandemente la creación de servicios Web XML, y si nosapoyamos en una herramienta como lo es Visual Studio 2005, incluso en laversión Express, nos daremos cuenta de que no necesitamos ser expertos en losprotocolos utilizados por los servicios Web para poder crearlos y utilizarlos.

• Nuestro primer servicio Web§ Analizando el contenido de un servicio Web§ Atributos aplicables a los servicios Web

o Definición Crear un proyecto de tipo servicio Web con Visual Studio 2005§ Crear un servicio Web usando un solo fichero§ Eliminar ficheros de un proyecto§ de la clase a usar en el servicio Web§ Añadir métodos para usarlos en el servicio Web

o Probar nuestro servicio Web

Consumo de servicios Web

En esta lección veremos cómo "consumir" el servicio Web creado anteriormentedesde una aplicación de Windows Forms utilizando el entorno de desarrollo (IDE)de Visual Studio 2005.Como comprobaremos, el propio compilador de C# se encargará de todos lospormenores para que podamos utilizar la clase incluida en el servicio Web como side una clase normal y corriente se tratara, ya que, esa es una de las ventajas deapoyarse en un entorno integrado de la calidad de Visual Studio 2005, aunque seaen la versión "económica", que solo debemos preocuparnos de escribir el código ydel resto... ¡nos olvidamos! (o casi).

VIII BIBLIOGRAFÍA: CHARTE Francisco Programación con Visual Studio 2005

Edit. ANAYA España 2006

Page 161: Libro Lpiv

Asp_net -161-

CHARTE Francisco Programación con Visual Net(Programación de

Bases de Datos ) Edit. ANAYA España 2005

EVANGELUS Petroulsos Visual Basic Net Editorial Anaya, Madrid 2005

MICROSOFT ASP NET 2.0 (Sutdio Net 2005) Editorial Mac Graw Hill México 2005

CEVALLOS fco. Javier Programación Visual Basic Net 2005 Editorial Rama Madrid 2000

Direcciones Web

http://www.godot.nethttp://www.manualesgratis.comhttp://www.microsoft.eshttp://www.abcdatos.comhttp://www.cibercursos.comhttp://www.guille.costasol.nethttp://www.programacion.net/cursos