Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Presentacin del Curso: Aplicaciones y Servicios Web con ASP .Net y SQL Server 2000
Esta es una de nuestras primeras publicaciones que presentamos como un estudio. A diferencia de los libros tradicionales, usted podra complementar su estudio a travs de nuestra Escuela virtual, dirigido por el mismo autor de la publicacin, rendir sus evaluaciones y obtener la Certificacin de haber aprobado el curso por parte de nuestra empresa, Estudie cmodamente en casa, en la oficina o desde una cabina pblica, en el horario que usted disponga y con la frecuencia que decida, necesita de un Servidor para hacer las pruebas Como parte de los recursos para su estudio le proporcionamos una cuenta de hosting en nuestros servidores (Plan EducaVirtual), por el tiempo que d ure su estudio. Asi podr acceder a: Biblioteca de recursos, Programas, Foros, Soporte en lnea, acceso a la Escuela Virtual, etc.
Hagamos negocios
Nuestra propuesta es que usted sea nuestro socio de negocios, dediquese a proponer la solucin y nosotros nos hacemos cargo de ofrecerle el respaldo tecnolgico. Por cada cuenta que usted aperture con nosotros para sus clientes, usted se har acreedor a bonos, los que puede canjearlos por efectivo o por alguno de nuestros servicios (ver detalle en www.grapperusoft.com)
Hosting Comercial
Implementar una aplicacin Web supone publicarla en un Servidor, disponer de uno propio implica la adquisicin de los equipos, una lnea dedicada de buen ancho de banda, software, personal especializado que se haga cargo de la seguridad, mantenimiento, respaldo, etc. Para la mediana o microempresa representara una inversin considerable (no menos de unos 15 mil dolares), ante ello existe una alternativa: Hosting.
El servicio de Hosting consiste en alquilar un espacio en un servidor. Por una inversin mnima adquiera una cuenta con todas las caractersticas necesarias para publicar su aplicacin, deje en nuestras manos el soporte tecnolgico y dediquese usted a sus clientes.
Windows 2000 Server Internet Information Server n Cuentas de correo Servidor Anti Virus Servidor POP3 Servidor SMTP Anti Spam Anti Virus Autorespondedores E-mail Panel de Control Web Mail Listas de Correo Soporte ASP .Net Base de Datos: Access y SQL Server 2000 Redireccionamiento Respaldo de Datos en Lnea Estadisticas completas Extensiones FrontPage Soporte Shockwave/Flash Pginas de error personalizables Aplicaciones pre-instaladas: Chat, Foros, Tienda Electrnica
INTRODUCCIN
Todo programa computacional (software) est basado en el principio de la manipulacin de informacin. Hoy, encontramos aplicaciones computacionales sofisticadas que almacenan su informacin en una Base de Datos, un repositorio de informacin controlada por un Sistema de Administracin de Base de Datos o DBMS (DataBase Management System). Un DBMS se encarga de dos cosas: primeramente, controla el almacenamiento de la informacin, y en segundo lugar, provee mecanismos para consultar y mantener la informacin, es decir, agregar, eliminar y actualizar datos. Un DBMS se empea en cumplir estas dos funciones bsicas de la manera ms eficiente posible. Con el pasar de los aos, el mercado de los DBMS ha madurado y se ha sofisticado, ofreciendo productos diseados para el uso de grandes entornos empresariales como es el caso de Oracle 9i o Microsoft SQL Server 2000, y tambin par entornos mas pequeos o personales como Microsoft Access. En algunos casos, incluso nos encontramos con paquetes de software que incluyen su propio DBMS para la administracin de propia su base de datos. En su trabajo cotidiano como desarrollador o programador se dar cuenta que las aplicaciones por lo general requieren que la informacin sea administrada por un DBMS. En realidad, debe saber que el uso de un DBMS es la manera ms fcil de administrar y manipular la informacin de su aplicacin. Sin embargo, la gran pregunta es, Qu DBMS se debe usar?, debido a que en el mercado actual existen una gran variedad de proveedores de estas soluciones. Cmo podemos desarrollar un programa que trabaje con cualquier base de datos que nuestro cliente pueda elegir? El truco est en desarrollar una aplicacin que trabaje con una Capa de acceso a los datos de cualquier tipo. En vez de crear un programa que requiera de un DBMS especfico, se puede crear un programa que acceda a esa capa.
Entonces es responsabilidad de la capa convertir a modo nativo las llamadas que el DBMS usa. Microsoft le llama a esta visin Universal Data Access (UDA Acceso Universal de Datos). La ltima herramienta para el UDA es ADO.NET, que consiste en un consistente grupo de objetos que trabajan en conjunto para montar la capa de acceso a los datos. El presente libro abarcar sobre la construccin de aplicaciones Web con SQL SERVER 2000 y ASP.NET que conjugan con el poder de ADO.NET.
Contenido del CD
El CD que acompaa a este libro, contiene los archivos de ejemplo y demostracin, descritos en el libro. Adems contiene algunas otras herramientas tiles. Vea el contenido
Soporte
Definitivamente valoramos las opiniones de nuestros lectores y nos gustara saber qu es lo que piensa sobre este libro, qu no le gust, y qu es lo que le gustara que consideremos para la prxima oportunidad. Nos puede enviar sus comentarios ya sea a travs de nuestro sitio Web (http://www.grapperusoft.com).
Errata
Se ha hecho todo el esfuerzo necesario a fin de que no hayan errores en el texto o en el cdigo de ejemplo. Sin embargo nadie es perfecto y quizs encuentre errores. Si encuentra algn error ortogrfico o en alguna parte del cdigo, estaremos gustosos de saberlo. De esta manera nos estar ayudando a dar un mejor soporte a travs de nuestro sitio Web, a los futuros lectores.
10
11
12
pequeas empresas cuya cantidad de informacin no es muy grande o extensa. No obstante, esta versin, es extremadamente poderosa que contiene los servicios de anlisis de datos (con algunas excepciones), replicacin, bsqueda Full-text, Servicios de transformacin de datos, English Query y otras caractersticas avanzadas. SQL Server 2000 Personal Edition sta edicin contiene bsicamente las mismas caractersticas de la edicin estndar, a excepcin de la replicacin transaccional. Adicionalmente, los servicios de anlisis y de bsqueda fulltext solo estn disponibles en ciertos sistemas operativos. Esta es la edicin ms apropiada para usuarios que usan muchas veces sus computadoras desconectadas de la red y manipulan sus datos localmente. Un caso comn seran los usuarios mviles por ejemplo, cuando los vendedores de una empresa necesitan la base de datos en sus equipos porttiles cuando estn de viaje. Esta versin limita el nmero de conexiones y procesos concurrentes que pueden estar ejecutndose a la vez. Esto significa que no est diseada para controlar gran cantidad de usuarios o muchos procesos en la base de datos. SQL Server 2000Windows CE Edition sta edicin corre en dispositivos mviles que usan Windows CE. Es una versin compacta del SQL Server y permite que las base de datos relaciones puedan ser almacenadas y administradas en un dispositivo Windows CE para posteriormente sincronizarla con la Base de datos principal de la organizacin. Tambin permite administrar una base de datos remotamente va Internet desde el dispositivo mvil. SQL Server 2000 Developer Edition sta edicin contiene todas las caractersticas del Enterprise Edition, con la condicin de que no sea instalada en un servidor de produccin. Como el nombre lo indica, sta versin est diseada para los analistas, consultores y desarrolladores o programadores, cuando desarrollan o prueban una aplicacin SQL.
13
SQL Server 2000 Evaluation Edition sta versin es completamente funcional como la del Enterprise Edition que se puede ejecutar durante 120 das. Permite que las organizaciones evalen el producto completo sin costo. SQL Server 2000 Desktop Engine sta es una versin redistribuible. Quiere decir que se puede incluir en las instalaciones de sus programas desarrollados que usan o almacenan datos de SQL Server. Esta versin no incluye ninguna de las herramientas de administracin grfica como por ejemplo el Administrador Corporativo, por lo tanto otros productos (como Visual Studio .NET Server Explorer, Access o las APIs del SQL Server 2000) pueden usarse para crear y administrar bases de datos. Ahora que sabe un poco ms acerca de las distinta ediciones del SQL Server 2000, ahora enfoqumonos ms a la versin SQL Server 2000 Desktop Engine, que ser la que usaremos a lo largo de este libro.
14
15
Adicionalmente por el mismo hecho de que es una verdadera versin del SQL Server (facilitando la actualizacin o migracin a un servidor de produccin para el futuro), tiene la ventaja de tener la arquitectura Cliente/Servidor en vez de estar basado en un archivo tipo Access. Debemos estar concientes de que Access almacena toda su informacin en un nico archivo (el archivo .mdb). De otra parte, el Desktop Engine de SQL Server soporta la verdadera arquitectura Cliente/Servidor, tanto as que al instalarlo hace que el equipo se comporte como un servidor de base de datos. Esto no quiere decir que el Desktop Engine se debe instalar en un equipo aparte, sino que puede ser instalado en el propio equipo de desarrollo o del cliente. Lo que quiere decir esto realmente es, que con las base de datos basadas en cliente/servidor, el servidor es quien se encarga de manipular los datos por nosotros. Con Access, por otro lado, todos los procesos para la captura de los datos se realizan del lado del cliente y pueden consumir valiosos recursos del equipo del cliente.
16
Requisitos de Instalacin
El Desktop Engine puede ser instalado en cualquiera de las versiones de la familia Windows: Windows 98, Windows NT 4.0, Windows Millenium, Windows 2000 o Windows XP y se necesita como mnimo 64 Mb. de RAM.
17
El proceso de instalacin deber agregar un nuevo icono al men inicio de Windows. Para verificar que la instalacin a sido satisfactoria, dirjase al men Inicio, Programas, y a la carpeta Inicio. Ah encontrar el programa llamado Service Manager. El hecho de que est en la carpeta inicio, garantiza
18
que cada vez que inicie su equipo, corra este servicio automticamente. En vez de reiniciar su equipo para ejecutarlo, ejecute el Service Manager para ejecutarlo manualmente. Cuando se hace esto, notar que un nuevo icono representando un servidor aparece en la barra de tareas de Windows, justamente cerca al reloj del sistema. Luego examinaremos el funcionamiento de estas opciones ms adelante en este mismo capitulo.
realidad, es el motor usado por todas las otras versiones del SQL Server. Consiste en el motor de almacenamiento y el procesador de consultas. El motor de almacenamiento es el responsable de la lectura y escritura de la informacin en la base de datos. El procesador de consultas es responsable de recibir y ejecutar las sentencias SQL. Hay adems algunos otros componentes adicionales para el almacenamiento de los datos y el procesador de consultas, pero no son necesarios para nuestros propsitos por ahora, as que los pasaremos por alto.
19
datos. Si, por ejemplo, desea hacer un back up (copia de seguridad) de su base de datos cada noche, el agente SQL Server le permite programar esta tarea para que automticamente se ejecute y reporte si se encuentra algn problema. Por lo tanto este servicio no siempre necesita estar ejecutndose, sin embargo puede ser una herramienta muy til.
transacciones se extiendan a lo largo de otros equipos existentes en la red. Mas adelante veremos un ejemplo de uso de este servicio.
En esta imagen, este utilitario aparece a la izquierda del reloj de Windows, y representa la imagen de un servidor con una flecha insertada de color verde, que se parece al smbolo reproducir (play) de un VCR (aparato de reproductor de video). Algunas veces, el c i ono muestra un cuadrado de color rojo, como el smbolo detener, haciendo notar la suspensin de uno de los tres servicios como se describe posteriormente en esta misma seccin. Si da doble clic sobre este icono, la pantalla del SQL Service Manager se muestra as:
20
Esta ventana muestra la configuracin de los servicios y del servidor, juntamente con el estado del servicio seleccionado. Las listas desplegables del Servidor y de los Servicios permiten seleccionar los elementos disponibles. Por ejemplo la lista del Servidor muestra las instancias que para esta computadora en particular estn disponibles. La lista de los servicios permite seleccionar uno de los tres servicios descritos anteriormente. Adems hay botones para Iniciar/Continuar, Pausar y Detener, los cuales estn habilitados o deshabilitados de acuerdo al estado actual. En la figura anterior, el botn Pause y Stop estn habilitados. Si se desea suspender temporalmente todas las actividades de la base de datos, simplemente hacemos clic sobre el botn Pausa. Si se desea parar completamente todas las actividades de la base de datos, se hara clic sobre el botn Stop. Para reiniciar el servicio posteriormente, tenemos el botn Start/Continue. El Servicio SQL Server mostrado en la figura, est corriendo bajo el servidor JCHMPC (el suyo de hecho estar corriendo bajo un nombre diferente). Note la barra de estado en la parte inferior que muestra el mensaje Running - \\JCHMPC MSSQLServer, y la flecha verde dentro de un crculo que sera reemplazada por un cuadrado rojo si el servicio fuera
21
suspendido; esta misma representacin se ver en el icono de la barra de tareas de Windows. Adicionalmente, note como el indicador Auto-start service when OS starts se encuentra marcado, lo cual significa que el Servicio SQL Server se iniciar cada vez que se reinicia el sistema operativo. Se recomienda que esta casilla se encuentre marcada, de tal manera que no necesite estar levantando el servicio manualmente cada vez que quiera hacer un mantenimiento de su base de datos. Como ha podido ver en estos ejemplos, el SQL Service Manager es una buena herramienta para administrar los servicios disponibles que vienen con el Desktop Engine. Ahora ya nos encontramos aptos para pasar al siguiente tema de cmo trabajar con el Desktop Engine en Access.
22
vistas. Todo lo que se poda hacer era conectarse a una base de datos existente para examinar, crear o eliminar una tabla o actualizar los datos que est tena. La nueva integracin con Access 2000 o XP, y de seguro versiones futuras, ofrecen una mejora sobre estos casos anteriores.
23
Creacin de una nueva base de datos en el SQL Server -Desktop Engine desde Access
En esta parte, vamos a crear una base de datos tpica para almacenar informacin en un sistema de ventas que tiene las tablas: Productos, Clientes, Pedidos y Detalles. Para crear una nueva base de datos de SQL Server desde Access, primero se necesita crear un nuevo proyecto vaco. Luego se crea cada tabla en la vista diseo y luego se abren estas para agregarles algunos registros de prueba.
Prctica Creacin de una nueva base de datos en SQL Server desde Access 1. 2. 3. 4. Abrimos Microsoft Access. Seleccionamos el Men Archivo | Nuevo. Elija proyecto usando nueva base de datos. Nombre el proyecto como testDB y gurdelo en la carpeta que crea conveniente. Una vez creado el nuevo proyecto, se muestra el Asistente para Base de Datos de SQL Server, como se muestra a continuacin:
24
5.
Al asistente empieza preguntando por el nombre del servidor que va a usar, el Identificador de Usuario y la contrasea. Rellene los datos apropiadamente: el nombre de su servidor, el identificador de usuario y la contrasea (el usuario debe ser sa y la contrasea en blanco a menos que los haya cambiado previamente). Finalmente aparece el nombre de la Base de Datos como testDBSQL que podra cambiarlo si es lo que desea, sin embargo para efectos de demostracin nos quedaremos con este nombre sugerido. Hacemos clic en el botn siguiente. La siguiente pantalla indicar que el asistente tiene toda la informacin necesaria para crear la base de datos. En esa pantalla hacemos clic en el botn Finalizar. Se ver un cuadro solo por un momento que indica el progreso de la operacin. Una vez completado este proceso, el asistente ha terminado, dejndonos frente a la base de datos vaca como se muestra a continuacin:
6.
7.
25
8.
El siguiente paso ser crear una nueva tabla, y esto lo hacemos dando doble-clic en la lnea que dice Crear una tabla nueva en la vista diseo. Aparecer en la pantalla el diseador de tablas vaco. Primero, creamos la tabla producto con las siguiente estructura:
9.
26
Tabla: Productos Campo Ejemplo de datos Tipo de datos Tamao estimado de los datos Nmeros positivos sin decimales 25 caracteres 0.00 hasta 10,000.00 0 hasta 9,999 25 caracteres
IDProducto (PK)
12345
Numrico
Descripcin
Texto
PrecioUnitario
Monetario
Stock
50
Numrico
UnidaddeMedida
40 100 gr.
Texto
27
Una vez terminado con el diseo mostrado, preste atencin a los nombres de los campos y los tipos de datos que acaba de asignarle a cada uno. Ntese que el campo IDProducto debera ser declarado como clave primaria de esta tabla. 10. Ahora no solo queremos que el identificador del producto sea nuestra clave primaria, sino que adems tambin se quiere que se auto genere automticamente por el SQL Server, empezando con el valor 1 e incrementado d e uno a uno cada vez que se ingrese un nuevo registro a la base de datos. Por lo tanto definiremos a este campo como Identity Column, epezando con el valor uno ( Identity Seed) y que ser incrementado de uno en uno (Identity Increment), como se muestra a continuacin:
28
11. Ahora ya estamos listos para declarar al campo IDProducto como clave primaria. Seleccione este campo y seleccione el men Edit | Primary Key:
Note como sale una imagen de una llave al lado izquierdo de la columna Improducto. Esta es un indicador visual que representa la clave primaria de una tabla.
29
12. Ahora ya estamos listos para guardar la tabla. Puede darle un clic al botn guardar de la barra de herramientas estndar, y asgnele el nombre Productos. 13. Despus de guardar la tabla, cierre la vi sta diseo. Ahora regresaremos al explorador de base de datos en donde se ve a la tabla productos recin creada. 14. Ahora podemos repetir el proceso para crear la tabla Clientes . Hacemos doble-clic donde dice Crear una tabla nueva en la Vista Diseo. 15. En la siguiente tabla se muestra el diseo lgico de la tabla Clientes : Tabla: Clientes Campo Ejemplo de datos Tipo de datos Tamao estimado de los datos Nmeros positivos decimales 15 caracteres 15 caracteres 8 caracteres 30 caracteres 20 caracteres 12 caracteres 50 caracteres
IDCliente (PK)
123456
Numrico
sin
Ral Rodrigo Alonso Ruiz 20036989 Jr. Cuzco 222 Huancayo 064-232425 ralonso31@hotm ail.com
30
Note que la mayora de campos son declarados como tipo varchar. Esto se debe a que es el mejor tipo de datos para valores de texto de longitud variable. Sin embargo el DNI es un campo de tipo char, porque siempre contiene un nmero fijo de caracteres y en estos casos el tipo char es la mejor opcin. 16. Repetimos los procesos descritos en los pasos 10 y 11 para establecer el campo IDCliente como Identity Field, con los mismos valores por defecto en el Identity Seed y el Identity Increment, y tambin establecerla como clave primaria. 17. Guardamos el archivo con el botn guardar de la barra de herramientas estndar con el nombre Clientes antes de cerrarla y retornar a la vista que nos mostrar las tablas que hemos creado hasta ahora. 18. Ahora, repetimos el proceso para crear la tabla Pedidos. Nuevamente hacemos doble-clic donde dice Crear una tabla nueva en la Vista Diseo. 19. En la siguiente tabla se muestra el diseo lgico de la tabla Pedidos: Tabla: Pedidos Campo Ejemplo de datos Tipo de datos Tamao estimado de los datos Nmeros positivos sin decimales Una fecha vlida Nmeros positivos sin decimales
IDPedido (PK)
1000
Numrico
de
30/08/2003
Fecha
123456
Numrico
31
Fecha de Entrega
31/08/2003
Fecha
Note que los campos Fech_ped y Fech_ent son de tipo DataTime; el tipo de datos de SQL Server usado para almacenar fechas. Tanto el campo IDPedido como IDCliente son de tipo int y no soportan valores nulos. De esta forma, cuando se agrega un nuevo registro a esta tabla se deben llenar de datos por lo menos a estos dos campos. 20. Nuevamente, repetimos los pasos 10 y 11 para establecer al campo IDPedido como Indentity field y tambin como Clave primaria. 21. Guardamos esta tabla como Pedidos, pero esta vez no cerramos el diseador porque todava nos falta un detalle. 22. Si vemos el diseo lgico de la tabla Pedidos nos daremos cuenta de que el campo IDCliente es una clave fornea (FK) relacionada con la clave primaria de la tabla Clientes. Para esto nos vamos al men Ver | Relaciones, y aparece el siguiente cuadro de dilogo:
32
23. Hacemos clic sobre el botn New y notaremos que automticamente asume que queremos crear una relacin con la tabla Clientes, tal como se muestra a continuacin:
33
La opcin Check existing data on creation significa que la relacin ser verificada cuando se agrege un registro nuevo, y si algn registro no tiene la apropiada relacin, se mostrar un error. Eso significa que no podramos agregar un pedido sin un cliente existente en la tabla Clientes . Estableciendo la opcin Enforce relationship for replication, la relacin se mantendr si los datos son replicados a otro servidor. Si marcamos la opcin Enforce relationship for INSERTs and UPDATEs, significa que al insertar o actualizar un registro se verifica que este exista adems en la tabla clientes, de lo contrario, no se podr realizar los cambios.
34
24. Este cuadro de dilogo automticamente ha rellenado la lista Primary key table y Foreing key table, como Clientes y Pedidos respectivamente, que es lo que precisamente necesitamos. En realidad no se trata de que este cuadro de dilogo sea un tanto inteligente sino que selecciona alfabticamente la primera tabla, que de hecho no siempre ser lo que queremos hacer. Ahora lo que necesitamos es indicar los campos comunes entre ambas tablas para especificar la relacin como se muestra a continuacin:
Esto crea la relacin que queremos entre dos tablas. Eso es todo lo que se tiene que hacer para crear una relacin con una clave Fornea.
35
25. Mientras esta ventana an se encuentra echemos un vistazo a la ficha Indexes/Keys como ha creado automticamente un ndice Clustered al momento de establecer una clave para la tabla.
26. Ahora cerramos la ventana de propiedades y la ventana del diseador de tablas para r etornar al proyecto y ver las tablas creadas hasta el momento. Probablemente se nos pregunte si deseamos guardar los cambios. Por su puesto que hacemos clic en Si.
36
27. Ahora, repetimos el proceso por ltima vez, para crear la tabla Detalles . As que hacemos doble-clic donde dice Crear una tabla nueva en la Vista Diseo. 28. En la siguiente tabla se muestra el diseo lgico de la tabla Detalles: Tabla: Detalles Campo Ejemplo de datos Tipo de datos Tamao estimado de los datos Nmeros positivos sin decimales Nmeros positivos sin decimales
IDPedido (PK)
1000
Numrico
IDProducto (PK)
12345
Numrico
Precio Cantidad
23.25 2
Creamos la estructura de la tabla Note que los campos IDPedido e IDProducto son de tipo int y el campo Cantidad es e tipo smallint. Este tipo de datos puedo contener valores desde -32,768 hasta 32,767. As que para almacenar la cantidad de tems de un determinado producto que lleva un cliente es ms que suficiente. Adems tambin los campos IDPedido e IDProducto no soportan valores nulos. 29. En este caso, vamos a especificar que la combinacin de los campos IDPedido e IDProducto formarn la clave primaria. Esto quiere decir que la combinacin de estos dos datos harn un nico identificador de registro. Sin
37
embargo estos no sern marcados como Indentity Column, ya que esos registros no son inicialmente creados en esta tabla, sino en las tablas a las cuales hacen referencia. El IDPedido es generado en la tabla Pedidos mientras que el IDProducto es generado en la tabla Productos. As que todo los que necesitamos por ahora es seleccionar estos dos campos a la vez y declararlos como claves primarias. 30. Despus de esto, el grfico de una llave aparecer al lado de estos dos campos. 31. Ahora guardamos la tabla con el nombre Detalles, pero nuevamente no cierre esta ventana an. 32. Los campos IDPedido e IDProducto son las claves primarias de esta tabla, pero tambin son claves forneas de las tablas Pedidos y Productos respectivamente. Entonces nos vamos al men Ver | Relaciones y hacemos clic sobre el botn Nuevo . 33. Nuevamente, por defecto aparece la tabla Clientes, la cual esta vez no es la que queremos. As que, en la lista Primary key table, seleccionamos Pedidos de manera que podamos crear nuestra primera clave fornea relacionada al campo IDPedido de la tabla Pedidos. 34. Note que cuando cambiamos la clave primaria automticamente la lista Foreing key table cambia a Detalles como se ve a continuacin:
38
35. Ahora seleccionamos IDPedido de la tabla Pedidos como clave primaria y luego IDPedido de la tabla Detalles como clave fornea, como se ve a continuacin:
39
36. Esto crea la relacin con la tabla Pedidos, ahora debemos crear la relacin con la tabla Productos. Para eso, hacemos clic en el botn Nuevo. 37. Ahora cambiamos a la tabla Productos como tabla primaria y la tabla Detalles como fornea con el campo IDProducto en ambos casos. De esta manera tendramos la relacin con la tabla Productos tambin. 38. Para ver la lista de las relaciones existentes en la tabla Detalles, desplegamos la lista Selected relationship:
40
39. Note que ambas relaciones que acabamos de crear aparecen en esta lista. Cerramos esta ventana y el diseador de la tabla Detalles para retornar al proyecto principal, si se nos pregunta que si queremos guardar los cambios contestamos, por supuesto Si. 40. Hacemos doble-clic en la tabla Productos para agregar algunos datos de ejemplo. Recordemos que el campo IDProducto es autogenerado por SQL Server, as que no tenemos que llenar nada ah. Tratemos de agregar registros sin ingresar valores a los campos requeridos (que no soportan nulos), solo para ver que sucede. Luego agregamos unos cuantos registros y cerramos la ventana examinar. 41. Luego, abrimos la tabla Clientes y agregamos algunos registros. Nuevamente, recordemos que el campo IDCliente es autogenerado.
41
42. Abrimos la tabla Pedidos y agregamos algunos registros aqu tambin. Note lo que sucede cuando trate de agregar un registro cuyo IDCliente no exista en la tabla Clientes (la relacin fuerza a que haya una integridad referencial en ambas tablas). Luego llene algunos registros con datos vlidos. 43. Por ltimo, abrimos la tabla Detalles y le agregamos algunos registros de prueba. Y de hecho tenemos que agregar el IDPedido de un pedido existente y un IDProducto de un producto existente tambin. Adems notar que un mismo pedido puede agregarse varias veces pero eso s con diferentes productos, de la misma forma un mismo producto puede aparecer en diferentes pedidos pero no en un mismo pedido. Bueno pues, Felicitaciones! Acaba de crear satisfactoriamente una base de datos con cuatro tablas en el SQL Server Desktop Engine usando un proyecto de Microsoft Access. Ahora que hemos aprendido los principios bsicos de la implementacin de una base de datos en el SQL Server, podemos empezar a trabajar con una base de datos ms compleja que usaremos para la mayora de ejemplos de este libro. Usaremos la base de datos Northwind que viene como ejemplo en Access. sta es bastante similar a la base de datos que acabamos de crear. Sin embargo esta base de datos es ms compleja ya que contiene tablas adicionales y est diseada para cubrir las necesidades de una empresa ficticia llamada Northwind. En la siguiente seccin, veremos como usar el Upsizing Wizard (asistente de migracin) para convertir la base de datos Northwind de Access a SQL Server. Durante este proceso, el asistente automticamente crea un nuevo proyecto de Access por nosotros para la administracin de esta base de datos. Una vez convertida la base de datos en SQL Server, seremos capaces de usarla para los ejemplos de este libro.
42
Convirtiendo una Base de Datos de Access existente al SQL Server Desktop Engine
En esta seccin, vamos a convertir una base de datos existente en Access, la base de datos Northwind que viene como ejemplo al instalar e l producto. Una vez que se haya terminado con la conversin, analizaremos el reporte producido para asegurarnos de que no hubo errores. Luego veremos el proyecto resultante que nos permite administrar la nueva base de datos que acabamos de crear en SQL Server. Prctica Migracin de la base de datos Northwind de Access al SQL Server 1. 2. Abrimos Microsoft Access. Seleccionamos el men Archivo | Abrir o el botn Abrir de la barra de herramientas estndar. Buscamos el archivo norhtwind.mdb. El lugar comn en donde lo puede encontrar es c:\archivos de programa\Microsoft Office\Samples, dependiendo de la versin o idioma del programa y del sistema operativo. En todo caso otra forma es buscarlo a travs de la herramienta buscar de Windows. Cerramos la pantalla de presentacin de la aplicacin Northwind de manera que pasemos a la ventana principal del proyecto. Desde el men Herramientas, seleccionamos Utilidades de Base de Datos | Asistente de Migracin Se mostrar el asistente Seleccionamos la opcin Create new database (que por defecto aparecer marcada), y hacemos clic sobre el botn Siguiente de manera que podamos crear una nueva base de datos.
3.
4. 5. 6.
43
7.
Rellenamos la informacin sobre el SQL Server como se muestra en la siguiente figura. En el caso del nombre de la nueva base de datos, la vamos a llamar NorthwindSQL (ya que para quienes tienen otras versiones de SQL Server que no sean el Desktop Engine, ya se encuentra la base de datos Northwind, y probablemente sea el caso suyo). Una vez que se rellenan todos los datos necesarios, hacemos clic sobre el botn siguiente.
8.
En la siguiente pantalla se nos pide especificar que tablas migraremos al SQL Server. En nuestro caso agregaremos todas y pasamos a la siguiente pantalla.
44
9.
En la siguiente pantalla se puede especificar los atributos de la base de datos (con respecto a los objetos) queremos llevar hacia la nueva base de datos en SQL Server. En este caso queremos llevar tanto la estructura como los datos, por lo tanto marcamos las opciones como a continuacin se muestra:
45
10. En la siguiente pantalla se especifica donde crearemos el proyecto de Access y como se va a llamar. Esta pantalla nos da la oportunidad de enlazar una aplicacin existente o crear una nueva aplicacin cliente/servidor. Sin embargo dejaremos las opciones por defecto 11. Esta es la ltima pantalla del asistente en donde hacemos clic al botn Finalizar 12. Luego, se inicia la conversin de la base de datos. Veremos una barra de progreso indicando algunos detalles del proceso 13. Si ocurre algn error este ser mostrado por un mensaje detallando la causa del mismo. Sin embargo contina con la siguiente tabla u objeto de base de datos 14. Inmediatamente despus de terminar con la migracin se muestra un reporte resumiendo los detalles del proceso. Este reporte consta de aproximadamente 19 pginas y podemos revisarla detalladamente para revisar su contenido.
46
15. Despus de mostrar todos los detalles de la conversin de cada tabla, aparece un resumen que describe las consultas que han sido convertidas. Note como algunas vistas de Access han sido convertidas como vistas en SQL Server, y otras las ha convertido como procedimientos almacenados. Ms adelante veremos en detalle el uso de las vistas y procedimientos almacenados. 16. Si gusta puede imprimir el archivo log (archivo de registro) o el reporte creado automticamente.
Felicitaciones nuevamente! Acaba de migrar una base de datos de Access a SQL Server para crear un proyecto Cliente/Servidor. Puede ahora revisar el proyecto que actualmente est abierto en Access (northwindsql.adp). Notar que no es tan diferente a un proyecto individual de Access. La principal diferencia est en detrs de la arquitectura. Las tablas se visualizan igual que antes pero ahora los datos estn almacenados fsicamente el SQL Server.
47
48
Qu es ADO.NET?
ADO.NET es una tecnologa de acceso a datos que se basa en los objetos ADO (Objetos de Datos ActiveX) anteriores. Es
una manera nueva de acceder a los datos construida sobre ADO, es por eso que tambin ADO.NET puede coexistir con ADO. ADO.NET utiliza un modelo de acceso pensado para entornos desconectados. Esto quiere decir que la aplicacin se conecta al origen de datos, hace lo que tiene que hacer, por ejemplo seleccionar registros, los carga en memoria y se desconecta del origen de datos. ADO.NET es un conjunto de clases que se utiliza para acceder y manipular orgenes de datos como por ejemplo, una base de datos en SQL Server o una planilla Excel. ADO.NET utiliza XML como el formato para transmitir datos desde y hacia su base de datos y su aplicacin Web.
El Espacio de Nombres
Hay 3 espacios de nombres que se pueden usar en un formulario Web para acceder a ADO.NET: ??System.Data. ??System.Data.SqlClient. ??System.Data.OleDb. Para importar el espacio de nombres en VB.NET se usa la sentencia:
Imports System.Data Imports System.Data.SqlClient Imports System.Data.OleDb datos 'Siempre lo vamos a utilizar 'Para acceder a SQL Server 'Para acceder a cualquier otro origen de
49
El cuadro muestra un ejemplo de Objetos provistos por distintos proveedores de datos .NET
50
Propsito
Provee conectividad a un Origen de Datos Provee acceso a comandos de Base de Datos como Select, Delete, Insert y Update Provee acceso a datos de solo lectura Utiliza el objeto Connection para enlazar un objeto DataSet con un Proveedor de Datos.Tambin permite actualizar los Datos en el origen a partir de las modificaciones hechas en el DataSet
SqlConnectio n
Command
SqlCommand
OleDBCo mmand
DataReader
SqlDataRead er
OleDBDat aReader
DataAdapter
SqlDataAdap ter
OleDBDat aAdapter
51
52
Los datos siempre viajan en formato XML, ASP.NET y ADO.NET transforman en forma automtica el XML en un DataSet.
El objeto DataSet
Un DataSet guarda informacin en un entorno desconectado. Despus de que se establece una conexin con una Base de Datos entonces puede acceder a sus datos. El DataSet es la principal forma de guardar datos cuando usted utiliza ADO.NET El DataSet p ermite guardar datos que se obtuvieron de un origen de datos. Los datos en un DataSet pueden ser manipulados sin necesidad que el formulario Web mantenga la conexin con el origen de datos. La conexin se reestablece recin cuando se necesita actualizar los cambios. Los mtodos y objetos que se usan en un DataSet son similares los que se usa en una base de datos relacional. El DataSet est formado por cinco tipos diferentes de objetos:
53
Tables , Rows , Columns , Constraints Collections , tal como en una base de datos.
y Relations
El DataSet guarda la informacin en uno o ms objetos de tipo DataTables . Cada DataTable puede ser poblada con datos de un nico origen. Se puede tambin establecer relaciones entre 2 objetos DataTables usando un objeto de tipo DataRela tion .
En el primer caso nuestro DataSet tendra un nombre por defecto asignado por el sistema. En el segundo caso estamos estableciendo un nombre especfico. Los DataSets son un almacn de informacin al cual podemos acceder en cualquier momento.
54
El objeto DataTable
Un DataSet contiene una coleccin de tablas a las cuales hace referencia a travs de su propiedad Tables. Cada tabla individual residente en memoria, es llamada DataTable , y podran haber cero o ms tabla en la coleccin. Los DataTable contienen filas de datos, y cada fila est formada por columnas. Podemos crear continuacin: un DataTable como se muestra a
Ahora podramos agregar una tabla a un DataSet con el mtodo Add de la propiedad Tables del DataSet:
Dim ds As New DataSet("DatasetVentas") Dim tablaCliente As New DataTable("TablaClientes") ds.Tables.Add(tablaCliente)
Para hacer referencia a una tabla en particular de un DataSet podramos hacerlo mediante su nombre o su ndice:
ds.Tables(tablaCliente) ds.Tables(0)
Ahora podramos agregar una tabla a un DataSet con el mtodo Add de la propiedad Tables del DataSet:
El objeto Conexin
Abre una conexin sobre un origen de datos. Podemos usar como se explic anteriormente en este mismo captulo el objeto OleDbConnection o el SqlConnection (dependiendo a que origen de datos nos queremos conectar). Para el proveedor OleDB indicamos los siguientes argumentos en la cadena de conexin: Provider, Data Source (o Server), User ID y Password. Para el proveedor SQL usamos
55
los mismos argumentos a excepcin del Provider, ya que en este caso siempre ser SQL. Veamos el siguiente ejemplo que crea una conexin SQL:
Dim conexion As New _ SqlConnection("server=localhost; user id=sa; password=; database=NorthwindSQL") conexion.Open()
El objeto DataAdapter
El DataAdapter es el nexo entre un origen de datos y el DataSet. Si desde la aplicacin queremos recuperar o actualizar registros, se usan las propiedades del DataAdapter que hacen referencia a los objetos Command que se comunican directamente con el origen de datos para manipular los datos de acuerdo al pedido del usuario. Cuando un DataAdapter se conecta a un origen de datos se puede ejecutar acciones. EL siguiente cuadro resume las 4 acciones: Propiedad SelectCommand Funcin Obtiene registros origen de Datos Inserta registro origen de datos de un
InsertCommand
en
un
UpdateCommand
DeleteCommand
56
Los mtodos ms usuales del DataAdapter son Fil y Update. El mtodo Fill llena un DataSet con la informacin especificada, veamos el siguiente ejemplo:
Dim ds As New DataSet Dim da As New SqlDataAdapter da.Fill(ds)
57
El objeto Command
El objeto Command es usado para configurar los comandos SELECT, INSERT, UPDATE y DELETE o procedimientos almacenados de un DataAdapter. Veremos un ejemplo junto con el objeto DataReader a continuacin.
El objeto DataReader
Cuando se debe recuperar una gran cantidad de registros de un origen de datos el objeto DataTable puede usar demasiada memoria y recursos. El objeto DataReader permite usar menos recursos y acceder ms rpidamente a los datos. El costo de esto es que puede ser recorrido nicamente hacia adelante y sus datos no pueden ser modificados Adems la conexin al origen de datos debe hacerse en forma explcita. Veamos un ejemplo:
'Se crea la conexin Dim conexion As New _ SqlConnection("server=localhost; user id=sa; password=; database=NorthwindSQL") conexion.Open() 'se crea un objeto de tipo command Dim cmdDoctores As New SqlCommand("select * from Customers", conexion) 'se declara crea un objeto de tipo dataReader Dim dr As SqlDataReader 'el resultado de la ejecucin del objeto command es un DataReader dr = cmdDoctores.ExecuteReader() 'Ahora leemos los datos del DataReader 'El Bucle va desde el primer registro hasta el ltimo Do While dr.Read() Imprimimos en la pgina web Response.Write( dr("CustomerID") + " " + dr("CompanyName") ) Loop dr.Close()'Cerramos el DataReader conexion.Close() 'Cerramos la conexin
58
Basado en una sola sentencia SQL de una sola base de datos Modelo conectado Se puede asociar a un solo control nicamente hacia delante
Modelo desconectado Se puede asociar a muchos controles Se puede recorrer los datos hacia delante y hacia atrs Acceso ms lento Sportado por la herramientas de Visual Studio .NET
El concepto de coleccin
Recordemos que un arreglo (array) es un conjunto de elementos del mismo tipo. Una coleccin es un conjunto de elementos de cualquier tipo. Sus elementos son accedidos mediante un ndice entero. En ADO.NET el primer elemento de una coleccin tiene ndice 0. Ejemplos de colecciones en ADO.NET son: ??DataSet: Es una coleccin de DataTables ??DataTable: Es una coleccin de DataRow ??DataRow: Es una coleccin de DataColumn
59
60
'x es el ndice del elemento dentro del objeto DataTables 'CompanyName es el nombre de la columna en el elemento x 'Veamos como recorrer un objeto DataTable y mostrar sus campos Dim r As DataRow Dim str As String For Each r In ds.tables("Customers").rows str = r(0) 'agrega el valor de la primera columna str += " " 'espacio en blanco str += r ("CompanyName") 'agrega el valor del Campo llamado Nombre Response.Write (str) 'devuelve al cliente el string que arm Next 'el operador de string += concatena lo que tiene la variable a la 'derecha del operador con el string que se pone a la izquierda del operador.
Tomado del libro Aplicaciones y Servicios Web con ASP .Net y SQL Server 2000, material de estudio del Taller Virtual Aplicaciones y Servicios Web con ASP .Net y SQL Server 2000, lo invitamos a participar.
61