1
Presentación 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 través de nuestra Escuela virtual, dirigido por el mismo autor de la publicación, rendir sus evaluaciones y obtener la Certificación de haber aprobado el curso por parte de nuestra empresa, Estudie cómodamente en casa, en la oficina o desde una cabina pública, 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), EducaVirt ual), por el tiempo que dure su estudio. Asi podrá acceder a: Biblioteca de recursos, Programas, Foros, Soporte en línea, acceso a la Escuela Virtual, etc.
2
Características del Plan EducaVirtual Subdominio Servidor basado en Windows 2000 Server Internet Information Server Soporte ASP .Net Base de Datos: SQL Server Acceso FTP 6 meses de servicio Acceso a la Escuela Virtual Evaluación y Certificación Inversión: 20 dolares Las tecnologías en la actualidad nos permiten salir de nuestras fronteras no solamente en el aspecto de capacitación sino también en los negocios. Estoy seguro que a la conclusión del estudio del presente curso, y con la tutoria de Juan Carlos Heredia, autor del presente libro, en poco tiempo estará dispuesto para ser consultor en soluciones tecnológicas basadas en tecnologías web usando ASP .Net y SQL Server 2000.
Hagamos negocios Nuestra propuesta es que usted sea nuestro socio de negocios, dediquese a proponer la solución y nosotros nos hacemos cargo de ofrecerle el respaldo tecnológico. 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 alguno de nuestros nuestros servicios (ver detalle en www.grapperusoft.com)
3
Hosting Comercial Implementar una aplicación Web supone publicarla en un Servidor, disponer de uno propio implica la adquisición de los equipos, una línea dedicada de buen ancho de banda, software, personal especializado que se haga cargo de la seguridad, mantenimiento, respaldo, etc. Para la mediana o microempresa representaría una inversión 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 inversión mínima adquiera una cuenta con todas las características necesarias para publicar su aplicación, deje en nuestras manos el soporte tecnológico y dediquese usted a sus clientes.
4
Nuestros Planes de Hosting Comercial incluyen: 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 Línea Estadisticas completas Extensiones FrontPage Soporte Shockwave/Flash Páginas de error personalizables Aplicaciones pre-instaladas: Chat, Foros, Tienda Electrónica
5
Bondades del Servicio La plataforma de Servicios está compuesta de robustos servidores de última tecnología con un sistema de respaldo de datos automatizado Nuestros conceptos de seguridad de alta disponibilidad aseguran máxima privacidad con la utilización de unidades de Firewall El respaldo de energía se encuentra debidamente asegurados, lo que garantiza el servicio los 7 días a la semana, las 24 horas al día y los 365 dias del año. Soporte técnico especializado, para atender los requerimientos de nuestros clientes 24 horas al día 7 días a la semana Capacitación Velocidad de Acceso acorde a las necesidades de su compañia. Revise nuestros planes en http://www.grapperusoft.com Con la seguridad de ofrecerle nuestros mejores servicios, quedamos a su disposición. César Bustamante Gerente General GrapPeru SAC http://www.grapperusoft.com
[email protected] [email protected]
6
INTRODUCCIÓN Todo programa computacional (software) está basado en el principio de la manipulación de información. Hoy, encontramos aplicaciones computacionales sofisticadas que almacenan su información en una “Base de Datos”, un repositorio de información controlada por un Sistema de Administración de Base de Datos o DBMS (DataBase Management System). Un DBMS se encarga de dos cosas: primeramente, controla el almacenamiento de la información, y en segundo lugar, provee mecanismos para consultar y mantener la información, es decir, agregar, eliminar y actualizar datos. Un DBMS se empeña en cumplir estas dos funciones básicas de la manera más eficiente posible. Con el pasar de los años, el mercado de los DBMS ha madurado y se ha sofisticado, ofreciendo productos diseñados para el uso de grandes entornos empresariales como es el caso de Oracle 9i o Microsoft SQL Server 2000, y también par entornos mas pequeños o personales como Microsoft Access. En algunos casos, incluso nos encontramos con paquetes de software que incluyen su propio DBMS para la administración 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 información sea administrada por un DBMS. En realidad, debe saber que el uso de un DBMS es la manera más fácil de administrar y manipular la información de su aplicación. 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. ¿Cómo podemos desarrollar un programa que trabaje con cualquier base de datos que nuestro cliente pueda elegir? El truco está en desarrollar una aplicación que trabaje con una “Capa de acceso a los datos” de cualquier tipo. En vez de crear un programa que requiera de un DBMS específico, se puede crear un programa que acceda a esa capa.
7
Entonces es responsabilidad de la capa convertir a “modo nativo” las llamadas que el DBMS usa. Microsoft le llama a esta visión “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 construcción de aplicaciones Web con SQL SERVER 2000 y ASP.NET que conjugan con el poder de ADO.NET.
¿A quién va dirigido este libro? Este libro está orientado a analistas y programadores con cierta experiencia básica en programación con cualquier lenguaje de programación, de preferencia en Visual Basic, quienes desean iniciarse en el desarrollo de aplicaciones Web con Bases de Datos. Sería útil si se tiene alguna experiencia con Microsoft Access, aunque esto no es estrictamente necesario. Se debe tener en cuenta que este libro no es una introducción a ASP.NET con Visual Studio .NET, por lo que se recomienda la revisión de otros materiales o libros que permitan su iniciación en estos temas. Así mismo, el presente libro no aspira a que los programadores en Visual Basic 6 experimenten de inmediato todos los cambios existentes entre VB6 y VB.NET.
8
¿Qué temas se cubren este libro? El SQL Server - Desktop Engine. ??Creación de Base de Datos en SQL desde Access. ??Consultas de Base de datos con T-SQL ??Uso del explorador de Servidores del Visual Studio .NET, para ejecutar consultas, vistas, procedimientos almacenados, etc. ADO.NET y el objeto DATASET. ?? ??El rol del XML en ADO.NET. Aplicaciones Internet usando Web Forms y Web ?? Services con ASP.NET ??Desarrollo de una aplicación Web real. ??Instalación de un Sitio Web de Comercio Electrónico como ejemplo. ??Distribución e Instalación de una aplicación Web. ??
¿Qué se necesita para usar este libro? Todo lo que se necesita es una PC que tenga instalado: Windows 2000, XP (Profesional o Server). ??IIS 5 o 6, el cual viene con Windows 2000 y Windows XP respectivamente. ??Internet Explorer o cualquier otro explorador del Web. Access 2000 - XP o superior ?? Studio .NET Cualquiera de versiones o ??Visual ediciones. ??SQL Server 2000 o el Desktop Engine, que viene con el Visual Studio .NET ??
Contenido del CD El CD que acompaña a este libro, contiene los archivos de ejemplo y demostración, descritos en el libro. Además contiene algunas otras herramientas útiles. Vea el contenido
9
del archivo Leame.txt ubicado en la raíz del CD para mayor información.
Soporte Definitivamente valoramos las opiniones de nuestros lectores y nos gustaría saber qué es lo que piensa sobre este libro, qué no le gustó, y qué es lo que le gustaría que consideremos para la próxima oportunidad. Nos puede enviar sus comentarios ya sea a través 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 código de ejemplo. Sin embargo nadie es perfecto y quizás encuentre errores. Si encuentra algún error ortográfico o en alguna parte del código, estaremos gustosos de saberlo. De esta manera nos estará ayudando a dar un mejor soporte a través de nuestro sitio Web, a los futuros lectores.
10
CAPITULO I Microsoft SQL Server Desktop Engine
11
Microsoft SQL Server 2000 - Desktop Engine Para el desarrollo de la Base de Datos usada en este libro se utilizará el Microsoft SQL Server 2000 - Desktop Engine, que viene incluida en el Visual Studio .NET. Antes de ir de lleno a este tema, vale la pena entender primero ¿qué es el Microsoft SQL Server?, ¿qué ediciones están disponibles? y ¿cuál es la diferencia entre el Desktop Engine que usaremos en este libro con las demás ediciones?
Definición de Microsoft SQL Server 2000 Microsoft SQL Server 2000 es un sistema de administración de base de datos relacionales que puede ser usado por tanto por usuarios individuales como por empresas o negocios para el almacenamiento y la administración de su información. También ofrece poderosas funcionalidades para reportes y el análisis de los datos. Actualmente se tiene para elegir entre siete ediciones del Microsoft SQL Server 2000. Dos de ellas, la edición Estándar y Empresarial, son para ponerlos en servidores de producción (servidores principales de una organización o empresa). Cada cual de las otras 5 versiones, tienen un propósito específico y no tienen licencia para ponerlos en servidores de producción. He aquí una descripción concreta de cada una de estas versiones: SQL Server 2000 Enterprise Edition – Ésta es la edición más completa del producto y es la más apropiada para grandes organizaciones que necesitan administrar rápida y eficientemente grandes cantidades de información. SQL Server 2000 Standard Edition – Ésta edición contiene la mayoría de las características disponibles, con la notable excepción de aquellas que habilitan la rápida y eficiente administración de grandes cantidades de información. Por consiguiente, ésta versión va dirigida para medianas y
12
pequeñas empresas cuya cantidad de información no es muy grande o extensa. No obstante, esta versión, es extremadamente poderosa que contiene los servicios de análisis de datos (con algunas excepciones), replicación, búsqueda Full-text, Servicios de transformación de datos, English Query y otras características avanzadas. SQL Server 2000 Personal Edition – Ésta edición contiene básicamente las mismas características de la edición estándar, a excepción de la replicación transaccional. Adicionalmente, los servicios de análisis y de búsqueda fulltext solo están disponibles en ciertos sistemas operativos. Esta es la edición más apropiada para usuarios que usan muchas veces sus computadoras desconectadas de la red y manipulan sus datos localmente. Un caso común serían los usuarios móviles – por ejemplo, cuando los vendedores de una empresa necesitan la base de datos en sus equipos portátiles cuando están de viaje. Esta versión limita el número de conexiones y procesos concurrentes que pueden estar ejecutándose a la vez. Esto significa que no está diseñada para controlar gran cantidad de usuarios o muchos procesos en la base de datos. SQL Server 2000Windows CE Edition – Ésta edición corre en dispositivos móviles que usan Windows CE. Es una versión 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 organización. También permite administrar una base de datos remotamente vía Internet desde el dispositivo móvil. SQL Server 2000 Developer Edition – Ésta edición contiene todas las características del Enterprise Edition, con la condición de que no sea instalada en un servidor de producción. Como el nombre lo indica, ésta versión está diseñada para los analistas, consultores y desarrolladores o programadores, cuando desarrollan o prueban una aplicación SQL.
13
SQL Server 2000 Evaluation Edition – Ésta versión es completamente funcional como la del Enterprise Edition que se puede ejecutar durante 120 días. Permite que las organizaciones evalúen el producto completo sin costo. SQL Server 2000 Desktop Engine – Ésta es una versión redistribuible. Quiere decir que se puede incluir en las instalaciones de sus programas desarrollados que usan o almacenan datos de SQL Server. Esta versión no incluye ninguna de las herramientas de administración gráfica 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 más acerca de las distinta ediciones del SQL Server 2000, ahora enfoquémonos más a la versión SQL Server 2000 Desktop Engine, que será la que usaremos a lo largo de este libro.
14
¿Porqué usar el Desktop Engine en vez de Access? Una de las principales ventajas del Desktop Engine es que actualmente es una verdadera versión del SQL Server 2000, que incluye el mismo motor de base de datos relacional y las características de replicación que el Personal Edition, a excepción del servicio de búsqueda Full-Text, y las herramientas de administración gráfica. Tenga en mente, que las bases de datos en esta versión no pueden ser mayores a 2 GigaBytes, y que la base de datos soporta como máximo 5 procesos a la vez, lo cual significa, que no se pueden realizar más de 5 tareas de administración de base de datos a la vez. Por ejemplo, esto se da cuando, 5 usuarios diferentes se conectan al servidor o cuando una aplicación con una simple conexión ejecuta 5 procesos distintos en un determinado momento. Ahora lo que se puede considerar como beneficio de esta versión es que contiene un formato totalmente redistribuible en forma libre. No se necesita pagar ninguna licencia por el uso de este producto. Otra ventaja adicional de esta versión, es que ofrece a los desarrolladores la posibilidad de crear programas de demostración de sus productos. Supóngase que tiene un programa extenso y complejo basado en SQL Server, y quiere dar una perspectiva a su cliente del programa en un CD de demostración. Anteriormente los programadores tenían que hacer una versión demo usando la base de datos de Access en donde se podía distribuir libremente el archivo de base de datos siempre y cuando se tenga instalado las librerías de ejecución de Access en un equipo. El Desktop Engine soluciona esto, permitiendo la distribución de CDs de demostración sin la necesidad de reescribir el código del programa final. Se puede entonces ahora ver que el Desktop Engine ofrece una alternativa seria cuando se trata de desarrollar una aplicación con mínimos requisitos de base de datos.
15
Adicionalmente por el mismo hecho de que es una verdadera versión del SQL Server (facilitando la actualización o migración a un servidor de producción 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 información 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.
Obteniendo e instalando el Desktop Engine En esta sección, buscaremos donde se puede obtener una copia del Desktop Engine y luego lo instalaremos paso a paso. Note que si usted ya tiene instalado otra versión del SQL Server 2000, puede usar esa misma instalación en vez del Desktop Engine. El código usado como ejemplo en este libro trabajará con cualquier versión del SQL Server 2000, sin embargo para efectos de demostración nos basaremos en el Desktop Engine ya que es la única versión gratuita del SQL Server 2000.
16
¿Donde obtener una copia del Desktop Engine? Esta versión está disponible a través de muchos recursos, incluyendo el Visual Studio .NET, el SQL Server 2000 y el Office 2000 o también en Office XP, además lo podemos descargar desde el mismo sitio Web de Microsoft (http://www.microsoft.com/). Verifique los requisitos de instalación descritos a continuación para asegurarse de que su sistema puede soportarlo.
Requisitos de Instalación 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 mínimo 64 Mb. de RAM.
17
Instalación del Desktop Engine Paso 1 – Inserte el segundo disco de instalación o DVD y desde el explorador de Windows diríjase a la carpeta \program files\Microsoft .NET\FrameworkSDK\Samples\Setup. Ahí encontrará el archivo instMSDE.exe; la ubicación precisa de este archivo puede variar a otro CD o directorio dependiendo de las próximas versiones del Visual Studio .NET. Incluso en algunas versiones del Visual Studio .NET, se usa el archivo SQL2000.exe, en vez del instMSDE.exe. Paso 2 – Ejecutar el programa de instalación. Haga doble clic en el archivo instMSDE.exe para iniciar el programa de instalación. Probablemente se le pregunte que algunos archivos del sistema tienen que ser actualizados antes de que la instalación continúe. Esto puede requerir que se reinicie el sistema y comience de nuevo la instalación. Después de ejecutar la instalación, se iniciará la copia de archivos a su sistema sin la interactividad del usuario. El Desktop Engine se instalará con las configuraciones por defecto del SQL Server, tal como se encuentran especificadas en el archivo setup.ini. La instancia del SQL Server se llamará MiPC\NetSDK, en donde MiPC es el nombre de su equipo. Si desea modificar estos valores por defecto (o especificar algunas configuraciones adicionales), necesitaría copiar todo el directorio de instalación a su disco duro o a la red de tal manera que se pueda modificar el archivo setup.ini. Paso 3 – Confirmación de que la instalación fue satisfactoria. El proceso de instalación deberá agregar un nuevo icono al menú inicio de Windows. Para verificar que la instalación a sido satisfactoria, diríjase 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 automáticamente. 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 más adelante en este mismo capitulo.
Entendiendo que es lo que se instaló Ahora que se completó la instalación, veamos que se instaló exactamente. En total, se han instalado 3 servicios con el Desktop Engine: SQL Server, SQL Server Agent, y el Distributed Transaction Coordinator. El SQL Service Manager, que se acaba de ejecutar manualmente, es un utilitario que permite administrar cada uno de estos servicios. Veamos ahora la descripción detallada de cada uno de estos servicios.
El servicio SQL Server Este servicio es el corazón del Desktop Engine . En
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 información en la base de datos. El procesador de consultas es responsable de recibir y ejecutar las sentencias SQL. Hay además algunos otros componentes adicionales para el almacenamiento de los datos y el procesador de consultas, pero no son necesarios para nuestros propósitos por ahora, así que los pasaremos por alto.
El SQL Server Agent El Agente del SQL Server . Con este servicio se pueden
programar ciertas alertas y actividades para la base de
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 automáticamente se ejecute y reporte si se encuentra algún problema. Por lo tanto este servicio no siempre necesita estar ejecutándose, sin embargo puede ser una herramienta muy útil.
El Distributed Transaction Coordinator El coordinador de Transacciones Distribuidas de Microsoft (DTC). Este servicio permite que las
transacciones se extiendan a lo largo de otros equipos existentes en la red. Mas adelante veremos un ejemplo de uso de este servicio.
Administrando los servicios con el SQL Service Manager Como ya se mencionó, este utilitario permite administrar los tres servicios mencionados previamente. Cuando éste es iniciado, ya sea automáticamente al iniciar el sistema o manualmente después de la instalación, se visualiza un icono en la barra de tareas de Windows, típicamente localizada en la esquina inferior derecha de la pantalla. como se muestra aquí:
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 símbolo reproducir (play) de un VCR (aparato de reproductor de video). Algunas veces, el icono muestra un cuadrado de color rojo, como el símbolo detener, haciendo notar la suspensión de uno de los tres servicios como se describe posteriormente en esta misma sección. Si da doble clic sobre este icono, la pantalla del SQL Service Manager se muestra así:
20
Esta ventana muestra la configuración 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 están disponibles. La lista de los servicios permite seleccionar uno de los tres servicios descritos anteriormente. Además hay botones para Iniciar/Continuar , Pausar y Detener , los cuales están habilitados o deshabilitados de acuerdo al estado actual. En la figura anterior, el botón Pause y Stop están habilitados. Si se desea suspender temporalmente todas las actividades de la base de datos, simplemente hacemos clic sobre el botón Pausa. Si se desea parar completamente todas las actividades de la base de datos, se haría clic sobre el botón Stop. Para reiniciar el servicio posteriormente, tenemos el botón 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 círculo que sería reemplazada por un cuadrado rojo si el servicio fuera
21
suspendido; esta misma representación 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 cómo trabajar con el Desktop Engine en Access.
Usando Access para trabajar con el SQL Server - Desktop Engine Debido a que el Desktop Engine no viene con ninguna herramienta de administración (como el caso de las otras versiones del SQL Server 2000), se puede usar Microsoft Access, el Server Explorer del Visual Studio .NET, o alguna otra herramienta de terceros diseñada para este propósito. La buena noticia es que Microsoft Access 2000 o XP y el Server Explorer del Visual Studio .NET tienen una cercana integración con las Bases de Datos de SQL Server. Estas herramientas permiten crear y administrar nuevas bases de datos de SQL Server. También permiten ver Vistas (un tipo de consulta) así como otros objetos asociados a la base de datos. En el resto del capitulo usaré Access XP para administrar una base de datos. Luego más adelante en el libro usaremos el Server Explorer del Visual Studio .NET. Access provee asistentes de migración que convierten una base de datos existente de Access a cualquier versión de SQL Server. Las versiones anteriores de Access no permitían modificar la estructura de una tabla, crear una nueva base de datos, o administrar otros objetos como las
22
vistas. Todo lo que se podía hacer era conectarse a una base de datos existente para examinar, crear o eliminar una tabla o actualizar los datos que está tenía. La nueva integración con Access 2000 o XP, y de seguro versiones futuras, ofrecen una mejora sobre estos casos anteriores.
23
Creación de una nueva base de datos en el SQL Server -Desktop Engine desde Access En esta parte, vamos a crear una base de datos típica para almacenar información 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 vacío. Luego se crea cada tabla en la vista diseño y luego se abren estas para agregarles algunos registros de prueba. Práctica – Creación de una nueva base de datos en SQL Server desde Access 1. Abrimos Microsoft Access. 2. Seleccionamos el Menú Archivo | Nuevo. Elija proyecto usando nueva base de datos. 3. Nombre el proyecto como testDB y guárdelo en la carpeta que crea conveniente. 4. Una vez creado el nuevo proyecto, se muestra el Asistente para Base de Datos de SQL Server, como se muestra a continuación:
24
5. Al asistente empieza preguntando por el nombre del servidor que va a usar, el Identificador de Usuario y la contraseña. Rellene los datos apropiadamente: el nombre de su servidor, el identificador de usuario y la contraseña (el usuario debe ser “sa” y la contraseña en blanco a menos que los haya cambiado previamente). Finalmente aparece el nombre de la Base de Datos como testDBSQL que podría cambiarlo si es lo que desea, sin embargo para efectos de demostración nos quedaremos con este nombre sugerido. Hacemos clic en el botón siguiente. 6. La siguiente pantalla indicará que el asistente tiene toda la información necesaria para crear la base de datos. En esa pantalla hacemos clic en el botón Finalizar. 7. Se verá un cuadro solo por un momento que indica el progreso de la operación. Una vez completado este proceso, el asistente ha terminado, dejándonos frente a la base de datos vacía como se muestra a continuación:
25
8. El siguiente paso será crear una nueva tabla, y esto lo hacemos dando doble-clic en la línea que dice “Crear una tabla nueva en la vista diseño”. 9. Aparecerá en la pantalla el diseñador de tablas vacío. Primero, creamos la tabla producto con las siguiente estructura:
26
Tabla: Productos Campo
Ejemplo de datos
Tipo de datos
Tamaño estimado de los datos
IDProducto (PK)
12345
Numérico
Números positivos sin decimales
Descripción
Harina de pescado
Texto
25 caracteres
PrecioUnitario
23.25
Monetario
0.00 hasta 10,000.00
Stock
50
Numérico
0 hasta 9,999
UnidaddeMedida
40 – 100 gr.
Texto
25 caracteres
Llene el diseñador de tablas como se muestra en la siguiente figura:
27
Una vez terminado con el diseño mostrado, preste atención a los nombres de los campos y los tipos de datos que acaba de asignarle a cada uno. Nótese que el campo IDProducto debería ser declarado como clave primaria de esta tabla. 10. Ahora no solo queremos que el identificador del producto sea nuestra clave primaria, sino que además también se quiere que se auto genere automáticamente por el SQL Server, empezando con el valor 1 e incrementado de 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 continuación:
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 botón guardar de la barra de herramientas estándar, y asígnele el nombre Productos. 13. Después de guardar la tabla, cierre la vi sta diseño. Ahora regresaremos al explorador de base de datos en donde se ve a la tabla productos recién creada. 14. Ahora podemos repetir el proceso para crear la tabla Clientes . Hacemos doble-clic donde dice “ Crear una tabla nueva en la Vista Diseño” . 15. En la siguiente tabla se muestra el diseño lógico de la tabla Clientes : Tabla: Clientes Campo
Ejemplo de datos
Tipo de datos
IDCliente (PK)
123456
Nombres
Raúl Rodrigo
Texto
15 caracteres
Apellidos
Alonso Ruiz
Texto
15 caracteres
DNI
20036989
Texto
8 caracteres
Domicilio
Jr. Cuzco 222
Texto
30 caracteres
Ciudad
Huancayo
Texto
20 caracteres
Teléfono
064-232425
Texto
12 caracteres
Email
ralonso31@hotm ail.com
Texto
50 caracteres
30
Numérico
Tamaño estimado de los datos Números positivos decimales
sin
Note que la mayoría 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 número fijo de caracteres y en estos casos el tipo char es la mejor opción. 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 también establecerla como clave primaria. 17. Guardamos el archivo con el botón guardar de la barra de herramientas estándar 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 Diseño” . 19. En la siguiente tabla se muestra el diseño lógico de la tabla Pedidos: Tabla: Pedidos Campo
IDPedido (PK) Fecha Pedido IDCliente (FK)
Ejemplo de datos 1000
de 30/08/2003 123456
Tipo de datos
Tamaño estimado de los datos
Numérico
Números positivos sin decimales
Fecha
Una fecha válida
Numérico
Números positivos sin decimales
31
Fecha de 31/08/2003 Entrega
Fecha
Una fecha válida
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 también como Clave primaria. 21. Guardamos esta tabla como Pedidos, pero esta vez no cerramos el diseñador porque todavía nos falta un detalle. 22. Si vemos el diseño lógico de la tabla Pedidos nos daremos cuenta de que el campo IDCliente es una clave foránea (FK) relacionada con la clave primaria de la tabla Clientes. Para esto nos vamos al menú Ver | Relaciones, y aparece el siguiente cuadro de diálogo:
32
23. Hacemos clic sobre el botón New y notaremos que automáticamente asume que queremos crear una relación con la tabla Clientes, tal como se muestra a continuación:
33
La opción Check existing data on creation significa que la relación será verificada cuando se agrege un registro nuevo, y si algún registro no tiene la apropiada relación, se mostrará un error. Eso significa que no podríamos agregar un pedido sin un cliente existente en la tabla Clientes . Estableciendo la opción Enforce relationship for replication, la relación se mantendrá si los datos son replicados a otro servidor. Si marcamos la opción Enforce relationship for INSERTs and UPDATEs, significa que al insertar o actualizar un registro se verifica que este exista además en la tabla clientes, de lo contrario, no se podrá realizar los cambios.
34
24. Este cuadro de diálogo automáticamente 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 diálogo sea un tanto inteligente sino que selecciona alfabéticamente 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 relación como se muestra a continuación:
Esto crea la relación que queremos entre dos tablas. Eso es todo lo que se tiene que hacer para crear una relación con una clave Foránea.
35
25. Mientras esta ventana aún se encuentra echemos un vistazo a la ficha Indexes/Keys como ha creado automáticamente un índice Clustered al momento de establecer una clave para la tabla.
abierta, para ver de tipo primaria
26. Ahora cerramos la ventana de propiedades y la ventana del diseñador de tablas para retornar 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 Diseño” . 28. En la siguiente tabla se muestra el diseño lógico de la tabla Detalles: Tabla: Detalles Campo
Ejemplo de datos
Tipo de datos
Tamaño estimado de los datos
IDPedido (PK)
1000
Numérico
Números positivos sin decimales
IDProducto (PK)
12345
Numérico
Números positivos sin decimales
Precio
23.25
Monetario
Cantidad
2
Numérico
Un máximo de 99
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 más que suficiente. Además también los campos IDPedido e IDProducto no soportan valores nulos. 29. En este caso, vamos a especificar que la combinación de los campos IDPedido e IDProducto formarán la clave primaria. Esto quiere decir que la combinación de estos dos datos harán un único identificador de registro. Sin
37
embargo estos no serán 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. Después de esto, el gráfico 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 aún. 32. Los campos IDPedido e IDProducto son las claves primarias de esta tabla, pero también son claves foráneas de las tablas Pedidos y Productos respectivamente. Entonces nos vamos al menú Ver | Relaciones y hacemos clic sobre el botón 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 foránea relacionada al campo IDPedido de la tabla Pedidos. 34. Note que cuando cambiamos la clave primaria automáticamente la lista Foreing key table cambia a Detalles como se ve a continuación:
38
35. Ahora seleccionamos IDPedido de la tabla Pedidos como clave primaria y luego IDPedido de la tabla Detalles como clave foránea, como se ve a continuación:
39
36. Esto crea la relación con la tabla Pedidos, ahora debemos crear la relación con la tabla Productos. Para eso, hacemos clic en el botón Nuevo. 37. Ahora cambiamos cambiamos a la tabla Productos como tabla primaria y la tabla Detalles como foránea con el campo IDProducto en ambos casos. De esta manera tendríamos la relación con la tabla Productos también. 38. Para ver la lista de las relaciones existentes en la tabla relationship: 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 diseñador 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í también. Note lo que sucede cuando trate de agregar un registro cuyo IDCliente no exista en la tabla Clientes (la relación fuerza a que haya una integridad referencial en ambas tablas). Luego llene algunos registros con datos válidos. 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 también. Además 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 básicos de la implementación de una base de datos en el SQL Server, podemos empezar a trabajar con una base de datos más compleja que usaremos para la mayoría 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 más compleja ya que contiene tablas adicionales y está diseñada para cubrir las necesidades de una empresa ficticia llamada Northwind. En la siguiente sección, veremos como usar el Upsizing Wizard (asistente de migración) para convertir la base de datos Northwind de Access a SQL Server. Durante este proceso, el asistente automáticamente crea un nuevo proyecto de Access por nosotros para la administración 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 sección, vamos a convertir una base de datos existente en Access, la base de datos Northwind que viene como ejemplo al instalar el producto. Una vez que se haya terminado con la conversión, 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. Práctica – Migración de la base de datos Northwind de Access al SQL Server 1. Abrimos Microsoft Access. 2. Seleccionamos el menú Archivo | Abrir o el botón Abrir de la barra de herramientas estándar. Buscamos el archivo norhtwind.mdb. El lugar común en donde lo puede encontrar es c:\archivos de programa\Microsoft Office\Samples, dependiendo de la versión o idioma del programa y del sistema operativo. En todo caso otra forma es buscarlo a través de la herramienta buscar de Windows. 3. Cerramos la pantalla de presentación de la aplicación Northwind de manera que pasemos a la ventana principal del proyecto. 4. Desde el menú Herramientas, seleccionamos Utilidades de Base de Datos | Asistente de Migración 5. Se mostrará el asistente 6. Seleccionamos la opción Create new database (que por defecto aparecerá marcada), y hacemos clic sobre el botón Siguiente de manera que podamos crear una nueva base de datos.
43
7. Rellenamos la información 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 botón 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 continuación 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 aplicación existente o crear una nueva aplicación cliente/servidor. Sin embargo dejaremos las opciones por defecto 11. Esta es la última pantalla del asistente en donde hacemos clic al botón Finalizar 12. Luego, se inicia la conversión de la base de datos. Veremos una barra de progreso indicando algunos detalles del proceso 13. Si ocurre algún error este será mostrado por un mensaje detallando la causa del mismo. Sin embargo continúa con la siguiente tabla u objeto de base de datos 14. Inmediatamente después de terminar con la migración se muestra un reporte resumiendo los detalles del proceso. Este reporte consta de aproximadamente 19 páginas y podemos revisarla detalladamente para revisar su contenido.
46
15. Después de mostrar todos los detalles de la conversión 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. Más 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 automáticamente. ¡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 detrás de la arquitectura. Las tablas se visualizan igual que antes pero ahora los datos están almacenados físicamente el SQL Server.
47
CAPITULO II TRABAJANDO CON LA BASE DE DATOS
48
Acceso a Datos con ADO.NET En esta sección veremos ADO.NET y sus clases más importantes
¿Qué es ADO.NET? ADO.NET es una tecnología 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 también ADO.NET puede coexistir con ADO. ADO.NET utiliza un modelo de acceso pensado para entornos desconectados. Esto quiere decir que la aplicación 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 orígenes 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 aplicación 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 modelo de Objetos ADO.NET El modelo de objetos ADO.NET provee una estructura de acceso a distintos orígenes de datos. Tiene 2 componentes principales: El Dataset y el proveedor de Datos .NET El Dataset: Esta formado por uno o más objetos
??
de tipo DataTables. Fue diseñado para acceder a datos independientemente del origen. Por ejemplo, un DataSet puede obtener datos de SQL Server, Oracle o de un archivo XML. Puede utilizar un objeto llamado DataView para ver los datos de distintas maneras. ??El proveedor de Datos .NET: Provee del enlace entre el Origen de Datos y el DataSet.
El cuadro muestra un ejemplo de Objetos provistos por distintos proveedores de datos .NET
50
Objetos de Proveedores de Datos .NET
Propósito
Objeto SQL Server 7.0 o 2000
Objeto para un origen OLEDB
Connection
Provee conectividad a un Origen de Datos
SqlConnectio n
OleDBCo nnection
Command
Provee acceso a comandos de Base de Datos como Select, Delete, Insert y Update
SqlCommand
OleDBCo mmand
DataReader
Provee acceso a datos de solo lectura
SqlDataRead er
OleDBDat aReader
DataAdapter
Utiliza el objeto Connection para enlazar un objeto DataSet con un Proveedor de Datos.También permite actualizar los Datos en el origen a partir de las modificaciones hechas en el DataSet
SqlDataAdap ter
OleDBDat aAdapter
51
Accediendo a Datos con ADO.NET Hay típicamente 3 pasos para acceder a los datos: Acceder al Origen de Datos y mostrar los datos en el formulario Web. ??Manipular los Datos. ??Retornar los datos para actualizar la base de datos. ??
Observe en el gráfico el escenario más común que se presenta cuando accede a los datos:
52
Los datos siempre viajan en formato XML, ASP.NET y ADO.NET transforman en forma automática el XML en un DataSet.
El objeto DataSet Un DataSet guarda información en un entorno desconectado. Después de que se establece una conexión 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 permite 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 conexión con el origen de datos. La conexión se reestablece recién cuando se necesita actualizar los cambios. Los métodos 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 información en uno o más objetos de tipo DataTables . Cada DataTable puede ser poblada con datos de un único origen. Se puede también establecer relaciones entre 2 objetos DataTables usando un objeto de tipo DataRelation.
Veamos como crear un nuevo DataSet: Dim ds As New DataSet
O también puede ser: Dim ds As New DataSet("DataSetVentas")
En el primer caso nuestro DataSet tendría un nombre por defecto asignado por el sistema. En el segundo caso estamos estableciendo un nombre específico. Los DataSets son un “almacén de información” al cual podemos acceder en cualquier momento.
54
El objeto DataTable Un DataSet contiene una colección de tablas a las cuales hace referencia a través de su propiedad Tables. Cada tabla individual residente en memoria, es llamada DataTable , y podrían haber cero o más tabla en la colección. Los DataTable contienen filas de datos, y cada fila está formada por columnas. Podemos crear continuación:
un
DataTable
como
se
muestra
a
Dim tabla As New DataTable
O especificando el nombre deseado: Dim tabla As New DataTable(“TablaClientes”)
Ahora podríamos agregar una tabla a un DataSet con el método 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 podríamos hacerlo mediante su nombre o su índice: ds.Tables(“tablaCliente”) ó ds.Tables(0)
Ahora podríamos agregar una tabla a un DataSet con el método Add de la propiedad Tables del DataSet:
El objeto Conexión Abre una conexión sobre un origen de datos. Podemos usar como se explicó anteriormente en este mismo capítulo el OleDbConnection SqlConnection objeto o el (dependiendo a que origen de datos nos queremos conectar). Para el proveedor OleDB indicamos los siguientes argumentos en la cadena de conexión: Provider , Data Source (o Server), User ID y Password. Para el proveedor SQL usamos
55
los mismos argumentos a excepción del Provider , ya que en este caso siempre será SQL. Veamos el siguiente ejemplo que crea una conexión 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 aplicación 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
Función
SelectCommand
Obtiene registros de un origen de Datos
InsertCommand
Inserta registro origen de datos
UpdateCommand
Modifica registros en un origen de datos
DeleteCommand
Borra registros origen de datos
56
en
en
un
un
El modelo de objetos del DataAdapter En la imagen siguiente podemos ver como el DataAdapter hace de nexo entre una Base de Datos y el DataSet . El DataReader permite ver de distintas maneras los datos seleccionados de la Base de Datos. También se observa como el DataAdapter permite hacer las operaciones más comunes en una Base de Datos como por ejemplo, Seleccionar, Modificar, Borrar e Insertar elementos.
Los métodos más usuales del DataAdapter son Fil y Update. El método Fill llena un DataSet con la información especificada, veamos el siguiente ejemplo: Dim ds As New DataSet Dim da As New SqlDataAdapter da.Fil(ds)
El método Update permite actualizar los datos modificados en el DataSet: da.Update(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 continuación.
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 más rápidamente a los datos. El costo de esto es que puede ser recorrido únicamente hacia adelante y sus datos no pueden ser modificados Además la conexión al origen de datos debe hacerse en forma explícita. Veamos un ejemplo: 'Se crea la conexión Dim conexion As New _ SqlConnection("server=localhost; user id=sa; password=; database=NorthwindSQL") conexion.Open() 'se crea un objeto de tipo command DimcmdDoctoresAs NewSqlCommand("select* fromCustomers",conexion) 'se declara crea un objeto de tipo dataReader DimdrAs SqlDataReader 'el resultado de la ejecución 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 página web Response.Write( dr("CustomerID") + " " + dr("CompanyName") ) Loop dr.Close()'Cerramos el DataReader conexion.Close() 'Cerramos la conexión
58
DataSets vs. DataReaders DataSet Acceso a datos Lectura/Escritura
DataReader de Lectura únicamente
Puede incluir varias tablas y distintos orígenes de datos
Basado en una sola sentencia SQL de una sola base de datos
Modelo desconectado
Modelo conectado
Se puede asociar a muchos controles
Se puede asociar a un solo control
Se puede recorrer los datos hacia delante y hacia atrás
Únicamente hacia delante
Acceso más lento
Acceso más rápido
Sportado por la herramientas de Visual Studio .NET
Codificado manualmente
El concepto de colección Recordemos que un arreglo (array) es un conjunto de elementos del mismo tipo. Una colección es un conjunto de elementos de cualquier tipo. Sus elementos son accedidos mediante un índice entero. En ADO.NET el primer elemento de una colección tiene índice 0. Ejemplos de colecciones en ADO.NET son: DataSet: Es una colección de DataTables ??DataTable: Es una colección de DataRow ??DataRow: Es una colección de DataColumn ??
59
¿Qué es y cómo se usa un objeto DataView? Un objeto DataView permite mostrar un objeto DataTable bajo distintos parámetros. Es decir permite mostrar un subconjunto de los datos de un DataTable. Por ejemplo, los datos se pueden ordenar y filtrar. El objeto DataView luego puede ser asociado a un control. Ejemplos: La propiedad DefaultView devuelve la vista predeterminada de una tabla Dim dv As DataView = ds.Tables(“TablaClientes”).DefaultView
Configurando una vista distinta de un objeto DataTable Dim dv as New DataView(ds.Tables(“TablaClientes”)) dv.RowFilter = “CustomerID=’Wolza’”
Ejemplo completo de uso de un DataSet El los datos de un DataSet se cargan partir de objetos DataTables. Primero se debe declarar un objeto DataSet y luego se lo carga con los datos obtenidos a partir de algún objeto DataAdapter. 'el siguiente código crea un DataSet y lo carga con Datos Dim ds As New DataSet da.fill (ds, "Customers") 'para acceder a un objeto DataTable dentro de un DataAdapter 'debe usar el siguiente código ds.Tables ("Customers") 'para acceder al valor de un columna en un objeto DataTable use el código ds.Tables("Customers").Rows(x).Item("CompanyName")
60