módulo_12_acceso a base de datos desde con asp

125
ACCESO A DATOS DESDE UNA PÁGINA ASP.NET © élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.

Upload: pablo-alvarez

Post on 24-Jul-2015

241 views

Category:

Documents


16 download

DESCRIPTION

Acceso a datos desde una página ASP.Net, Accceso a datos en modo desconectado, Vinculación de controles Web a datos, Manipulación de documentos XML en aplicaciones .NET, Base de datos en la Web, Introducción al comercio electrónico en la Web, Prácticas.

TRANSCRIPT

Page 1: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOSDESDE UNA PÁGINA

ASP.NET

© élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.

Page 2: Módulo_12_Acceso a base de datos desde con ASP

ÍNDICE

ACCESO A DATOS DESDE UNA PÁGINA ASP.NET

1. Acceso a datos desde una página ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3

2. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13

Page 3: Módulo_12_Acceso a base de datos desde con ASP

1. Acceso a datos desde una página ASP.NET

Active Server Pages

Microsoft usó Active Server Pages en diciembre de 1996. Es parte del InternetInformation Server (IIS) desde la versión 3.0 .Permite el uso de diferentesscripts y componentes en conjunto con el tradicional HTML para mostrarpáginas generadas dinámicamente. Según Microsoft: "Las Active Server Pagesson un ambiente de aplicación abierto y gratuito en el que se puede combinarcódigo HTML, scripts y componentes ActiveX del servidor para crearsoluciones dinámicas y poderosas para la Web".

Microsoft comenzó a investigar (IIS 4.0 en el 1997) las posibilidades para unnuevo modelo de aplicaciones Web que pudiera resolver temas sobre ASP,tales como: la separación de la presentación, el contenido y ser capaz deescribir código sin impurezas.

El desarrollo de XSP fue hecho con Java, pero al tiempo se construyó unanueva plataforma sobre el Common Languaje Runtime (CLR), pues destaca enel que está orientado a objetos, tiene recolección de basura. Guthrie indicóel riesgo, pues CLR estaba en desarrollo y a ello se puso el primer equipo deMicrosoft de XSP.

El diseño inicial fue implementado en el curso de dos meses por Anders y Guthrie, y Guthrie codificó losprototipos iníciales durante las celebraciones navideñas de 1997.

Active Server Pages y su sucesor

XSP fue desarrollado en C#, fue renombrado a ASP+, y se vio como el sucesor de Active Server Pages.

La primera beta de ASP+ se realizó en el Microsoft's Professional Developers Conference (PDC) (11-07-2000)en Florida.

ACCESO A DATOS DESDE UNA PÁGINA ASP.NET

3

Page 4: Módulo_12_Acceso a base de datos desde con ASP

ASP.NET

Se cambió el nombre de ASP+ a ASP.NET ( a mediados del 2000).

- Introduce los "server controls", que permiten a modo de etiquetas HTML tener controles manejadospor el servidor que identifican el navegador utilizado, adaptándose para cada explorador. Tareasarduas como validar datos se convierte en algo sencillo.

- Lleva integrado C#, VB.NET y J#, pero se puede utilizar otro lenguaje.

Existe independencia de la herramienta de desarrollo. Destaca la biblioteca de clases que lleva incorporada,simplificando o en su caso eliminando, mails, subir ficheros u operaciones con gráficos.

El precio que hay que pagar por utilizar Visual Basic es una menor velocidad o eficiencia en las aplicaciones.Visual Basic es un lenguaje de programación visual, también llamado lenguaje de cuarta generación.

Capacidades de ASP.NET

El código es compilado para ser ejecutado en el CLR. Se puede tener en elservidor pre compilado o dejar que el servidor lo compile la primera vez quelo ejecute. El resultado una mayor velocidad que las páginas ASP.

El uso adecuado de la caché incorporada, aumenta el rendimiento y laescalabilidad de la aplicación. Se pueden cachear desde páginas completasa partes completas, pasando por conjuntos de datos extraídos de la base dedatos.

ASP.NET

ASP.NET es capaz de detectar perdidas de memoria, problemas con bloqueos y protección ante caídas,detectar aplicaciones Web que pierden memoria, arrancando otro proceso con una nueva instancia de laaplicación para cerrar la que pierde memoria liberando así la memoria perdida.

ASP.NET está preparado para poder tener granjas de servidores Web para sitios con alto volumen de tráficoy repartir la carga entre distintos servidores.

ACCESO A DATOS DESDE UNA PÁGINA ASP.NET

4

Page 5: Módulo_12_Acceso a base de datos desde con ASP

Secuencia de ASP.NET

<%@ Page language="VB"%><%@ Import Namespace="System.data.oledb" %><script runat="server">Sub Nombre_change(sender as object, e as EventArgs)Mensaje.text = "Buenos días " + Nombre.textEnd sub</script><html><body><font face="verdana" size=2>Esta es una página de ejemplo</font><br><br><form runat="server">Tu nombre: <asp:TextBox id="Nombre" OnTextChanged="Nombre_change"

runat="server" autopostback="true"/><asp:label id="Mensaje" runat="server" /></form></body></html>

Características de las páginas ASP.NET

Las páginas de ASP.NET, (llamadas también formularios web - "web forms"-),son el principal medio de construcción para el desarrollo de aplicacionesweb.

Los formularios web están contenidos en archivos con una extensión ASPX.Estos archivos contienen etiquetas HTML o XHTML estático, y tambiénetiquetas, definiendo Controles Web (CW) que se procesan del lado delservidor y Controles de Usuario (CU) donde los desarrolladores colocan todoel código estático y dinámico requerido por la página web.

El código dinámico que se ejecuta en el servidor puede ser colocado en una página dentro de un bloque <%-- código dinámico -- %> que es parecido a otras tecnologías de desarrollo como PHP, JSP y ASP, pero esto sedesaconseja excepto para propósitos de enlace de datos, pues requiere más llamadas.

ACCESO A DATOS DESDE UNA PÁGINA ASP.NET

5

Page 6: Módulo_12_Acceso a base de datos desde con ASP

Formulario web de ejemplo

<%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"> protected void Page_Load(object sender, EventArgs e) {

Label1.Text = DateTime.Now.ToLongDateString(); }

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

<head runat="server"> <title>Página de Ejemplo</title>

</head><body>

<form id="form1" runat="server"> <div>

<asp:Label runat="server" id="Label1" /></div> </form>

</body></html>

El modelo code-behind

Microsoft recomienda para programación dinámica el modelo code-behind, o de respaldo, que coloca elcódigo en un archivo separado o en una etiqueta de script especialmente diseñada.

Los nombres de los archivos code-behind están basados en el nombre del archivo ASPX tales comoMiPagina.aspx.cs o MiPagina.aspx.vb (esta práctica se realiza automáticamente en Microsoft Visual Studio yotras interfaces de desarrollo). El desarrollador escribe el código correspondiente a diferentes eventos (cargade la página, click en un control, etc).

ACCESO A DATOS DESDE UNA PÁGINA ASP.NET

6

Page 7: Módulo_12_Acceso a base de datos desde con ASP

Ejemplo

El modelo code-behind de ASP.NET marca la separación del ASP clásico yalienta a los desarrolladores a construir aplicaciones con la idea depresentación y contenido separados. Esto permite a un diseñador web, porejemplo, enfocarse en la creación del diseño con menos posibilidades dealterar el código de programación mientras lo hace.

<%@ Page Language="C#" CodeFile="EjemploCodeBehind.aspx.cs" Inherits="SitioWeb.EjemploCodeBehind“AutoEventWireup="true" %>

Secuencia del modelo code-behind

La etiqueta superior es colocada al inicio del archivo ASPX. La propiedad CodeFile de la directiva @ Pageespecifica qué archivo (.cs o .vb) contiene el código code-behind mientras que la propiedad Inheritsespecifica la clase de la cual deriva la página.

En este ejemplo, la directiva @ Page está incluida en EjemploCodeBehind.aspx y el archivoEjemploCodeBehind.aspx.cs contendrá el código para esta página:

using System; namespace SitioWeb{

public partial class EjemploCodeBehind: System.Web.UI.Page {protected void Page_Load(object sender, EventArgs e){ } }

}

El método Page_Load() será llamado cada vez que la página ASPX sea solicitada al servidor. El programadorpuede implementar manejadores de eventos en varias etapas del proceso de ejecución de la página.

ACCESO A DATOS DESDE UNA PÁGINA ASP.NET

7

Page 8: Módulo_12_Acceso a base de datos desde con ASP

Controles de usuario

Se crean componentes reutilizables a través de la creación de Controles deUsuario (User Controls).

Un control de usuario sigue la misma estructura que un formulario web,excepto que los controles derivan de la clase System.Web.UI.UserControl, yson almacenados en archivos ASCX. Como los archivos ASPX, un ASCX contieneetiquetas HTML o XHTML, además de etiquetas para definir controles web yotros controles de usuario.

Los programadores pueden agregar sus propias propiedades y métodos, y manejadores de eventos. Unmecanismo de eventos en burbuja proporciona la capacidad de pasar un evento disparado por un control deusuario a la página que lo contiene.

Componentes de una aplicación

Administración del estado Las aplicaciones ASP.NET están en un servidor web y se tiene acceso a ellas mediante el protocolo sin estadoHTTP, que no guarda ninguna información sobre conexiones anteriores. Así, si la aplicación requiereinteracción entre conexiones, tiene que implementar su propia administración del estado. ASP.NETproporciona varias maneras de administrar el estado de las aplicaciones ASP.NET.

Estado de la aplicación El estado de la aplicación (Application state) es una colección de variables definidas por el usuario que soncompartidas por todas las invocaciones de una aplicación ASP.NET. Estas son establecidas e inicializadascuando el evento Application_OnStart se dispara en la carga de la primera instancia de las aplicaciones yestán disponibles hasta que la última instancia termina. Las variables de estado de la aplicación sonidentificadas por nombres.

Estado de la sesión El estado de la sesión (Session state) es una colección de variables definidas por el usuario, las cualespersisten durante la sesión de un usuario. Estas variables son únicas para diferentes instancias de una sesiónde usuario, y son accedidas usando la colección Session.

ACCESO A DATOS DESDE UNA PÁGINA ASP.NET

8

Page 9: Módulo_12_Acceso a base de datos desde con ASP

Las variables de sesión pueden ser preparadas para ser automáticamente destruidas después de undeterminado tiempo de inactividad, incluso si la sesión no ha terminado. Del lado del cliente, una sesión deusuario es identificada por una cookie o codificando el ID de la sesión en la misma URL.

Tres modos de persistencia para variables de sesión

InProc Las variables de sesión son mantenidas dentro del proceso.Las variables sondestruidas cuando el proceso ASP.NET es reciclado o terminado.

StateServerASP.NET ejecuta un servicio de Windows separado, que mantiene las variables de estado. Como estaadministración de estado ocurre fuera del proceso, ASP.NET tiene un impacto negativo en el rendimiento,pero permite a múltiples instancias de ASP.NET compartir el mismo estado del servidor, permitiendo que unaaplicación ASP.NET pueda tener su carga balanceada y escalada en múltiples servidores. Como el servicio deadministración del estado se ejecuta independiente de ASP.NET, las variables pueden persistir a través de lasfinalizaciones del proceso ASP.NET.

SQLServer Las variables de estado son almacenadas en un servidor de base de datos, accesible, usando SQL. Las variablesde sesión pueden persistir a través de finalizaciones de procesos también en este modo.

Estado de la vista

El estado de la vista (View state) se refiere al mecanismo de administraciónde estado a nivel de página, que es utilizado por las paginas HTML generadaspor las aplicaciones ASP.NET para mantener el estado de los controles de losformularios web y los widgets.

El estado de los controles es codificado y mandado al servidor en cada envío del formulario en un campooculto conocido como __VIEWSTATE. El servidor envía de regreso las variables para que cuando la página searenderizada de nuevo, los controles vuelvan a su último estado. Del lado del servidor, la aplicación puedecambiar el estado de la vista, si los resultados del procesamiento actualizan el estado de cualquier control.El estado de los controles individuales son decodificados en el servidor, y están disponibles para su uso enASP.NET usando la colección ViewState.

ACCESO A DATOS DESDE UNA PÁGINA ASP.NET

9

Page 10: Módulo_12_Acceso a base de datos desde con ASP

Otros archivos

ACCESO A DATOS DESDE UNA PÁGINA ASP.NET

10

Page 11: Módulo_12_Acceso a base de datos desde con ASP

Estructura de directorios I

La estructura de directorios de ASP.NET puede determinarla el desarrollador. El sitio puede expandirse acualquier número de directorios.

App_BrowsersContiene archivos de definición específicos para navegadores.

App_Code Es un directorio para códigos. El servidor ASP.NET automáticamente compilara los archivos (y subdirectorios)en esta carpeta en un ensamblado que es accesible desde cualquier página del sitio. App_Code es usada paracódigo de acceso a datos, código de modelo o código de negocios. Cualquier manejador http especifico parael sitio e implementación de módulos y servicios web van este directorio. Como alternativa a utilizarApp_Code el desarrollador puede optar por proporcionar un ensamblado independiente con códigoprecompilado.

App_DataDirectorio por defecto para las base de datos, tales como archivos mdb de Microsoft Access y archivos mdfde Microsoft SQL Server. Este directorio es usualmente el único con permisos de escritura en la aplicación.

App_LocalResources Contiene archivos de recursos localizados para páginas individuales del sitio.

App_GlobalResources Contiene archivos resx con recursos localizados disponibles para cada página del sitio. Este es donde eldesarrollador ASP.NET típicamente almacenara mensajes que serán usados en más de una página.

App_Themes Usado para temas alternativos del sitio.

App_WebReferencesUsado para archivos de descubrimiento y archivos WSDL para referencias a servicios Web para ser consumidosen el sitio.

Bin Contiene código compilado (archivos .dll) para controles, componentes, y otro código que pueda serreferenciado por la aplicación. Cualquier clase representada por código en la carpeta Bin es automáticamentereferenciada en la aplicación.

ACCESO A DATOS DESDE UNA PÁGINA ASP.NET

11

Page 12: Módulo_12_Acceso a base de datos desde con ASP

ID: Obtiene o establece un identificador para una instancia determinada de la clase Page. (Invalida aControl..::.ID).

IdSeparator: Infraestructura. Obtiene el carácter utilizado para separar los identificadores de control alconstruir un identificador único para un control de una página.

IsAsync: Obtiene un valor que indica si la página se va a procesar de manera asincrónica.

IsCallback: Obtiene un valor que indica si la solicitud de la página es el resultado de una devolución dellamada.

IsChildControlStateCleared: Obtiene un valor que indica si los controles que se encuentran en este controltienen estado de control. (Se hereda de Control).

IsCrossPagePostBack: Obtiene un valor que indica si la página participa en una devolución de datos entrepáginas.

IsPostBack: Obtiene un valor que indica si la página se está cargando como respuesta a un valor devuelto porel cliente, o si es la primera vez que se carga y se obtiene acceso a la misma.

IsPostBackEventControlRegistered: Obtiene un valor que indica si se ha registrado el control de la páginaque realiza las devoluciones de datos.

IsReusable: Infraestructura. Obtiene un valor que indica si puede reutilizarse el objeto Page.

IsTrackingViewState: Obtiene un valor que indica si el control de servidor está guardando los cambiosrealizados en su estado de vista. (Se hereda de Control).

IsValid: Obtiene un valor que indica si la validación de la página ha sido correcta.

IsViewStateEnabled: Obtiene un valor que indica si el estado de vista está habilitado para este control. (Sehereda de Control).

Items: Obtiene una lista de objetos almacenados en el contexto de la página.

LCID: Infraestructura. Establece el identificador de configuración regional del objeto Thread asociado a lapágina.

LoadViewStateByID: Obtiene un valor que indica si el control participa en la carga de su estado devista mediante ID en lugar de índice. (Se hereda de Control).

ACCESO A DATOS DESDE UNA PÁGINA ASP.NET

12

Page 13: Módulo_12_Acceso a base de datos desde con ASP

2. Resumen

Has llegado al final de esta lección de formación que denominamos “Acceso a datos desde una páginaASP.NET”.

En esta lección hemos estudiado los siguientes contenidos:

ACCESO A DATOS DESDE UNA PÁGINA ASP.NET

13

Page 14: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO

DESCONECTADO

© élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.

Page 15: Módulo_12_Acceso a base de datos desde con ASP

ÍNDICE

ACCESO A DATOS EN MODO DESCONECTADO

1. Características del acceso a datos en modo desconectado. . . . . . . . . . . . . . . . . . . . . . . . . . .3

2. Creación de DataSets y DataTables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7

3. Recorrido y manipulación de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12

4. Actualización de un DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16

5. Relaciones entre tablas DataRelation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22

6. Filtrado de datos DataView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24

7. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28

Page 16: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO DESCONECTADO

3

1. Características del acceso a datos en modo desconectado

Objetivo y Estructura de la lección

1. Conocer las características del acceso a datos en modo desconectado.2. Conocer cómo es la creación de DataSets y DataTables.3. Conocer cómo es el recorrido y manipulación de datos.4. Conocer cómo se realiza la actualización de un DataSet.5. Conocer cuál es la relación entre tablas DataRelation.6. Conocer en qué consiste el filtrado de datos DataView.

Introducción

Como ya comentamos al principio de este tema sobre acceso a datos, este es el tipo de acceso más habitualcuando se ha de trabajar con los datos y efectuar modificaciones en la base de datos, ya que permite:

- Recuperar la información necesaria.

- Desconectarte de la base de datos, con lo que no se ocupa ancho de banda, recursos del servidor nise bloquea la base de datos.

- Trabajar en local con los datos recuperados.

- Volcar, finalmente, a la base de datos todos los cambios aportados.

Todo ello con los correspondientes controles y validaciones previas en cuantoa la situación de la información en la base de datos antes de efectuar lasinserciones, sustituciones o eliminaciones, para tener en cuenta todo lo quehayan podido hacer el resto de usuarios del sistema.

Page 17: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO DESCONECTADO

4

Modos de conexión

Ahora vamos a centrarnos en el apartado de DataAdapter y DataSet.

Programación tradicional

En la programación tradicional, se utilizaba la conexión permanente a la basede datos, principalmente por dos motivos.

El primero era que no se disponía de muchas más tecnologías para hacerlo. Siempre se podía uno inventarel sistema que actualmente implementan los propios gestores de bases de datos o el ADO.NET, pero era largoy tedioso y normalmente el esfuerzo no valía la pena.

El segundo motivo era que, normalmente, no hacía falta tener en cuenta losproblemas de bloqueos, ya que los usuarios entraban prácticamente de unoen uno, ni de ancho de banda, ya que no se accedía por comunicaciones, nicasi de rendimiento del sistema por estar estos casi dedicados a esa tarea.

Page 18: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO DESCONECTADO

5

Conexión a la base de datos

Hoy en día, en las empresas hay una enorme cantidad de empleadosaccediendo simultáneamente a las bases de datos, normalmente por algúnmedio de comunicación, al estar los sistemas descentralizados, cuanto menosen granjas de servidores, y al ser el rendimiento de los sistemas una cuestiónsiempre en el filo de la navaja, entre otras debido al enorme consumo derecursos que pueden llegar a implicar algunas de las operaciones actualmentedisponibles.

Por lo tanto, ya hace bastante tiempo que se han desarrollado, casi a la par que los actuales sistemas gestoresde bases de datos relacionales, unas herramientas que permiten que los usuarios realicen cuantas másoperaciones desconectados de la base de datos, mejor.

Conexión a la base de datos

Para ello se han implementado, en los motores de las bases de datos, unossistemas de marcado de registros para saber el momento exacto, a lacentésima de segundo, en el que se ha realizado el último cambio a losmismos. Con estas marcas de verificación, los sistemas de acceso a datos,como puede ser ADO.NET, tienen mucho más fácil la verificación de lasituación de la información.

Además de estas marcas, para toda aquella información sensible, se hanmontado unos sistemas de auditoria de cambios que reflejan qué hacambiado en cada operación de cambio y quién lo realizó. De esta forma, unregistro que figure como cambiado, puede llegar a ser actualizado por otroproceso, siempre que la información cambiada no sea la misma, lógicamente.

Sistemas ADO.NET

Pero para que todo esto funcione adecuadamente, los sistemas, como ADO.NET, deben recuperar no sólo losregistros solicitados por el proceso, sino también todo lo relativo a las relaciones entre tablas y restricciones,que son las limitaciones a adiciones o supresiones establecidas por las relaciones de dependencia con otrastablas o índices.

Page 19: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO DESCONECTADO

6

Estas metodologías desconectadas, permiten que los procesos trabajen conun conjunto coherente de datos proveniente, a veces, de distintos orígenesde datos, incluso información local o de origen XML. Todo esto serátransparente al proceso y al usuario, que utilizarán la información como untodo. Ya será tarea posterior de la implementación el efectuar lasactualizaciones coordinadas de todos los orígenes de datos.

Recuperación de información modo desconectado

Con ADO.NET la recuperación de la información se efectúa, normalmente, contra un DataSet como ya hemoscomentado, y esto permite:

Separar el código para el acceso y recuperación de los datos correspondiente a la presentación y a lamanipulación de los mismos.

Es decir:

- Podemos tener unos procesos específicamente encargados de la recuperación de la información,venga de donde venga y de la elaboración del DataSet.

- Después desarrollaremos otros procesos que se encargarán de la presentación de la misma al usuario,en función de su plataforma o dispositivo de acceso.

- Y, finalmente, tendremos otros procesos que serán los encargados de ejecutar, con esos datos, lasoperaciones que indique el usuario.

Recuperación de información modo desconectado

De esta forma, de la gestión de los accesos a los orígenes de datos y procesode carga y actualización de los datos, se encargará una parte que no tieneporqué tener nada que ver con el cómo accederá el usuario.

De la misma forma, los procesos que gestionen el aspecto visual de lasaplicaciones no tienen porqué conocer los algoritmos de cálculo concretosque se han de utilizar para efectuar alguna de las operaciones disponibles conlos datos.

De eso ya se encargarán los procesos específicos de negocio, los cuales coordinarán la gestión yejecución de los otros, en función de las necesidades y accesos producidos.

Page 20: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO DESCONECTADO

7

2. Creación de DataSets y DataTables

Introducción

Como ya hemos comentado, para la gestión desconectada de los datos,ADO.NET nos suministra los DataSet.

Vengan de donde vengan y sea cual sea la estructura que tengan en origen,se tiene la ventaja que:

Objetos específicamente diseñados para proveernos de una especie de copia fantasma de los datos, con laestructura que le indiquemos, para poder trabajar en local con ellos.

- Podemos construir en local un DataSet con información de distintos orígenes.

- Coordinarla y elaborarla adecuadamente.

- Y luego generar un esquema XML.

- Por ejemplo, para transmitirlo a otro sistema, compatible con XMLpara su recuperación y lectura.

Objetos de DataSet y DataTable

Dentro de nuestro DataSet dispondremos de unas colecciones de objetos que nos harán la vida más fácil, éstasson:

DataTableCollection Colección de objetos DataTable, que contendrán los datos.

DataRelationCollection Colección de objetos DataRelation que contendrá las relaciones entre las diferentes DataTables de nuestroDataSet.

Page 21: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO DESCONECTADO

8

Los objetos DataTable, a su vez, están compuestos por las siguientes colecciones:

DataRowCollection Colección de registros que componen la tabla.

DataColumnCollection Es la identificación de los datos que componen cada registro.

ConstraintCollection Son las posibles restricciones que se imponen a la hora de añadir o eliminar registros, por dependencia deotras tablas.

Creación de DataSet

Tanto los Dataset como los DataTable son independientes del proveedor de datos, por lo que no tendremosSqlDataSet, por ejemplo.

En cambio, los DataAdapter desde los que se rellenan éstos, sí que son específicos por proveedor, por lo quesí tendremos SqlDataAdapter.

Para crear un nuevo DataSet es tan sencillo como:

Siendo el valor entre comillas del New el nombre del DataSet.

En cambio para rellenar éste DataSet y crear sus correspondientes DataTable, vamos a necesitar crear antesun DataAdapter, específico para nuestro proveedor de datos y que sea el encargado de recuperar los datosdel mismo y suminístraselos al DataSet.

DataAdapter

DataAdapter, puede contener las propiedades: SelectCommand, InsertCommand, UpdateCommand,DeleteCommand, y TableMappings, los cuales son comandos específicos y especializados para recuperardatos, añadir nuevos registros, modificar los datos existentes, suprimir registros y la correlación de tablas ycolumnas del origen de datos, respectivamente.

Page 22: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO DESCONECTADO

9

El DataAdapter pasará los datos al DataSet mediante su método Fill, y lospasará hacia el origen de datos mediante su método Update.

Secuencia, carga y llenado del DataSet

La secuencia de creación, carga de datos y llenado del DataSet desde unDataAdapter sería, más o menos, como sigue:

a. Crear la conexión.b. Crear el DataAdapter.c. Añadir un TableMappings a la colección del DataAdapter.d. Crear el comando con su sentencia de lectura de datos.e. Asignarlo a la propiedad SelectCommand del DataAdapter.f. Abrir la conexión.g. Llamar al método Fill del DataAdapter, indicándole el DataSet de destino.h. Cerrar la conexión.

Como puedes comprobar, con este método, el tiempo que la conexión permanece abierta es mínimo y cuandola secuencia de operaciones previas es muy larga, esto empieza a revestir su importancia.

Ejemplo de cómo crear un DataSet

Como en otras ocasiones, vamos a ver un pequeño ejemplo de todo esto en acción.

Imports SystemImports System.DataImports System.Data.SqlClientImports System.TransactionsModule Module1

Dim connectionString As StringPublic Sub Main()

Aquí definimos la cadena de conexión.

connectionString = "Data Source=LG-TONY\SQLEXPRESS2008;Initial Catalog=AdventureWorks;IntegratedSecurity=SSPI;"

desconectado()End SubPublic Sub desconectado()

Using connection As New SqlConnection(connectionString)

Page 23: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO DESCONECTADO

10

Creamos el DataAdapter.

Dim ProductDA As SqlDataAdapter = New SqlDataAdapter()

Ejemplo de cómo crear un DataSet- Asignación de tabla.

Le asignamos la tabla de la que deseamos recuperar información.

ProductDA.TableMappings.Add("Table", "Production.Product")

Definimos el SelectCommand que vamos a utilizar. Como puedes comprobar, en este caso te he puesto ladefinición en una sola línea.

Dim ProductSC As SqlCommand = New SqlCommand("SELECT ProductID, Name,ProductModelID FROM Production.Product;", connection)

ProductSC.CommandType = CommandType.Text

Asignamos el comando recién creado al DataAdapter.

ProductDA.SelectCommand = ProductSC

Creamos el DataSet.

Dim DataSetPrueba As DataSet = New DataSet("Prueba")

Ejemplo de cómo crear un DataSet- Abre conexión

Se abre la conexión.

connection.Open()Console.WriteLine("Establecida la conexión")

Llenamos el DataSet.

ProductDA.Fill(DataSetPrueba)

Page 24: Módulo_12_Acceso a base de datos desde con ASP

Cerramos la conexión.

connection.Close()Console.WriteLine("Conexión cerrada")

Contamos cuántos registros se ha traído.

Dim cuenta As Integer = DataSetPrueba.Tables("Production.Product").Rows.Count()

Console.WriteLine("Ha leido: " & cuenta & _" registros de la base de datos para la tabla Product")

Como siempre, para que puedas leer lo escrito.

Console.ReadLine()End Using

End Sub

Ejemplo de cómo crear un DataSet- Término

Y, como siempre, pulsando F5…

ACCESO A DATOS EN MODO DESCONECTADO

11

Page 25: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO DESCONECTADO

12

3. Recorrido y manipulación de datos

Repaso registros vistos

Una vez visto cómo conectar a la base de datos y rellenar una tabla de un DataSet mediante un DataAdapter,habrá que ir un paso más allá y hacer algo con esos datos.

Lo primero será recorrer los registros leídos. Echa una ojeada al ejemplo.

Imports SystemImports System.DataImports System.Data.SqlClientImports System.TransactionsModule Module1

Dim connectionString As StringPublic Sub Main()

' Aquí definimos la cadena de conexión connectionString = "Data Source=LG-TONY\SQLEXPRESS2008;” & _

"Initial Catalog=AdventureWorks; " & _"Integrated Security=SSPI;"

desconectado()End SubPublic Sub desconectado()

Using connection As New SqlConnection(connectionString)' Creamos el DataAdapterDim ProductDA As SqlDataAdapter = New SqlDataAdapter()' Le asignamos la tabla de la que deseamos recuperar informaciónProductDA.TableMappings.Add("Table", "Production.Product")' Definimos el SelectCommand que vamos a utilizarDim sql1 As String = "SELECT ProductID, Name, & _

ProductModelID FROM Production.Product "Dim sql2 As String = "WHERE ProductModelID > 0;"Dim sql As String = sql1 & sql2Dim ProductSC As SqlCommand = New SqlCommand(sql, connection)ProductSC.CommandType = CommandType.Text' Asignamos el comando recién creado al DataAdapter

Page 26: Módulo_12_Acceso a base de datos desde con ASP

ProductDA.SelectCommand = ProductSC' Creamos el DataSetDim DataSetPrueba As DataSet = New DataSet("Prueba")' Se abre la conexiónconnection.Open()Console.WriteLine("Establecida la conexión")' Llenamos el DataSetProductDA.Fill(DataSetPrueba)' Cerramos la conexiónconnection.Close()Console.WriteLine("Conexión cerrada")' Contamos cuantos registros se ha traidoDim cuenta As Integer =

DataSetPrueba.Tables("Production.Product").Rows.Count()Console.WriteLine("Ha leido: " & cuenta & _

" registros de la base de datos para la tabla Product")' Pasamos a recorer los 10 primeros editando su ' informaciónDim i As Integer = 0Console.WriteLine("Ahora mostraremos el contenido de" &_

" los 10 primeros leídos")Console.WriteLine("ProductID" & vbTab & "Name" & _

vbTab & vbTab & vbTab & "ProductModelId")For Each fila As DataRow In

DataSetPrueba.Tables("Production.Product").Rows' Esta ñapa es para intentar cuadrar los campos en columnasIf (fila.Field(Of String)(1).Length() > 24) Then

Console.WriteLine(fila.Field(Of Integer)(0).ToString() & vbTab & _fila.Field(Of String)(1) & vbTab & _fila.Field(Of Integer)(2).ToString())

ElseConsole.WriteLine(fila.Field(Of Integer)(0).ToString() & vbTab & _

fila.Field(Of String)(1) & vbTab & vbTab & _fila.Field(Of Integer)(2).ToString())

End Ifi += 1

ACCESO A DATOS EN MODO DESCONECTADO

13

Page 27: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO DESCONECTADO

14

If (i >= 10) ThenExit For

End IfNext' Como siempre, para que puedas leer lo escritoConsole.ReadLine()

End UsingEnd Sub

End Module

Como ves, no ha funcionado del todo, hay un registro con el nombre demasiado corto y no queríamos metermás condiciones en el If.

Éste es uno de los usos más sencillos que puede haber.

Page 28: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO DESCONECTADO

15

Métodos para filtrar información

Para recorrer los datos de un DataTable de un DataSet no es preciso elForEach de toda la colección de Rows de la misma, hay otros métodos, menos“manuales” para hacerlo, aunque si lo que necesitas es pasar por todos losregistros, ésta es una estupenda herramienta.

Pero claro, no siempre nos interesa tratar todo lo que se haya traído el DataAdapter, a veces hay que filtrarla información de un modo que no se podía realizar con la sentencia Select del comando. Para eso disponemosde:

- El método Select del objeto DataTable el cual nos permite asimismo ordenar los resultados.- El método Find de la colección DataRowCollection para hallar registros por clave.

Aunque suele dar mejor rendimiento la utilización de un DataView (que veremos más adelante) para el temade filtros y ordenaciones sobre un DataTable que el uso de Select, pero dispones de ambas herramientas.

Método Select

El método Select, dispone de otra forma de seleccionar los registros del DataTable, mediante el filtro de lapropiedad DataViewRowState, que registra el estado de la fila con respecto a la situación inicial de la carga,con un amplio espectro de situaciones que nos permiten un sistema de filtrado diferente y muy potente.

Has de saber que el método Select utiliza 3 parámetros:

1. Por tipo de filtrado, con lo que se pueden combinar de la forma que se deseen, es decir, podemoshacer un filtro de registros, darles una ordenación especial y que se tengan en cuenta sólo aquellosque se hayan añadido, por ejemplo.

2. Un DataView, que es un objeto especializado en ordenar, filtrar, hacer búsquedas, editar y navegarpor los registros de un DataTable, especialmente orientado a su enlace con controles de formulariosWindows y Web de presentación de datos.

3. Métodos de AddNew y Delete que permiten la edición, con lo cuál facilita el trabajo con el contenidodel DataTable, sobre todo si operamos en él mediante un control de formulario, en el que tendremosla representación visual y la opción de actuar directamente sobre él o los registros que nosinteresen.

Page 29: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO DESCONECTADO

16

4. Actualización de un DataSet

Consideraciones en la actualización de datos

Una obviedad, pero que a veces se olvida, es que por mucho que lancemosoperaciones de actualización de datos de forma masiva, por ejemplo, lainserción de 10 registros o el borrado de media tabla o la actualización detodos los clientes que tengan un determinado código postal, todas estasoperaciones se realizan realmente fila a fila.

Es decir, cada operación trata, en un momento dado, un único DataRow de uno de los DataTable incluidos enel DataSet, que es por lo que este objeto tiene todas las propiedades y métodos necesarios para operar sobrelas filas de datos.

Por otra parte, en los DataSet se conservan siempre las distintas versiones decada fila de datos, es decir, tal y como se trajo de la base de datos, si hasufrido alguna modificación, si ha sido suprimida o si ha sido añadida alconjunto. Todo esto de cara a facilitar la posterior actualización de lainformación en la base de datos.

Añadir o eliminar un registro

¿Cómo añadir un registro?

- Crearemos un registro vacío del tipo del DataTable.

- Asignaremos valor a todos aquellos campos requeridos o que no tengan valor por defecto.

- Utilizaremos el método Add de la colección Rows del DataTable, o generaremos directamente unnuevo registro en el DataTable, mediante su método NewRow, e iremos asignando el valor a cada unode los campos del registro resultante.

- Ejecutaremos, finalmente, el método Add de la colección Rows del DataTable para incorporarla a lamisma.

Page 30: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO DESCONECTADO

17

¿Cómo eliminar un registro?

Para eliminar un registro tenemos dos posibilidades:

1. A través del Método Delete del DataRow podrás marcar el registro para su borrado posterior en labase de datos.

2. Y el Método Remove de la colección de Rows del DataTable, si lo que deseamos es suprimir el registrode datos locales.

Modificación de un registro

En ambos casos, antes de eliminar o suprimir el registro, deberemos deencontrarlo, es decir localizar el registro concreto y obtener un objetoDataRow para actuar sobre él.

Para ello podemos utilizar el método Select de DataTable indicando medianteuna condición SQL, los datos necesarios para hallar el registro o registros quenos interesen. Esta operación devuelve una matriz de filas, por lo quedeberemos de operar con índice sobre el resultado de la operación.

¿Cómo modificar un registro?

Para modificar registros deberemos, primero, efectuar lo mismo que para la eliminación, encontrar el registroo registros que deseamos cambiar.

Una vez cargados en la matriz de DataRows, ya podremos ir actuando individualmente sobre ellos.

Evidentemente, todas estas operaciones se efectuarán de esta forma cuando estemos trabajando desdecódigo, cuando veamos los enlaces a controles de formularios veremos que la mayoría de ellas quedanimplícitas en la gestión del control, con lo que no necesitaremos realizar prácticamente nada por nuestracuenta en el código.

Page 31: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO DESCONECTADO

18

Repercusión a la base de datos

Una vez vista la forma de operar con los datos contenidos en el DataSet, habrá que ver cómo se repercutena la base de datos.

Una forma fácil es utilizando el Método Update del DataAdapter, ya que así se replican directamente todoslos cambios tal cual a la base de datos, pero no ofrece un control fino sobre la forma de aplicarse estoscambios.

De primeras, se recorrerá todos los registros y uno por uno intentará aplicar los cambios producidos, si nohay cambios, no hará nada más.

Con el método anterior se ha perdido el tiempo de comprobación, sin embargo, se dispone del métodoGetChanges(), el cual devuelve directamente el conjunto de registros en los que se efectuó algún cambio,adición, modificación o eliminación. Con este método, de momento, ya estaremos tratando muchos menosregistros, lo cual redundará en el rendimiento del sistema.

Recuperación de los cambios efectuados

Otro control, es el de recuperar los cambios efectuados de forma ordenada, es decir:

- Recoger primero las adiciones y aplicarlas a la base de datos.- Recuperar sólo las eliminaciones y aplicarlas y, finalmente,- Recuperar las modificaciones efectuadas y realizarlas contra la base de datos.

Después de haber replicado los cambios en la base de datos, necesitamosconfirmarlos en el propio DataSet. Para hacerlo necesitamos emplear elMétodo AcceptChanges().

Éste dejará sólo las versiones finales de los registros, eliminará los borradosy dejará todo con la situación de recién cargado de la base de datos. Vienea ser equivalente a volver a cargarlo todo, pero sin tener que establecer unanueva conexión ni implicar tráfico de datos.

Parece muy pesado, pero en realidad son muy pocas líneas de código más, y dan a cambio un gran controlsobre lo que estemos efectuando.

Page 32: Módulo_12_Acceso a base de datos desde con ASP

Ejemplo

Imports SystemImports System.DataImports System.Data.SqlClientImports System.TransactionsModule Module1

Dim connectionString As StringPublic Sub Main()

' Aquí definimos la cadena de conexión connectionString = "Data Source=LG-TONY\SQLEXPRESS2008; " & _

"Initial Catalog=AdventureWorks;Integrated Security=SSPI;"adicion()

End SubPublic Sub adicion()

' Creamos el DataSetDim Datos As DataSet = New DataSet()Datos = CargarDatos()' Contamos cuantos registros se ha traidoDim cuenta As Integer = Datos.Tables("Production.Product").Rows.Count()Console.WriteLine("Ha leido: " & cuenta & _

" registros de la base de datos para la tabla Product")' Mostramos la tabla cargadaMostrar(Datos.Tables("Production.Product"), "Tabla original")' Cambiamos algún datoDatos.Tables("Production.Product").Rows(0)("Name") = "Primer registro"Datos.Tables("Production.Product").Rows(1)("name") = "Segundo registro"Mostrar(Datos.Tables("Production.Product").GetChanges(), "Cambios efectuados")' Añadimos un registro a la segunda vistaDim fila As DataRowfila = Datos.Tables("Production.Product").NewRowfila("ProductID") = 123fila("Name") = "Prueba de nuevo registro"fila("ProductModelID") = 33Datos.Tables("Production.Product").Rows.Add(fila)Mostrar(Datos.Tables("Production.Product").GetChanges(DataRowState.Added Or

DataRowState.Modified), "Registros añadidos o modificados")End SubPublic Function CargarDatos() As DataSet

ACCESO A DATOS EN MODO DESCONECTADO

19

Page 33: Módulo_12_Acceso a base de datos desde con ASP

' Creamos el DataSetDim Datos As DataSet = New DataSet("Prueba")Using connection As New SqlConnection(connectionString)

' Creamos el DataAdapterDim ProductDA As SqlDataAdapter = New SqlDataAdapter()' Le asignamos la tabla de la que deseamos recuperar informaciónProductDA.TableMappings.Add("Table", "Production.Product")' Definimos el SelectCommand que vamos a utilizarDim sql1 As String = "SELECT ProductID, Name, ProductModelID " & _

"FROM Production.Product "Dim sql2 As String = "WHERE ProductModelID > 0;"Dim sql As String = sql1 & sql2Dim ProductSC As SqlCommand = New SqlCommand(sql, connection)ProductSC.CommandType = CommandType.Text' Asignamos el comando recién creado al DataAdapterProductDA.SelectCommand = ProductSC' Se abre la conexiónconnection.Open()Console.WriteLine("Establecida la conexión")' Llenamos el DataSetProductDA.Fill(Datos)' Cerramos la conexiónconnection.Close()Console.WriteLine("Conexión cerrada")

End UsingReturn (Datos)

End FunctionPublic Sub Mostrar(ByVal Tabla As DataTable, ByVal Etiqueta As String)

Console.WriteLine("Ahora mostraremos el contenido de los 10 primeros "& _"registros de " & Etiqueta)

If Tabla.Rows.Count > 0 ThenDim i As Integer = 0Console.WriteLine("ProductID" & vbTab & "Name" & vbTab & vbTab & _

vbTab & "ProductModelId")For Each fila As DataRow In Tabla.Rows

If (fila.Field(Of String)(1).Length() > 24) ThenConsole.WriteLine(fila.Field(Of Integer)(0).ToString() & vbTab & _

fila.Field(Of String)(1) & vbTab & _fila.Field(Of Integer)(2).ToString())

ACCESO A DATOS EN MODO DESCONECTADO

20

Page 34: Módulo_12_Acceso a base de datos desde con ASP

ElseConsole.WriteLine(fila.Field(Of Integer)(0).ToString() & vbTab & _

fila.Field(Of String)(1) & vbTab & vbTab & _fila.Field(Of Integer)(2).ToString())

End Ifi += 1If (i >= 10) Then

Exit ForEnd If

NextElse

Console.WriteLine("No hay registros en " & Etiqueta)End IfConsole.ReadLine()

End SubPublic Sub Mostrar(ByVal Vista As DataView, ByVal Etiqueta As String)

Console.WriteLine("Ahora mostraremos el contenido de los 10 primeros "& _"registros de " & Etiqueta)

If Vista.Count > 0 ThenConsole.WriteLine("ProductID" & vbTab & "Name" & vbTab & "ProductModelId")For i As Integer = 0 To 10

Console.WriteLine(Vista(i).Row.Field(Of Integer)(0).ToString() & _ vbTab & Vista(i).Row.Field(Of String)(1) & vbTab & _

Vista(i).Row.Field(Of Integer)(2).ToString())If i >= Vista.Count - 1 Then

Exit ForEnd If

Next iElse

Console.WriteLine("No hay registros en " & Etiqueta)End IfConsole.ReadLine()

End SubEnd Module

ACCESO A DATOS EN MODO DESCONECTADO

21

Page 35: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO DESCONECTADO

22

5. Relaciones entre tablas DataRelation

Introducción

Normalmente entre las tablas de una base de datos hay unas relacionesestablecidas, basadas en las dependencias de clave entre ellas, es decir,normalmente en una tabla de pedidos, habrá una relación de dependenciacon el maestro de clientes, mediante el código de cliente y con el maestrode artículos, mediante el correspondiente código.

Este tipo de relaciones, normalmente, se establecen para que no pueda haber supresión de artículos oclientes si hay pedidos relacionados, ni adición de pedidos sin código de cliente o código de artículo.

Relaciones entre tablas

Lógicamente, este tipo de dependencias también han de controlarse en las tablas que compongan un DataSet,para evitar que los mismos problemas se puedan producir en la actualización de datos en el mismo y surjan,brutalmente, al ir a replicar los cambios en la base de datos.

Por lo tanto, todo DataSet dispone de la colección DataRelationCollection, en la que registrar lasdependencias de clave primaria/secundaria entre las distintas tablas que lo componen, mediante lascorrelaciones entre objetos DataColumn de dos DataTable, siempre y cuando el tipo de datos sea coincidente.

Además de esto, los objetos DataTable disponen de la colección ConstraintCollection, accesible mediante lapropiedad DataTnable.Constraints, en la que se registran las restricciones entre tablas, para determinar lasacciones a efectuar al agregar o suprimir registros, mediante las acciones asociadas a sus objetosUniqueConstraint y ForeignKeyConstraint.

Objetos y métodos en DataRelation

Objetos UniqueConstraintGarantizan que las claves son únicas, esto es, que no haya duplicados.

Objetos ForeignKeyConstraintGarantizan qué registro asociado a un código, existe en la tabla maestra y qué es lo que se ha de hacer coneste registro cuando el de la tabla maestra se elimine.

Page 36: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO DESCONECTADO

23

Para la operativa con estas restricciones debemos utilizar los métodos:

AddClear

Remove de ConstraintCollection.

También disponemos del método Contains para saber si una determinada restricción existe, antes de actuarcontra la tabla y provocar una excepción.

Page 37: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO DESCONECTADO

24

6. Filtrado de datos DataView

Ejemplo de uso de DataView

Como ya te he comentado, el DataView tiene mejor rendimiento a la hora deseleccionar registros o aplicar ordenaciones que los métodos de DataTable.

Vamos a ver un pequeño ejemplo de cómo se usa esto, aunque, de momento,seguimos en aplicación de consola.

Imports SystemImports System.DataImports System.Data.SqlClientImports System.TransactionsModule Module1

Dim connectionString As StringPublic Sub Main()

' Aquí definimos la cadena de conexión connectionString = "Data Source=LG-TONY\SQLEXPRESS2008; " & _

"Initial Catalog=AdventureWorks;Integrated Security=SSPI;"ConVista()

End SubPublic Sub ConVista()

' Creamos el DataSetDim Datos As DataSet = New DataSet()Datos = CargarDatos()' Contamos cuantos registros se ha traidoDim cuenta As Integer = Datos.Tables("Production.Product").Rows.Count()Console.WriteLine("Ha leido: " & cuenta & _

" registros de la base de datos para la tabla Product")' Mostramos la tabla cargadaMostrar(Datos.Tables("Production.Product"), "Tabla original")' Creamos dos DataView sobre la tabla de datosDim VistaUno As DataView = New DataView(Datos.Tables("Production.Product"))Dim VistaDos As DataView = New DataView(Datos.Tables("Production.Product"))' Cambiamos algún dato

Page 38: Módulo_12_Acceso a base de datos desde con ASP

Datos.Tables("Production.Product").Rows(0)("Name") = "Primer registro"Datos.Tables("Production.Product").Rows(1)("name") = "Segundo registro"' Mostramos, como antes, los 10 primerosMostrar(Datos.Tables("Production.Product"), "Tabla con modificaciones")' Le decimos a la primera vista que muestre sólo los registros modificadosVistaUno.RowStateFilter = DataViewRowState.ModifiedOriginal' Mostramos la vistaMostrar(VistaUno, "Vista de sólo modificados")' Añadimos un registro a la segunda vistaDim fila As DataRowViewfila = VistaDos.AddNew()fila("ProductID") = 12345fila("Name") = "Prueba de nuevo registro"fila("ProductModelID") = 33' En la segunda vista deseamos sólo los registros nuevos o modificadosVistaDos.RowStateFilter = DataViewRowState.ModifiedCurrent Or _

DataViewRowState.Added' Mostramos la vistaMostrar(VistaDos, "Vista de añadidos y modificados")

End SubPublic Function CargarDatos() As DataSet

' Creamos el DataSetDim Datos As DataSet = New DataSet("Prueba")Using connection As New SqlConnection(connectionString)

' Creamos el DataAdapterDim ProductDA As SqlDataAdapter = New SqlDataAdapter()' Le asignamos la tabla de la que deseamos recuperar informaciónProductDA.TableMappings.Add("Table", "Production.Product")' Definimos el SelectCommand que vamos a utilizarDim sql1 As String = "SELECT ProductID, Name, ProductModelID " & _

"FROM Production.Product "Dim sql2 As String = "WHERE ProductModelID > 0;"Dim sql As String = sql1 & sql2Dim ProductSC As SqlCommand = New SqlCommand(sql, connection)ProductSC.CommandType = CommandType.Text' Asignamos el comando recién creado al DataAdapter

ACCESO A DATOS EN MODO DESCONECTADO

25

Page 39: Módulo_12_Acceso a base de datos desde con ASP

ProductDA.SelectCommand = ProductSC' Se abre la conexiónconnection.Open()Console.WriteLine("Establecida la conexión")' Llenamos el DataSetProductDA.Fill(Datos)' Cerramos la conexiónconnection.Close()Console.WriteLine("Conexión cerrada")

End UsingReturn (Datos)

End FunctionPublic Sub Mostrar(ByVal Tabla As DataTable, ByVal Etiqueta As String)

Dim i As Integer = 0Console.WriteLine("Ahora mostraremos el contenido de los 10 primeros “ & _

"registros de " & Etiqueta)Console.WriteLine("ProductID" & vbTab & "Name" & vbTab & vbTab & _

vbTab & "ProductModelId")For Each fila As DataRow In Tabla.Rows

If (fila.Field(Of String)(1).Length() > 24) ThenConsole.WriteLine(fila.Field(Of Integer)(0).ToString() & vbTab & _

fila.Field(Of String)(1) & vbTab & _fila.Field(Of Integer)(2).ToString())

ElseConsole.WriteLine(fila.Field(Of Integer)(0).ToString() & vbTab & _

fila.Field(Of String)(1) & vbTab & vbTab & _fila.Field(Of Integer)(2).ToString())

End Ifi += 1If (i >= 10) Then

Exit ForEnd If

Next' Como siempre, para que puedas leer lo escritoConsole.ReadLine()

End Sub

ACCESO A DATOS EN MODO DESCONECTADO

26

Page 40: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO DESCONECTADO

27

Public Sub Mostrar(ByVal Vista As DataView, ByVal Etiqueta As String)Console.WriteLine("Ahora mostraremos el contenido de los 10 primeros “ & _

"registros de " & Etiqueta)Console.WriteLine("ProductID" & vbTab & "Name" & vbTab & vbTab & vbTab & _

"ProductModelId")For i As Integer = 0 To 10

If (Vista(i).Row.Field(Of String)(1).Length() > 24) ThenConsole.WriteLine(Vista(i).Row.Field(Of Integer)(0).ToString() & _

vbTab & Vista(i).Row.Field(Of String)(1) & vbTab & _Vista(i).Row.Field(Of Integer)(2).ToString())

ElseConsole.WriteLine(Vista(i).Row.Field(Of Integer)(0).ToString() & _

vbTab & Vista(i).Row.Field(Of String)(1) & vbTab & _vbTab & Vista(i).Row.Field(Of Integer)(2).ToString())

End IfIf i >= Vista.Count - 1 Then

Exit ForEnd If

Next i' Como siempre, para que puedas leer lo escritoConsole.ReadLine()

End SubEnd Module

Page 41: Módulo_12_Acceso a base de datos desde con ASP

ACCESO A DATOS EN MODO DESCONECTADO

28

7. Resumen

Has llegado al final de esta lección de formación que denominamos “Acceso a datos en modo desconectado”.En esta lección hemos estudiado los siguientes contenidos:

Page 42: Módulo_12_Acceso a base de datos desde con ASP

VINCULACIÓN DECONTROLES WEB A

DATOS

© élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.

Page 43: Módulo_12_Acceso a base de datos desde con ASP

ÍNDICE

VINCULACIÓN DE CONTROLES WEB A DATOS

1. Introducción a la vinculación de controles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3

2. Vinculación de controles tipo ListControl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5

3. El control DataGridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7

4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16

Page 44: Módulo_12_Acceso a base de datos desde con ASP

VINCULACIÓN DE CONTROLES WEB A DATOS

3

1. Introducción a la vinculación de controles.

Objetivo y Estructura de la lección

1- Conocer la vinculación de controles tipo ListControl.2- Conocer en qué consiste el control DataGridView,

Introducción

Todo lo que hemos estado viendo hasta ahora sobre el acceso a datos era,básicamente, para prepararte para el acceso a datos desde controles enformularios Windows, que es el uso que le daremos mayoritariamente.

Nuestra principal preocupación será la de saber elegir el control adecuado encada caso, para disponer de la funcionalidad requerida en lasespecificaciones, con el mínimo esfuerzo por nuestra parte.

Necesitaremos tener muy claro el esquema de la o las bases de datos de las que tengamos que recuperar losdatos, así como las dependencias funcionales entre las diferentes tablas, para poder planificaradecuadamente los DataSets y la forma de trabajar con ellos.

Para empezar, disponemos de una nueva herramienta, el Explorador de Servidores.

Permite visualizar, de modo gráfico, la lista de todos los servidores de bases de datos a los que tenemosacceso y, dentro de cada uno de ellos, cada una de las bases de datos. Un poco en la forma en que lo hacela consola de administración de SQL Server.

Desde ese interfaz tenemos totalmente fácil el agregar conexiones de datos a las soluciones, así como diseñarel modelo de datos que vayamos a necesitar, lo que implica los DataAdapters, los DataSets e incluso todos ycada uno de los DataTable, con todas las relaciones y restricciones existentes en la base de datos de origen.

Formulario BindingSource

También existe la posibilidad de agregar un acceso a origen de datos en elformulario (BindingSource), con lo que aparecerá un asistente para enlazara una conexión existente o crear una nueva, quedando disponible para serenlazado desde los controles.

Page 45: Módulo_12_Acceso a base de datos desde con ASP

Pero no esta limitado a lo que nos podamos traer de una base de datos, yaque desde los formularios Windows podemos definir acceso a datos de todotipo de orígenes, como pueden ser ficheros XML, otros controles o datosgenerados en tiempo de ejecución.

Enlace de datos

Una funcionalidad agregada en esta última versión de .NET Framework, y por ende del IDE de Visual Studio,es la posibilidad de enlazar a datos algo más que las propiedades de texto o relleno de los controles.

Ahora casi todas las propiedades de los controles son enlazables a datos, con lo que los colores de fondo oprimer plano, el tamaño de los controles, las imágenes contenidas en controles gráficos,… etc, se puedenenlazar con un origen de datos, con lo que se obtienen formularios realmente interactivos y ligadosdinámicamente a la información.

Esto permite generar el típico “Cuadro de Mando” para la dirección directamente en pantalla, con lasposibilidades de Drill-Down y Drill-Up que se derivan de ello, además de lo efectistas y aparentes que resultaneste tipo de aplicaciones.

Controles para formularios de Windows

Dentro de los controles para formularios de Windows para presentación pura de datos más habituales,podemos encontrar los siguientes:

ListControlSirve para presentar listas de datos en pantalla y que el usuario pueda realizar selecciones sobre ellos. Deesta clase, que no se puede utilizar directamente, es de la que heredan los controles ComboBox y ListBox.

DataGridViewSe utiliza para la presentación de la información en un formato tabular, similar a las hojas de cálculo tipoExcel.

VINCULACIÓN DE CONTROLES WEB A DATOS

4

Page 46: Módulo_12_Acceso a base de datos desde con ASP

VINCULACIÓN DE CONTROLES WEB A DATOS

5

2. Vinculación de controles tipo ListControl

Controles de tipo ListControl

Los controles de tipo ListControl son los utilizados para presentar una lista de datos al usuario para quepueda realizar una selección sobre ellos.

De esta clase, no instanciable, derivan los controles:

De esta clase, los miembros más importantes, en lo relacionado a datos, son:

DataSourceOrigen de los datos del control

SelectedValueValor atómico seleccionado

DisplayMemberColumna de datos que se mostrará en el control

ValueMemberColumna de datos que contiene el dato a almacenar del registro seleccionado

ListBox

El control ListBox, además de los miembros heredados ya enunciados disponede los siguientes de forma particular:

También dispone de un surtido de miembros para controlar el aspecto visual del control, de otros para elllenado del control con datos no enlazados y, finalmente, para efectuar búsquedas en la lista, mediantecódigo.

Page 47: Módulo_12_Acceso a base de datos desde con ASP

VINCULACIÓN DE CONTROLES WEB A DATOS

6

Existen tres colecciones importantes para manejar los datos contenidos:

ItemsTodos los elementos contenidos en el control.

SelectionItemsLos elementos seleccionados.

SelectedIndiceslos índices de los elementos seleccionados.

ComboBox

El control ComboBox, es el típico cuadro de edición/selección de Windows.Presenta un cuadro de texto para edición con la posibilidad de desplegar unListBox bajo él, con el que seleccionar el valor único con el que rellenar elcuadro de texto, el cuál puede no ser editable por el usuario, estandolimitado a seleccionar de la lista.

El comportamiento de presentación y edición del cuadro de texto se controla con la propiedadDropDownStyle.

Dispone de miembros para añadir registros al control y para realizar búsquedas dentro de la lista deelementos.

En cambio, en lugar de las colecciones de las que dispone el ListBox, este control, al ser de selección única,tiene los valores individuales SelectedItem y SelectedIndex, para contener el valor seleccionado de la lista.

De esta clase hereda la DataGridViewComboBoxEditingControl

Page 48: Módulo_12_Acceso a base de datos desde con ASP

VINCULACIÓN DE CONTROLES WEB A DATOS

7

3. El control DataGridView.

Presentación de datos

Como ya hemos comentado, esta clase se utiliza para la presentación dedatos en forma tabular, es decir en cuadrículas de filas y columnas.

Pueden ser de simple presentación o de edición de los datos, permitiendo insertar, modificar o eliminarregistros.

Se dispone de un amplio surtido de miembros para controlar el aspecto gráfico del control, hasta unos nivelesinsospechados.

Enlaces de controles

Un control DataGridView puede tener su enlace a datos a otro DataGridView. Ya hemos comentado que elenlace a datos permite enlazar con otros controles, pero en este caso es especialmente frecuente, ya quepermite la típica presentación de cabeceras y detalles, tan habitual en los programas empresariales.

Page 49: Módulo_12_Acceso a base de datos desde con ASP

VINCULACIÓN DE CONTROLES WEB A DATOS

8

También se puede presentar un DataGridView vacío y/o no enlazado a ningún origen de datos, con el quepoder generar los datos en local y disponer posteriormente de ellos como sea menester.

Acceso concreto a los datos contenidos en el control

Para el acceso concreto a los datos contenidos en el control, disponemos delos miembros:

Columns y RowsPara acceder a las columnas y filas de datos, respectivamente.

Items y Cells Se usan estas colecciones para acceder a celdas concretas del control.

DataSource y DataMember Debemos especificar estas dos propiedades cuando enlazamos con un origen de datos, para así poder indicarleal control de dónde ha de recuperar la información.

Cuando este control se enlaza a un origen de datos, normalmente, genera de forma automática las columnasen función de las que tenga el origen de datos, lo cual no impide que se añadan nuevas columnas por nuestraparte. Columnas para mostrar botones de acción o controles de selección o datos calculados, para lo cualviene muy bien la propiedad DataColumn.Expression, ya que nos permite calcular el valor de una celda apartir de otras con una expresión aritmética compleja.

Page 50: Módulo_12_Acceso a base de datos desde con ASP

VINCULACIÓN DE CONTROLES WEB A DATOS

9

Control DataGridView

En el modo enlazado a datos, el control DataGridView nos viene muy bien, ya que la mayoría de lafuncionalidad requerida para recuperar, presentar o actualizar los datos desde y hacia el origen de datos estáimplementado por el propio control, con lo cual nos deja las manos libres para dedicarnos a otros temas sintener que entrar en la tediosa codificación de la navegación y actualización de la información.

Incluso si el control es añadido al formulario en tiempo de ejecución mediante código, si se inicializanadecuadamente las correspondientes propiedades, el sistema implementará toda esta funcionalidad pornosotros.

Ejemplos de los tipos de enlaces

A continuación te mostramos un ejemplo de formulario, con los tres tipos de controles comentados, enlazadosa datos.

En este caso, lo primero es irnos al explorador de servidores y añadimos una nueva conexión, tal y como semuestra a continuación:

Page 51: Módulo_12_Acceso a base de datos desde con ASP

Y una vez aceptado el cuadro de diálogo anterior, dispondremos, de una vista del contenido de la base dedatos:

Diseño de formularios

Ahora nos vamos al diseño del formulario y añadimos un control ListBox, un ComboBox y un DataGridView,tal y como se muestra a continuación.

Evidentemente, en este punto, no tenemos prácticamente nada, excepto la propiedad DropDownStyle delComboBox cambiada a Simple, para ver la lista de ítems.

VINCULACIÓN DE CONTROLES WEB A DATOS

10

Page 52: Módulo_12_Acceso a base de datos desde con ASP

VINCULACIÓN DE CONTROLES WEB A DATOS

11

Creación de un nuevo Datasource

Ahora añadiremos un BindingSource y lo enlazaremos a la conexión antes definida mediante la creación deun nuevo DataSource para el proyecto, generado mediante el asistente, según te voy a ir mostrando:

Creación de un nuevo Datasource 2

1 2

Page 53: Módulo_12_Acceso a base de datos desde con ASP

3 4

5

VINCULACIÓN DE CONTROLES WEB A DATOS

12

Page 54: Módulo_12_Acceso a base de datos desde con ASP

VINCULACIÓN DE CONTROLES WEB A DATOS

13

Asistente de creación del nuevo DataSource completado

Así queda el formulario, una vez completado el asistente de creación del nuevo DataSource.

Ejemplos de los tipos de enlaces – Asignación de origen de datos

Ahora asignamos el origen de datos.

Asignación al ListBox.

Page 55: Módulo_12_Acceso a base de datos desde con ASP

Asignación al ComboBox Asignación al DataGridView

Lo único que hemos hecho, ha sido indicar el valor BibdingSource1 en la propiedad DataSource, si te fijasdetrás, el control ya tiene las columnas de la tabla preparadas.

Ejemplos de los tipos de enlaces - Resultado

¡He aquí el resultado!

VINCULACIÓN DE CONTROLES WEB A DATOS

14

Page 56: Módulo_12_Acceso a base de datos desde con ASP

VINCULACIÓN DE CONTROLES WEB A DATOS

15

Ejemplos de los tipos de enlaces – Añadir datos

Evidentemente, si queremos agregar la funcionalidad de añadir datos en alguno de los controles, seránecesario implementarlo y codificar todo lo que conlleva detrás.

Al estar todos los controles ligados al mismo miembro de datos del origen de datos, al seleccionar uno encualquiera de los controles, se posicionan los otros en el mismo registro.

Page 57: Módulo_12_Acceso a base de datos desde con ASP

VINCULACIÓN DE CONTROLES WEB A DATOS

16

4. Resumen

Has llegado al final de esta lección de formación que denominamos “Vinculación de controles Web a datos”.En esta lección hemos estudiado los siguientes contenidos:

Page 58: Módulo_12_Acceso a base de datos desde con ASP

MANIPULACIÓN DEDOCUMENTOS XML ENAPLICACIONES .NET

© élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.

Page 59: Módulo_12_Acceso a base de datos desde con ASP

Documentos XML con ADO.NET.

La mayoría de las aplicaciones escritas en Visual Basic y Visual C# giran en torno a la lectura y actualizaciónde información de bases de datos. Para permitir la integración de datos en aplicaciones distribuidas yescalables, Visual Studio .NET es compatible con una nueva generación de tecnología de acceso a datos:ADO.NET.

El problema es comunicar un programa o aplicación con una base de datos y más que comunicar se pretendeque el programa o aplicación realice una serie de procesos u operaciones con la base de datos o mejor auncon el conjunto de tablas que contiene una base de datos.

La primera nota a recordar es que una base de datos puede estar físicamente en el servidor y en algún fóldero directorio del disco duro de dicha maquina. Otra cosilla que debemos recordar es que así como existenservidores de paginas (Web Server), servidores de correo (Mail Server), servidores de ftp (ftp Server),...,también existen servidores de bases de datos (DataBase Server), los más comunes son el SqlServer deMicrosoft, Oracle, MySql, y muchos más, estos servidores también pueden crear, administrar y procesar unabase de datos.

El modo de comunicación entre nuestra aplicación y la base de datos implica que ambos manejen un lenguajede programación común, es decir no se puede mandar una instrucción en csharp .net, o en visual Basic .neto en Basic o pascal...o en cualquier otro lenguaje, a la base de datos y además esperar que esta última laentienda. Para entender esto, una razón muy sencilla es que la base de datos tendría que conocer ocomprender todos los lenguajes de programación, ahora dime, no sería más fácil que exista un lenguajecomún...?, entonces para resolver este problema de comunicación es que se usa un lenguaje común de basesde datos que tanto los lenguajes de programación existentes como las bases de datos entienden, estelenguaje común de bases de datos es el SQL (Structured Query Languaje) o lenguaje estructurado deconsultas.

ACCESO A DATOS EN WEB

2

Page 60: Módulo_12_Acceso a base de datos desde con ASP

La pregunta es ahora como mandamos las instrucciones SQL a la base de datos, la respuesta es mediante losOBJETOS ADO.NET, las cuales proporcionan acceso coherente a orígenes de datos como Microsoft SQL Server,así como a orígenes de datos expuestos mediante OLE DB y XML.

En la actualidad ADO .NET ya es parte del .NET Framework, esto quiere decir que es, de alguna manera, partedel sistema operativo y no más un redistribuible de 4 ó 5 MB que se necesita alojar junto al cliente o juntoal instalador de una aplicación. Esto significa que nosotros, como desarrolladores, estaremos enfocados másal acceco a datos y a la lógica para manipular estos datos, y no tendremos porqué precuparnos en cómo alos clientes la librería.

La mayoría de las aplicaciones necesitan algún mecanismo de acceso a datos. Si está creando una aplicaciónnueva, dispone de tres opciones excelentes para obtener acceso a los datos: ADO.NET, ADO y OLE DB. Sinecesita modificar el mecanismo de acceso a datos de una aplicación existente, debería seguir utilizando latecnología actual de acceso a datos de la aplicación por cuestiones de mantenimiento.

3

ACCESO A DATOS EN WEB

Page 61: Módulo_12_Acceso a base de datos desde con ASP

Si usted prevé que la aplicación va a tener un ciclo de vida largo, entonces debe considerar la posibilidad derediseñar la tecnología de acceso a datos de la aplicación y utilizar ADO.NET en aplicaciones administradaso ADO en aplicaciones nativas. A largo plazo, el uso de las tecnologías más modernas de acceso a datos reduceel tiempo de desarrollo, simplifica el código y proporciona un rendimiento excelente.

A continuación detallaré muchos conceptos importantes a cerca de ADO .NETAcceso a datos con 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. ADO.NET puede coexistir con ADO. También podemos decir que ADO.NET es un conjunto de clases que exponen servicios de acceso a datos alprogramador de .NET.

ADO.NET proporciona un conjunto variado de componentes para crear aplicaciones distribuidas de usocompartido de datos. Forma parte integral de .NET Framework, y proporciona acceso a datos relacionales,datos XML y datos de aplicaciones.

ADO.NET es compatible con diversas necesidades de programación, incluida la creación de clientes de basesde datos clientes y objetos empresariales de nivel medio utilizados por aplicaciones, herramientas, lenguajeso exploradores de Internet.

ADO.NET utiliza un modelo de acceso pensado para entornos desconectados. Esto quiere decir que laaplicación se conecta al origen de datos, hace lo que tiene que hacer, por ejemplo seleccionar registros, loscarga en memoria y se desconecta del origen de datos.

ADO.NET es un conjunto de clases que usted utiliza para acceder y manipular orígenes de datos como porejemplo, 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ónWeb.

Hay 3 espacios de nombres que se importará en un formulario Web o formulario windows si esta usandoADO.NET:

System.Data. System.Data.SqlClient. System.Data.OleDb.

4

ACCESO A DATOS EN WEB

Page 62: Módulo_12_Acceso a base de datos desde con ASP

El modelo de objetos ADO.NET provee una estructura de acceso a distintos orígenes de datos. Tiene 2componentes principales: El Dataset y el proveedor de Datos .NET

Espacios de nombres para datos en el .NET Framework

Entre los espacios de nombres de .NET Framework relativos a datos y XML se incluyen:

System.Data: consiste en las clases que constituyen la arquitectura ADO.NET, que es el método primario paratener acceso a los datos de las aplicaciones administradas. La arquitectura ADO.NET permite crearcomponentes que administran eficientemente datos procedentes de múltiples orígenes. ADO.NET tambiénproporciona las herramientas necesarias para solicitar, actualizar y reconciliar datos en aplicacionesdistribuidas.

System.Data.Common: contiene las clases que comparten los proveedores de datos .NET Framework. Dichosproveedores describen una colección de clases que se utiliza para obtener acceso a un origen de datos, comouna base de datos, en el espacio administrado.

System.Xml: clases que proporcionan funcionalidad basada en estándares para procesar código XML.

System.Data.OleDb: clases que componen el proveedor de datos de .NET Framework para orígenes de datoscompatibles con OLE DB. Estas clases permiten conectarse a un origen de datos OLE DB, ejecutar comandosen el origen y leer los resultados.

System.Data.SqlClient: clases que conforman el proveedor de datos de .NET Framework para SQL Server,que permite conectarse a un origen de datos SQL Server 7.0, ejecutar comandos y leer los resultados. Elespacio de nombres System.Data.SqlClient es similar al espacio de nombres System.Data.OleDb, perooptimizado para el acceso a SQL Server 7.0 y versiones posteriores.

System.Data.SqlTypes: proporciona clases para tipos de datos nativos de SQL Server. Estas clases ofrecenuna alternativa más segura y más rápida a otros tipos de datos.

System.Data.OleDb: clases que componen el proveedor de datos de .NET Framework para OLE DB. Estasclases permiten el acceso a orígenes de datos ODBC en el espacio administrado.

System.Data.OracleClient: clases que componen el proveedor de datos de .NET Framework para Oracle.Estas clases permiten el acceso a orígenes de datos Oracle en el espacio administrado.

5

ACCESO A DATOS EN WEB

Page 63: Módulo_12_Acceso a base de datos desde con ASP

EL PROVEEDOR DE DATOS .NET

Provee del enlace entre el Origen de Datos y el DataSet.

Un proveedor de datos de .NET Framework sirve para conectarse a una base de datos, ejecutar comandos yrecuperar resultados. Esos resultados se procesan directamente o se colocan en un DataSet de ADO.NET conel fin de exponerlos al usuario para un propósito específico, junto con datos de varios orígenes, o deutilizarlos de forma remota entre niveles. El diseño del proveedor de datos de .NET Framework hace que sealigero, de manera que cree un nivel mínimo entre el origen de datos y su código, con lo que aumenta elrendimiento sin sacrificar la funcionalidad.

Objetos provistos por distintos proveedores de datos .NET

Los objetos Connection, Command, DataReader y DataAdapter son los elementos fundamentales del modelode proveedor de datos de .NET Framework. En la tabla siguiente se describen estos objetos.

6

ACCESO A DATOS EN WEB

Page 64: Módulo_12_Acceso a base de datos desde con ASP

Los componentes ADO.NET que se ilustran anteriormente.

Componente u objetoConjunto de datos (DataSet, DataTable, DataColumm, DataRow, DataRelation, constraint)

Detalle Los conjuntos de datos almacenan datos en una memoria caché desconectada. La estructura de un conjuntode datos es similar a la de una base de datos relacional; expone un modelo jerárquico de tablas, filas ycolumnas. Además, contiene restricciones y relaciones definidas para el conjunto de datos.

7

ACCESO A DATOS EN WEB

Page 65: Módulo_12_Acceso a base de datos desde con ASP

Componente u objetoAdaptador de datos (OleDbDataAdapter,SqlDataAdapter, OdbcDataAdapter,OracleDataAdapter, SqlData-Reader,OleDbDataReader, OdbcDataReader,OracleDataReader)

DetalleLos adaptadores de datos son una parte integral de los proveedores administrados por ADO.NET, que son elconjunto de objetos que se utiliza para la comunicación entre un origen de datos y un conjunto de datos.Esto significa leer datos de una base de datos para un conjunto de datos y, a continuación, volver escribiren la base de datos los datos modificados del conjunto de datos. Sin embargo, un adaptador de datos puedetrasladar datos entre cualquier origen y un conjunto de datos. Por ejemplo, podría haber un adaptador quetrasladara datos entre un servidor Microsoft Exchange y un conjunto de datos.

Componente u objetoConexión de datos (SqlConnection,OleDbConnection, OdbcConnection,OracleConnection)

DetallePara trasladar datos entre un almacén de datos y una aplicación, en primer lugar deberá tener una conexióncon el almacén de datos.

Componente u objetoFormulario Windows Forms

DetalleWindows Forms es la nueva plataforma de desarrollo de aplicaciones para Microsoft Windows, basada en.NET Framework. Este marco de trabajo proporciona un conjunto de clases claro, orientado a objetos yampliable, que permite desarrollar complejas aplicaciones para Windows. Además, los formularios WindowsForms pueden actuar como interfaz de usuario local en una solución distribuida de varios niveles.

Componente u objetoPágina de Formulario Web Forms

DetalleLas páginas de formularios Web Forms pueden usarse para crear páginas Web programables que sirvan comointerfaz de usuario de las aplicaciones Web. Este tipo de páginas presenta la información al usuario encualquier explorador o dispositivo cliente e implementa lógica de aplicación mediante el código de la parteservidor. La salida de las páginas de formularios Web Forms puede contener casi cualquier lenguajecompatible con HTTP, incluidos HTML, XML, WML y ECMAScript (JScript, JavaScript).

8

ACCESO A DATOS EN WEB

Page 66: Módulo_12_Acceso a base de datos desde con ASP

Ahora trataremos algunos conceptos sobre la funcionalidad del DataSet, además veremos lo importante quees este objeto.

DATASETUn DataSet guarda información en un entorno desconectado. Después de que usted establece una conexióncon una Base de Datos entonces puede acceder a sus datos.

Practicamente un DataSet viene a ser una caché de memoria interna de datos recuperados de un origen dedatos, representa un componente fundamental de la arquitectura de ADO.NET. Así mismo un DataSet estácompuesto por una colección de objetos DataTable que se pueden relacionar entre ellos mediante objetosDataRelation. También se puede imponer la integridad de los datos de DataSet mediante los objetosUniqueConstraint y ForeignKeyConstraint.

El Dataset está formado por uno o más objetos de tipo DataTables. fue pensado para acceder a datosindependientemente del origen. Por ejemplo, un DataSet puede obtener datos de SQL Server, Oracle o de unarchivo XML. Puede utilizar un objeto llamada DataView para ver los datos de distintas maneras. Mientrasque los objetos DataTable contienen los datos, DataRelationCollection permite desplazarse por la jerarquíade la tabla. Las tablas están incluidas en un DataTableCollection al que se obtiene acceso a través de lapropiedad Tables. Al obtener acceso a los objetos DataTable, hay que tener en cuenta que éstos distinguenentre mayúsculas y minúsculas condicionalmente. Por ejemplo, si un objeto DataTable se denomina“mydatatable” y otro “Mydatatable”, se considerará que una cadena utilizada para buscar una de las tablasdistingue entre mayúsculas y minúsculas. Sin embargo, si existe “mydatatable” pero no existe “Mydatatable”,se considerará que la cadena de búsqueda no distingue entre mayúsculas y minúsculas. Para mejorcomprensión de la importancia del DataSet, vea el Mejorando el rendimiento de la aplicación trabajando enmodo desconectado en la cual se detalla de forma clara mediante un ejemplo cómo se obtiene beneficiosusando el DataSet.

Un DataSet puede leer y escribir datos y esquemas como documentos XML. Los datos y esquemas puedentransportarse, a continuación, a través de HTTP y cualquier aplicación puede utilizarlos en cualquierplataforma que sea compatible con XML. Los esquemas se pueden guardar como esquemas XML mediante elmétodo WriteXmlSchema, y tanto los esquemas como los datos se pueden guardar mediante el métodoWriteXml. Hay que utilizar el método ReadXml para leer un documento XML que incluya esquema y datos.

9

ACCESO A DATOS EN WEB

Page 67: Módulo_12_Acceso a base de datos desde con ASP

El DataSet es la principal forma de guardar datos cuando usted utiliza ADO.NET El DataSet le permite a ustedguardar datos que se obtuvieron de un origen de datos. Los datos en un DataSet pueden ser manipulados sinnecesidad que el formulario Web mantenga la conexión con el origen de datos. La conexión se reestablecerecién cuando usted necesita actualizar los cambios

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

Este ejemplo que detallaré a continuación te ayudará a comprender mejor los conceptos que expliquéanteriormente. La aplicación se basa en trabajar con una base de datos u origen de datos de maneradesconectada, donde para realizar determinadas operaciones en el origen de datos, procederemos de lasiguiente manera:

1) nos conectamos a la base de datos y mostramos los datos en el formulario

2)Manipulamos los Datos

3) finalmente retornamos los datos para actualizar la base de datos.

Por motivos de tiempo, la aplicación se limita a manejar una tabla(con 7 registros) dentro de una base dedatos. Manejaré una sóla tabla(sólo con fines de ilustrar el ejemplo, opcionalmente pueden usarse mástablas), la cual será previamente creada en la Base de Datos northwind ,luego realizaremos algunasoperaciones como por ejemplo insertar registros en la tabla, visualizarlos, actualizar los datos, eliminarregistros y modificarlos de acuerdo a la situación.

Algo a resaltar es que este tipo de acceso a la base de datos, es decir trabajar en modo conectado, puedeconsumir grande recursos sacrificando el rendimiento al mantener conexiones abiertas a la base de datos.Cada enfoque, modo conectado o desconectado, ofrece una serie de beneficios y desventajas. La eleccióndel enfoque depende en gran medida de las características de la arquitectura y las plataformas que vayan autilizarse para el intercambio de los datos.

Expongo el código de la aplicación, la cual voy detallando paso a paso, explicando los métodos usados ycuales son los resultados. Para entender este código se debe tener conocimientos previos respecto al manejode instrucciones Transact-SQL.

10

ACCESO A DATOS EN WEB

Page 68: Módulo_12_Acceso a base de datos desde con ASP

Código Completo

Imports System.DataImports System.Data.SqlClient

Module Module1Public Estado As New BooleanPublic Reader As SqlDataReader

Public conection As New SqlConnection(“data source=(local); integrated security=SSPI; initialcatalog=northwind”)End Module

Public Class Form1Inherits System.Windows.Forms.Form

Private Sub Btnsalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesBtnsalir.Click

Me.Close()End SubPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Try‘Nos conéctamos a la base de datos.conection.Open()‘Creamos la tabla.Dim comando As New SqlCommand(“create table vendedores(codigo int not null primary “ + _“ key identity, nombres varchar(25),apellidos varchar(25),dirección varchar(60),” + _“ e_civil char(1),sexo integer, sueldo numeric(10,2),retirado bit)“, conection)comando.ExecuteNonQuery()‘Confirmamos con un mensaje al cliente la creación de la tabla.MsgBox(“Tabla creada satisfactoriamente...”)‘Nos desconectamos de la base de datos.conection.Close()

Catch ex As Exception‘Si sucede alguna excepción, entonces nos desconectamos de todas ‘maneras de la base de datos.conection.Close()MsgBox(ex.Message)

End TryEnd Sub

11

ACCESO A DATOS EN WEB

Page 69: Módulo_12_Acceso a base de datos desde con ASP

Private Sub BtnRefrescar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _Handles BtnRefrescar.ClickTry

ListView1.Items.Clear()‘Nos conéctamos a la base de datos.conection.Open()‘Instanciamos un objeto Command para ejecutar la instrucción sql en ‘el origen de datos. Este objeto recibe dos parámetros:la instrucción‘sql y el objeto Connection para establecer la conección.Dim Micomando As New SqlCommand(“select * from vendedores”, conection)‘Mediante el objeto Reader procedemos a leer los resultados de la consulta sql.Reader = Micomando.ExecuteReaderDim oreg As New ListViewItemWhile Reader.Read = True

oreg = ListView1.Items.Add(Reader(“codigo”))oreg.SubItems.Add(Reader(“nombres”))oreg.SubItems.Add(Reader(“apellidos”))oreg.SubItems.Add(Reader(“dirección”))

Select Case Reader(“e_civil”)Case “C” : oreg.SubItems.Add(“Casado”)Case “S” : oreg.SubItems.Add(“soltero”)Case “D” : oreg.SubItems.Add(“Divorciado”)Case “V” : oreg.SubItems.Add(“Viudo”)

End Select

Select Case Reader(“sexo”)Case 1 : oreg.SubItems.Add(“Masculino”)Case 0 : oreg.SubItems.Add(“Femenino”)

End Select

oreg.SubItems.Add(Reader(“Sueldo”))

Select Case Reader(“Retirado”)Case “0” : oreg.SubItems.Add(“No”)Case “1” : oreg.SubItems.Add(“Sí”)

End SelectEnd While

12

ACCESO A DATOS EN WEB

Page 70: Módulo_12_Acceso a base de datos desde con ASP

‘Nos desconéctamos de la base de datos.conection.Close()Reader.Close()

Catch ex As ExceptionMsgBox(ex.Message)

End TryEnd Sub

Private Sub BtnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _Handles BtnNuevo.Clickinstanciar_form(True)

End Sub

Private Sub BtnModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _Handles BtnModificar.Clickinstanciar_form(False)

End Sub

Private Sub BtnEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _Handles BtnEliminar.Click‘Capturamos el código del registros a eliminar.Dim cod_eliminar As String = InputBox(“Por favor asegúrese de ingresar el código correcto” _+ vbCrLf + vbCrLf + vbCrLf + “Ingrese código”, “Eliminar registro”, “1”, Me.Width / 2, Me.Height / 2)

Dim respuesta As MsgBoxResult = MsgBox(“Seguro de eliminar”, MsgBoxStyle.Exclamation +MsgBoxStyle.YesNo, “Aviso”)

‘En caso de confirmar la eliminación del registro, entonces...If respuesta = MsgBoxResult.Yes Then

‘...Eliminamos el registro conéctandonos al origen de datosDim sql As New String(“delete from vendedores where codigo=@codigo”)Dim ocmd As New SqlCommandocmd.Parameters.Add(New SqlParameter(“@codigo”, SqlDbType.Int)).Value = cod_eliminar‘Nos conéctamos a la base de datos.conection.Open()ocmd.CommandText = sqlocmd.Connection = conectionocmd.ExecuteNonQuery()MsgBox(“El registro ha sido eliminado con éxito”)

13

ACCESO A DATOS EN WEB

Page 71: Módulo_12_Acceso a base de datos desde con ASP

conection.Close()End If

End SubSub instanciar_form(ByVal valor_estado As Boolean)

Dim oForma As New auxiliarEstado = valor_estadooForma.ShowDialog()

End SubEnd Class

Private Sub BtnCancelar_Click(ByVal sender As System.Object, ByVal e _As System.EventArgs) Handles BtnCancelar.ClickMe.Close()

End Sub

Private Sub Guardar_cambios_Click(ByVal sender As System.Object, ByVal e _As System.EventArgs) Handles BtnGuardar_cambios.Click‘guardamos los cambios realizadosDim sqlcadena As Stringsqlcadena = New String(“update vendedores set nombres=@nombres,apellidos=@apellidos,” + _

“dirección=@dirección,e_civil=@civil,sexo=@sexo, sueldo=@sueldo,retirado=@retirado wherecodigo=@codigo”)

Dim ocmd As New SqlCommandocmd.Parameters.Add(New SqlParameter(“@codigo”, SqlDbType.Int)).Value = CboCodigo.Textocmd.Parameters.Add(New SqlParameter(“@nombres”, SqlDbType.Text, 25)).Value = Txtnom.Text.ToStringocmd.Parameters.Add(New SqlParameter(“@apellidos”, SqlDbType.Text, 25)).Value = Txtapel.Text.ToStringocmd.Parameters.Add(New SqlParameter(“@dirección”, SqlDbType.VarChar, 60)).Value = Txtdir.Textocmd.Parameters.Add(New SqlParameter(“@sueldo”, SqlDbType.Decimal)).Value = Txtsueldo.TextSelect Case CboCivil.Text

Case Is = “Casado”ocmd.Parameters.Add(“@civil”, SqlDbType.Char, 1).Value = “C”

Case Is = “Soltero”ocmd.Parameters.Add(“@civil”, SqlDbType.Char, 1).Value = “S”

Case Is = “Viudo”ocmd.Parameters.Add(“@civil”, SqlDbType.Char, 1).Value = “V”

Case Is = “Divorciado”ocmd.Parameters.Add(“@civil”, SqlDbType.Char, 1).Value = “D”

End Select

14

ACCESO A DATOS EN WEB

Page 72: Módulo_12_Acceso a base de datos desde con ASP

If CboSexo.Text = “Masculino” Thenocmd.Parameters.Add(“@sexo”, SqlDbType.Int, 1).Value = 1

ElseIf CboSexo.Text = “Femenino” Thenocmd.Parameters.Add(“@sexo”, SqlDbType.Int, 1).Value = 0

End IfIf chkRetirado.Checked = True Then

ocmd.Parameters.Add(“@retirado”, SqlDbType.Bit, 1).Value = chkRetirado.CheckedElseIf chkRetirado.Checked = False Then

ocmd.Parameters.Add(“@retirado”, SqlDbType.Bit, 1).Value = chkRetirado.CheckedEnd Ifconection.Open()ocmd.CommandText = sqlcadenaocmd.Connection = conectionocmd.ExecuteNonQuery()conection.Close()

End Sub‘Este evento lo que hace es guardar los datos del nuevo registro en la base de datosPrivate Sub BtnGuardar_nuevo_Click(ByVal sender As System.Object, ByVal e As _

System.EventArgs) Handles BtnGuardar_nuevo.ClickDim ocmd As New SqlCommandDim sqlcadena As New String(“Insert into vendedores(nombres,apellidos,” + _“dirección,e_civil,sexo,sueldo,retirado) values (@nombres,@apellidos,@dirección,” + _“@e_civil,@sexo,@sueldo,@retirado)“)ocmd.Parameters.Add(New SqlParameter(“@nombres”, SqlDbType.Text, 25)).Value = Txtnom.Text.ToStringocmd.Parameters.Add(New SqlParameter(“@apellidos”, SqlDbType.Text, 25)).Value = Txtapel.Text.ToString

ocmd.Parameters.Add(New SqlParameter(“@dirección”, SqlDbType.VarChar, 60)).Value =Txtdir.Text.ToString

ocmd.Parameters.Add(New SqlParameter(“@sueldo”, SqlDbType.Real)).Value = CDbl(Txtsueldo.Text)Select Case CboCivil.Text

Case “Casado”ocmd.Parameters.Add(“@e_civil”, SqlDbType.Char, 1).Value = “C”

Case “Soltero”ocmd.Parameters.Add(“@e_civil”, SqlDbType.Char, 1).Value = “S”

Case “Viudo”ocmd.Parameters.Add(“@e_civil”, SqlDbType.Char, 1).Value = “V”

Case “Divorciado”ocmd.Parameters.Add(“@e_civil”, SqlDbType.Char, 1).Value = “D”

End SelectIf CboSexo.Text = “Masculino” Then

ocmd.Parameters.Add(“@sexo”, SqlDbType.Int).Value = 1

15

ACCESO A DATOS EN WEB

Page 73: Módulo_12_Acceso a base de datos desde con ASP

ElseIf CboSexo.Text = “Femenino” Thenocmd.Parameters.Add(“@sexo”, SqlDbType.Int).Value = 0

End IfIf chkRetirado.Checked = True Then

ocmd.Parameters.Add(“@retirado”, SqlDbType.Bit).Value = 1ElseIf chkRetirado.Checked = False Then

ocmd.Parameters.Add(“@retirado”, SqlDbType.Bit).Value = 0End Ifconection.Open()ocmd.CommandText = sqlcadenaocmd.Connection = conection‘el método ExecuteNonQuery() del objeto Command ejecuta una instrucción ‘de Transact-SQL en la conexión y devuelve el número de filas afectadas.ocmd.ExecuteNonQuery()conection.Close()

End Sub

Private Sub BtnMostrar_datos_Click(ByVal sender As System.Object, ByVal e As _System.EventArgs) Handles BtnMostrar_datos.Click‘Muestra los datos del registro tomando como parámetro el código.Dim sql As New String(“select * from vendedores where codigo=@codigo”)Dim ocmd As New SqlCommand(sql, conection)conection.Open()‘Haciendo uso de parámetrosocmd.Parameters.Add(“@codigo”, SqlDbType.Int).Value = CboCodigo.TextReader = ocmd.ExecuteReaderReader.Read()

‘A continuación leemos todos los campos, excepto el campo código, del‘registro dónde el código se especificó en la instrucción Transact-SQL

‘Leemos el campo “nombres” Txtnom.Text = Reader(“nombres”)‘Leemos el campo “apellidos” Txtapel.Text = Reader(“apellidos”)‘Leemos el campo “dirección”Txtdir.Text = Reader(“dirección”)‘Leemos el campo “sueldo” Txtsueldo.Text = Reader(“sueldo”)‘Leemos el campo “e_civil” Select Case Reader(“e_civil”)

16

ACCESO A DATOS EN WEB

Page 74: Módulo_12_Acceso a base de datos desde con ASP

Case Is = “C” : CboCivil.SelectedIndex = 0Case Is = “S” : CboCivil.SelectedIndex = 1Case Is = “V” : CboCivil.SelectedIndex = 2Case Is = “D” : CboCivil.SelectedItem = 3

End Select

‘Leemos el campo “sexo”Select Case Reader(“sexo”)

Case Is = 1 : CboSexo.SelectedIndex = 0Case Is = 0 : CboSexo.SelectedIndex = 1

End Select‘Leemos el campo “retirado” chkRetirado.Checked = Reader(“retirado”)Reader.Close()conection.Close()

End Sub

Private Sub auxiliar_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _Handles MyBase.LoadIf Estado = True Then

CboCodigo.Visible = FalseLabel1.Visible = FalseBtnMostrar_datos.Visible = FalseBtnGuardar_cambios.Visible = False

Else

BtnGuardar_nuevo.Visible = FalseDim o As New SqlCommand(“select * from vendedores”, conection)conection.Open()‘El método ExecuteReader() envía CommandText a Connection y crea un SqlDataReader.Reader = o.ExecuteReaderWhile Reader.Read = True

‘Leemos el campo “codigo” de cada uno de los registros.CboCodigo.Items.Add(Reader(“codigo”))

End Whileconection.Close()CboCodigo.SelectedIndex = 0

End If

End SubEnd Class

17

ACCESO A DATOS EN WEB

Page 75: Módulo_12_Acceso a base de datos desde con ASP

El espacio de nombres System.Xml.

System.Xml (Espacio de nombres)

El espacio de nombres System.Xml ofrece compatibilidad basada en estándares para procesar XML.

ClaseNameTable

DescripciónImplementa XmlNameTable de un único subproceso.

UniqueIdRepresenta un identificador único optimizado para GUID.

XmlConvertCodifica y descodifica nombres XML y proporciona métodos de conversión entre tipos de Common Language

Runtime. Cuando se convierten tipos de datos, los valores devueltos no dependen de la configuración regional.

XmlDictionaryImplementa un diccionario utilizado para optimizar implementaciones de lector/sistema de escritura XML deSilverlight versión 2.

XmlDictionaryReaderSe trata de una clase abstracta que ofrece algunas funcionalidades adicionales a XmlReader.

XmlDictionaryReaderQuotasContiene los valores de cuota para XmlDictionaryReader.

XmlDictionaryStringRepresenta una entrada almacenada en un XmlDictionary.

XmlDictionaryWriterUna clase abstracta de la que deriva Silverlight versión 2 para la serialización y deserialización.

18

ACCESO A DATOS EN WEB

Page 76: Módulo_12_Acceso a base de datos desde con ASP

XmlExceptionDevuelve información detallada sobre la última excepción.

XmlNamespaceManagerResuelve, agrega y quita espacios de nombres en una colección y proporciona la administración del ámbitode estos espacios de nombres.

XmlNameTableTabla de objetos en forma de cadena subdividida.

XmlParserContextProporciona toda la información de contexto que necesita el objeto XmlReader para analizar un fragmentode XML.

XmlQualifiedNameRepresenta un nombre XML completo.

XmlReaderRepresenta un lector que proporciona acceso rápido a datos XML, sin almacenamiento en caché y condesplazamiento sólo hacia delante.

XmlReaderSettingsEspecifica un conjunto de características compatibles en el objeto XmlReadercreado mediante el métodoCreate.

XmlResolverResuelve los recursos XML externos designados por un identificador de recursos uniforme (URI).

XmlWriterRepresenta un sistema de escritura que constituye un medio rápido, no almacenado en caché y de sólo avancepara generar secuencias o archivos con datos XML.

XmlWriterSettingsEspecifica un conjunto de características compatibles en el objeto XmlWriter creado mediante el métodoXmlWriter..::.Create.

XmlXapResolverEl tipo XmlXapResolver se utiliza para resolver los recursos del paquete XAP de la aplicación de Silverlight.

19

ACCESO A DATOS EN WEB

Page 77: Módulo_12_Acceso a base de datos desde con ASP

Interfaces

InterfazIXmlDictionary

DescripciónInterfaz que define el contrato que un diccionario XML debe implementar para ser utilizado por lasimplementaciones de XmlDictionaryReader y XmlDictionaryWriter.

IXmlLineInfoProporciona una interfaz que permite a una clase devolver información de línea y de posición.

IXmlNamespaceResolverProporciona acceso de sólo lectura a un conjunto de asignaciones de prefijos y espacios de nombres.

Enumeraciones

EnumeraciónConformanceLevel

DescripciónEspecifica el número de comprobaciones de entrada o de salida que realizan los objetos XmlReader y XmlWri-ter creados.

DtdProcessingEspecifica las opciones para procesar DTD. XmlReaderSettings utiliza esta enumeración DtdProcessing.

NamespaceHandlingEspecifica si se van a quitar las declaraciones de espacio de nombres duplicadas en XmlWriter .

NewLineHandlingEspecifica cómo controlar los saltos de línea.

ReadStateEspecifica el estado del lector.

WriteStateEspecifica el estado de XmlWriter .

20

ACCESO A DATOS EN WEB

Page 78: Módulo_12_Acceso a base de datos desde con ASP

XmlDateTimeSerializationModeEspecifica cómo tratar el valor de tiempo al realizar una conversión entre una cadena y DateTime.

XmlNamespaceScopeDefine el ámbito del espacio de nombres.

XmlNodeTypeEspecifica el tipo de nodo.

XmlSpaceEspecifica el ámbito de xml:space actual.

XmlTokenizedTypeRepresenta el tipo XML de la cadena. Esto permite que la cadena se lea como un tipo XML concreto; porejemplo, un tipo de sección CDATA.

21

ACCESO A DATOS EN WEB

Page 79: Módulo_12_Acceso a base de datos desde con ASP

Lectura de datos con DOM.

Lectura de un documento XML en el DOM

La información XML se lee en memoria desde diferentes formatos. Se puede leer desde una cadena, unasecuencia, una URL, un sistema de lectura de texto o una clase derivada de XmlReader

El método Loadpone el documento en memoria y dispone de métodos sobrecargados para tomar datos de cadauno de los diferentes formatos. También hay un método LoadXml que lee XML de una cadena.

Los diferentes métodos Load influyen en qué nodos se crean cuando se carga el Modelo de objetos dedocumento (DOM). En la siguiente tabla se enumeran las diferencias entre algunos de los métodos Load y lostemas en los que se tratan.

22

ACCESO A DATOS EN WEB

Page 80: Módulo_12_Acceso a base de datos desde con ASP

En los siguientes ejemplos se muestra cómo se carga el XML con el método LoadXml y cómo se guardanposteriormente los datos en un archivo de texto denominado data.xml.

Visual Basic

Imports SystemImports System.IOImports System.Xml

Public Class Sample

Public Shared Sub Main()‘ Create the XmlDocument.Dim doc As New XmlDocument()doc.LoadXml((“<book genre=’novel’ ISBN=’1-861001-57-5’>” & _

“<title>Pride And Prejudice</title>” & _“</book>”))

‘ Save the document to a file.doc.Save(“data.xml”)

End Sub ‘MainEnd Class ‘Sample

C#

using System;using System.IO;using System.Xml;public class Sample{

public static void Main(){

// Create the XmlDocument.XmlDocument doc = new XmlDocument();doc.LoadXml(“<book genre=’novel’ ISBN=’1-861001-57-5’>” +

“<title>Pride And Prejudice</title>” +“</book>”);

// Save the document to a file.doc.Save(“data.xml”);

}}

23

ACCESO A DATOS EN WEB

Page 81: Módulo_12_Acceso a base de datos desde con ASP

Interconexión a Base de Datos con XML

Una base de datos XML no es diferente de cualquier documento XML, ya que XML permite definir cualquiertipo de información. La diferencia entre documentos XML que tratan diversos tipos de contenidos, no es másque la distinta organización de sus elementos, gestionados a través de la colección de etiquetas adecuadasa cada caso.

Las bases de datos más sencillas son aquellas que se pueden expresar en forma de tabla, por lo que se suelenconocer como “tabulares”. Un ejemplo de bases de datos tabular sería:

Para trabajar con un ejemplo concreto hay que comenzar creando una base de datos XML, que en nuestrocaso va a ser la que se muestra a continuación:

<?xml version=”1.0” encoding=”ISO-8859-1” ?> <ALUMNOS> ALUMNO> <NÚMERO>1</NÚMERO> <NOMBRE>Ramón</NOMBRE> <APELLIDO>Montero</APELLIDO> <NIVEL>Introducción</NIVEL> <CURSO>XML</CURSO> </ALUMNO> <ALUMNO> <NÚMERO>2</NÚMERO> <NOMBRE>Jaime</NOMBRE> <APELLIDO>de Yraolagoitia</APELLIDO> <NIVEL>Avanzado</NIVEL> <CURSO>Windows 2000</CURSO> </ALUMNO> <ALUMNO> <NÚMERO>3</NÚMERO> <NOMBRE>José Manuel</NOMBRE> <APELLIDO>Alonso</APELLIDO> <NIVEL>Básico</NIVEL> <CURSO>HTML</CURSO> </ALUMNO>

24

ACCESO A DATOS EN WEB

Page 82: Módulo_12_Acceso a base de datos desde con ASP

<ALUMNO> <NÚMERO>4</NÚMERO> <NOMBRE>María Teresa</NOMBRE> <APELLIDO>Gómez</APELLIDO> <NIVEL>Avanzado</NIVEL> <CURSO>UNIX</CURSO> </ALUMNO> </ALUMNOS>

Para introducir los datos de alumnos1.xml en una determinada página web con código HTML hay variossistemas. El más cómodo que se puede utilizar desde IE5 supone dos pasos: insertar los datos del archivo ymostrar los campos en la forma más adecuada.Para insertar los datos del archivo es suficiente con incluir en el código HTML una línea como:

<xml id=”ListaAlumnos1” src=”alumnos1.xml”></xml>

En la que se define un nombre identificador (ListaAlumnos1) para el proceso DSO (Data Source Object) deIE5 y el nombre del origen de los datos (alumnos1.xml).En estos casos se suele recurrir a las tablas como sistema para mostrar los datos, por lo que se podría añadirun código como:

<table datasrc=”#ListaAlumnos1”><caption>LISTA DE ALUMNOS</caption> <thead> <th>Núm</th> <th>Nombre</th> <th>Apellido</th> <th>Curso</th> <th>Nivel</th> </thead> <tbody> <tr> <td><span datafld=”número”></span></td> <td><span datafld=”nombre”></span></td> <td><span datafld=”apellido”></span></td> <td><span datafld=”curso”></span></td> <td><span datafld=”nivel”></span></td> </tr> </tbody> </table>

25

ACCESO A DATOS EN WEB

Page 83: Módulo_12_Acceso a base de datos desde con ASP

En el código anterior se puede observar que hay que hacer una llamada al identificador definidoanteriormente (datasrc=”#ListaAlumnos1”), y que cada campo se inserta en su celda a través del atributodatafld.

También se puede observar que es fácil controlar el orden de los datos (curso y nivel no están en el mismoorden que se encuentran en el archivo alumnos1.xml), la descripción de las cabeceras de las columnas, eincluso el control de los colores y otras características de formato del contenido de la tabla.

Pero, lo más importante es que con ese mismo código se puede presentar tanto una base de datos con cuatroalumnos, que con cuatrocientos, ya que eso sólo depende del contenido del archivo alumnos1.xml, y, así,existe una independencia total entre la presentación de los datos y el contenido de los datos, debiendorecurrir al documento xml cada vez que se desee realizar cualquier modificación.

MODIFICACIONES DE DATOS XML

En primer lugar, vamos a ver qué ocurre si algún campo está vacío, para lo que se puede añadir un nuevoelemento <EDAD> que tenga datos en dos de los alumnos y esté vacío en los otros dos.

Ahora es necesario modificar la tabla de nuestra página web HTML para añadir una nueva cabecera Edad ysu correspondiente columna, que puede ser situada donde mejor interese y con los parámetros de formatomás idóneos al caso.

Respecto a la cuestión de cómo se comportaría el sistema si algún elemento del documento XML no quedareferenciado en el código HTML, la respuesta es que no pasa nada, simplemente se ignora toda la informaciónque no se llame con su correspondiente atributo datafld.

Los datos de un mismo documento XML se pueden llamar desde varias tablas de una misma página web HTMLo desde varios archivos distintos HTML.

CONTROL DE PARÁMETROS XML

En algunas ocasiones se prefiere incluir ciertos datos de los documentos XML en forma de parámetros, en vezde hacerlo como contenido de los elementos. En nuestro ejemplo, podría ser el caso del número de cadaalumno, que en vez de incluirse en la etiqueta <NÚMERO>, podría diseñarse como un parámetro de cadaelemento <ALUMNO>, quedando de la forma <ALUMNO NÚMERO=”X”>, donde X se corresponde con cadanúmero de alumno.

26

ACCESO A DATOS EN WEB

Page 84: Módulo_12_Acceso a base de datos desde con ASP

Pero hay que aclarar que este procedimiento no se puede aplicar a todos los parámetros, ya que sólo funcionacon las etiquetas vacías, como es el caso de <ALUMNO>. En nuestro ejemplo, no se podrían añadirparámetros de nivel a cada etiqueta de curso (<CURSO NIVEL=”Medio”>HTML</CURSO>). Si se desea queen el documento XML, cada dato del nivel esté contiguo al dato correspondiente del curso, hay que seguirrecurriendo a los elementos (etiquetas) de nivel.

GESTIÓN INDIVIDUAL DE DATOS XML

La presentación de datos a través de tablas organizadas en filas y columnas es muy práctica en muchos casos,pero en otros, no es el método ideal. Tales son los casos en los que la información de algunas celdas se basaen textos largos, cuando el número de columnas es muy amplio, o también, cuando el número de filasresultante es tan extenso que la tabla ocupa varias pantallas.

La solución en estos casos pasa por el control de los datos en un formato individualizado, de forma que elusuario accede a los datos de cada elemento principal en modo secuencial.

Para permitir el desplazamiento por la base de datos se ha implementado un sistema de botones, basado enlos métodos estándares del DSO: moveFirst, moveLast, moveNext y movePrevious, que permiten pasar a laprimera, última, siguiente y anterior posición del documento XML.

Con este sistema se consigue un control secuencial, muy sencillo de utilizar, de cualquier base de datostabulada, aunque se puede modificar para que también sirva para la presentación de datos de un documentoasimétrico.

Aprovechando los elementos HTML que pueden ser tratados por el DSO de IE5, se puede mejorar lapresentación de la información adaptándola a cada tipo de dato.

Debe quedar claro que no se han comentado todas las posibilidades de gestión de datos XML a través decódigo HTML, ya que existen otras muchas posibilidades. El objetivo de este artículo es mostrar los métodosmás sencillos que se pueden implementar en una página web HTML para mostrar las bases de datos de losdocumentos XML a través de Internet Explorer 5.

27

ACCESO A DATOS EN WEB

Page 85: Módulo_12_Acceso a base de datos desde con ASP

BASES DE DATOS EN LA WEB

© élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.

Page 86: Módulo_12_Acceso a base de datos desde con ASP

En estas páginas vamos a intentar dar una pequeña introducción sobre como acceder desde nuestra páginaweb a una base de datos utilizando diferentes tecnologías, (todas ellas para servidores en Windows 9x,aunque algunas también para Unix, Linux...) para que cada uno compare y elija la que mas le guste.

Creando las BD

El primer paso es crear las bases de datos que vamos a usar en nuestros ejemplos, lo cual no es muy difícilni para usuarios poco avanzados.

Vamos a probar los ejemplos usando dos bases de datos relacionales en distinto formato para demostrar queno influye el tipo de servidor de bases de datos que usemos, si los conectamos mediante el ODBC de Windows9x. Las dos base de datos tendrán las mismas tablas que son las siguientes:

ACCESO A DATOS EN WEB

2

Page 87: Módulo_12_Acceso a base de datos desde con ASP

3

Obtener un DSN

DSN: Data Source Name. Es un identificador único de la base de datos en el sistema. Al definir un DSN hayque especificar tanto la ruta completa del archivo de base de datos como el controlador adecuado a la misma(MSAccess, FoxPro, DBase etc). Una vez creado, es todo lo que necesitamos saber acerca de la base de datospara poder abrirla, consultarla, modificarla, etc.

Una vez que tenga preparado su archivo de bases de datos (por ejemplo ejemplo1.mdb) colóquelo en eldirectorio Data de su dominio. Después vaya al panel de control de su dominio y obtenga un DSN para dichoarchivo. El DSN será el identificador con el que podrá conectar con su base de datos.

Abrimos Panel de Control y abrimos ODBC. El icono debe ser algo parecido a esto:

Cuando estés dentro veras una pantalla como esta:

Selecciona la pestaña System DSN. Aparecerá vacía si no se ha definido antes ningún otro DNS de sistema.Pulsa el botón Add . Veras una ventana parecida a la de la imagen:

ACCESO A DATOS EN WEB

Page 88: Módulo_12_Acceso a base de datos desde con ASP

4

Escoge el driver para Microsoft Access ( en este caso ) y pulsa el botón finish. Ahora deberás ver la siguienteventana:

En la etiqueta Data Source Name, introduce el nombre con el cual llamaras a tu base de datos. Para elejemplo debes introducir Ejemplo1. Finalmente, pulsa el botón Select y busca el nombre y pathcompleto de la base de datos que habíamos creado (Data/Ejemplo1.mdb). Y esto es todo. Ya estaaccesible tu base de datos mediante ODBC.

ACCESO A DATOS EN WEB

Page 89: Módulo_12_Acceso a base de datos desde con ASP

5

Instalando Personal Web Server y Sambar Server

Personal Web Server es uno de los servidores WEB de Microsoft. Viene en el CD de Windows 98 aunque esnecesario intalarlo después de la instalación de Windows. Para instalarlo hacemos:

Inserte el disco compacto de Windows 98 en su unidad. Haga clic en Inicio y después haga clic en Ejecutar. En Abrir, escriba: x:\add-ons\pws\setup.exe (o instalar.exe) donde x es la letra de la unidad de CD-ROM. Haga clic en Aceptar. Siga las instrucciones de Personal Web Server Setup. Si todo va bien ya tienes instalado el PWS y al reiniciar el equipo tendrás en la barra de tareas el icono dePWS. Si lo pulsas dos veces verás una pantalla parecida a esta:

Pulsando en Avanzada crear tus directorios y darles los permisos de ejecución para poder guardar en el losscripts o bien utilizar el directorio que él crea por defecto.

También vamos a instalar otro servidor Web para que veáis como hacerlo y las diferencias entre uno yotro.Este otro servidor es el Sambar web Server que podéis bajaros gratuitamente desdehttp://www.winfiles.com/ .Personalmente me gusta más que PWS porque es más fácil de configurary de instalar pero lo malo es que no ejecuta los script ASP ( por lo menos la version que yo tengo ).

ACCESO A DATOS EN WEB

Page 90: Módulo_12_Acceso a base de datos desde con ASP

6

Una vez que tengáis el fichero .zip de Sambar server lo descomprimes en un directorio tmp y ejecutas elsetup.exe, Ya está , nada más que hacer, aunque tiene muchas más posibilidades pero para nuestrospropósitos no nos interesa en este momento. Si lo lanzas debes ver algo parecido a esto:

Instalando Perl, JSP y1 PHP3

Otro paso arduo para nuestro propósito es instalar los lenguajes que vamos a utilizar y configurar nuestroservidor para que los sepa usar.

Para ASP no hay problema porque como es de Microsoft y el servidor tambien, no tenemos que hacer nada.Para C tampoco porque nuestro CGI en C va a ser un ejecutable compilado y no necesitamos el compiladoren el servidor. La cosa se complica un poco más para los demás lenguajes.

PHP3PASO1: descomprime el fichero php-3_x_x-win32.zip que te has bajado de http://www.php.net/ en un

directorio. Por ejemplo “C:\PHP3\“.

ACCESO A DATOS EN WEB

Page 91: Módulo_12_Acceso a base de datos desde con ASP

PASO 2: Copia el fichero ‘php3.ini.dist’ a tu directorio %WINDOWS% y cámbiale el nombre por el de ‘php3.ini’

PASO 3: Ahora edita el fichero php3.ini y busca ‘extension_dir’ que debes cambiarlo para que apunte aldirectorio donde has descomprimido la instalación de php3. Elige los módulos ( dll ) que quierescargar cuando php se ejecute. Esto de hace quitando el guión de comentario( ‘ ) que tienen laslíneas del estilo “extension=php3_*.dll”. Para nuestro ejemplo basta quitar el comentario de la línea“extension=php3_odbc.dll”. Si quieres más información visita la FAQ en http://www.php.net/Todavía no hemos acabado. Busca la linea browscap y debe ser igual a “browscap =c:\WINDOWS\SYSTEM\inetsrv\browscap.ini”.

PASO 4: El último. Edita el registro de sistema ( Hazle una copia de seguridad antes de empezar por si lasmoscas). BuscaHKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/W3Svc/Parameters/ScriptMap

Ve al menú Edición y pulsa Nuevo->Valor de la cadena. En Nombre debes poner las extensiones asociadas a tus scripts php. Por ejemplo ‘.php3’ Haciendo Doble click en el nuevo valor introduce el path del ejecutable php.exe, por ejemplo:‘c:\php3\php.exe %s %s’. Los ‘%s %s son muy importantes, si ellos php no funcionaria. Repite 1)-4) para cada extensión que quieras asociar con PHP.Los más comunes son .php3 y .phtml Ve a HKEY_CLASSES_ROOT Ve al menú Edición y pulsa Nuevo->Clave El nombre de la clave es la extensión que quieres asociar con php ( ‘.php3’ ) Pulsa la nueva clave y en el panel derecho haz doble click en el valor por defecto y escribe ‘phpfile’ Repite 5) - 8) para cada extensión que quieras asociar con php. Ve al menú Edición y pulsa Nuevo->Clave. El nombre de la clave debe ser ‘phpfile’ Pulsa la nueva clave y en el panel derecho haz doble click en el valor por defecto y escribe ‘PHP Script’ Ahora crea una nueva clave hija de ‘phpfile’ y llámala ‘Shell’ Ahora crea una nueva clave hija de ‘Shell’ y llámala ‘open’ Ahora crea una nueva clave hija de ‘open’ y llámala ‘command’ Pulsa la clave command y en el panel derecho haz doble click en el valor por defecto yescribe:’c:\php3\php.exe -q %1’ Sal de Regedit Si todo ha ido bien ya tienes tu PWS funcionando con PHP3.

7

ACCESO A DATOS EN WEB

Page 92: Módulo_12_Acceso a base de datos desde con ASP

8

PERL

No es tan difícil como PHP3. Lo primero que debes hacer es bajarte la versión de Perl 5 dehttp://www.perl.com/ o desde http://www.shareware.com/ y descomprime el .zip que te has bajado en undirectorio de tu servidor. Por ejemplo c:\perl5. Para terminar sólo debes añadir el directorio bin de perl a tuvariable PATH dentro del autoexec.bat

JSP

Debes instalar el JDK que puedes encontrar en http://www.javasoft.com/ , yo te recomiendo la versión 1.2o posterior. Esto es fácil, sólo tienes que descomprimirla y ejecutar el programa de instalación y añadir lavariable CLASSPATH a tu autoexec.bat. Esta debe valer algo parecido a :

SET CLASSPATH=C:\JDK1.2\LIB\TOOLS.ZIP

Nosotros vamos a usar JSP que es algo parecido a ASP. Puedes buscarlo enhttp://www.javasoft.com/products/jdbc/index.html. Te bajas el JSWDK ( Java Server Development Kit forWindows ) junto con la documentación. Se instala descomprimiendo el .zip en el directorio JDK1.2 Cuandohayas instalado el JSWDK tienes que configurar el servidor que trae para poder ejecutar los JSP.( Casi no hayque tocarlo funciona por defecto en el puerto 8080 ). Lo que sí tienes que hacer es añadir otra variable deentorno a tu autoexec.bat algo parecido a “ Set JAVA_HOME=c:\JDK1.2”

Para Lanzar el servidor tienes que llamar a desde una ventana de MS-DOS a la macro Startserver.com. Unaayuda:esta macro define cantidad de variables de entorno y lo mas seguro es que no te funcione. ( Da un errorde “ sin espacio de entorno “). Solución: imprime el fichero startserver.bat y ve definiendo una a una lasvariables de entorno y luego ejecuta start java .... tal y como dice la macro.

Si todo va bien se abrirá otra ventana de ms-dos donde estará corriendo el nuevo servidor.Se accede a él con una llamada del tipo http://127.1.1.1:8080

ACCESO A DATOS EN WEB

Page 93: Módulo_12_Acceso a base de datos desde con ASP

El directorio cgi-bin

Sea cual sea nuestro servidor necesitamos que los script y los cgi estén en un directorio que tenga permisode ejecución. Lo más frecuente es que este directorio se llame cgi-bin.(otros como Apache o Sambar nopermiten otro directorio que no sea cgi-bin). PWS crea el directorio /SCRIPTS. Yo particularmente, he creadoen mi servidor varios directorios ( uno para cada tecnología ) y les he dado permiso de ejecución. Esto se hacecon el PWS en la opción AVANZADAS. Debes ver algo como:

Creando las aplicaciones: Ejemplos

9

ACCESO A DATOS EN WEB

Page 94: Módulo_12_Acceso a base de datos desde con ASP

Por último ya estamos preparados para comenzar a programar nuestras aplicaciones. Todo debe funcionar sihemos seguido bien los pasos anteriores. Ahora veamos cómo se conecta con la base de datos y como setrabaja con ella desde las distintas tecnologías que estamos estudiando:

ASP PERL PHP3 JSP ASP

El sistema de acceso a bases datos a través de la web utilizando la tecnología Microsoft, se denomina ADO(ActiveX Data Objects). Aquí se expone una introducción comprensiva en castellano. Para ver una completareferencia acerca de todo el sistema de bases de datos de Microsoft, consulte en www.microsoft.com/data.La referencia completa de métodos y propiedades de los objetos está también en la biblioteca online de MSDN(msdn.microsoft.com). Ahí verá múltiples ejemplos en los que comprobará la flexibilidad del sistema ADO (almismo resultado se puede llegar por vías distintas). Por motivos pedagógicos, aquí se expone una utilizaciónmás rígida.

Terminología

ADO: ActiveX Data Objects. Es una familia de objetos componentes dedicados a facilitar el acceso a basesde datos. El ProgID de cada uno de ellos se forma combinando ADODB. con el nombre del objeto (por ejemploADODB.Recordset, ADODB.Connection, ADODB.Command, etc). Por tanto, en VBScript los objetos se creancon sentencias tipo Set mirst = Server.CreateObject(“ADODB.Recordset”), etc

Los objetos componentes de ADOTodo el sistema ADO se basa en una serie de objetos cuyas propiedades y métodos hay que utilizar. Estosobjetos están registrados en el sistema, sin embargo no están predefinidos. Es decir, hay que crearlosutilizando Server.CreateObject.

Como valores de muchas de las propiedades de los objetos ADO se utilizan constantes, comoadOpenForwardOnly, adOpenKeySet, etc. Todas estas constantes empiezan por ad y están definidas en unarchivo llamado adovbs.inc para Visual Basic script y adojavas.inc para Javascript. Estos archivos los podráencontrar en su instalación local de ADO. Para incluirlos en las páginas ASP es necesario utilizar un código deeste tipo al comienzo de cada página ASP que use las constantes:

<!—#INCLUDE FILE=”adovbs.inc”—>

Para que esta inclusión funcione el archivo adovbs.inc debe estar en el mismo directorio que lapágina ASP que lo incluye.

10

ACCESO A DATOS EN WEB

Page 95: Módulo_12_Acceso a base de datos desde con ASP

Connection

Representa una conexión a una base de datos. Este es el primer objeto que debemos crear para poderconectar con la base de datos. Tanto el objeto ADO que nos permite acceder a los datos (Recordset) comoel que nos permite realizar consultas (Command) disponen de una propiedad llamada ActiveConnection quees una referencia al objeto connection que enlaza con la base de datos a la que queremos atacar. De ahí queel primer paso sea crear la conexión.

Propiedades y métodos

ConnectionStringEs una cadena de caracteres con la información necesaria para establecer una conexión con la fuente dedatos. Por tanto, es la propiedad básica de este objeto. Aunque hay hasta 7 argumentos distintos que sepueden suministrar en esta cadena, los básicos son el DSN que identifica al archivo de base de datos y el loginy password si existen. Los argumentos se separan con punto y coma.

Ejemplo: “DSN=midsn; UID=milogin; PWD=micontraseña”

OpenAbre la conexión con la base de datos. Si antes hemos asignado la propiedad ConnectionString, este métodono necesita parámetros.

CloseCierra la conexión con la base de datos.

Ejemplo de uso

<%

Set miconexion = Server.CreateObject(“ADODB.Connection”) miconexion.ConnectionString = “DSN=midsn” miconexion.Open ‘ ....... ‘........ miconexion.Close

%>

11

ACCESO A DATOS EN WEB

Page 96: Módulo_12_Acceso a base de datos desde con ASP

Recordset

Este es el objeto ADO más importante ya que es con el que accederemos directamente a los datos de lastablas, tanto para leerlos como para modificarlos.

Un objeto Recordset representa una tabla, que puede ser una tabla física de la base de datos o bien unaobtenida mediante una operación como un filtrado o sentencia SQL. En cualquier caso, el objeto representaa la tabla con todos sus registros, aunque sólo uno de ellos es el activo. El registro activo es en el quepodemos leer o modificar los valores de los campos. También se le llama cursor.

Propiedades y métodos más importantes

Para una mejor compresión y puesto que son numerosos, los hemos dividido por categorías de utilidad.Propiedades que hacen referencia al origen de los datos:Estas dos propiedades deben ser asignadas a todo Recordset, pues le dicen la base de datos y la tabla de laque obtener sus datos.

ActiveConnectionComo se ha comentado antes a esta propiedad se le debe asignar un objeto connection que se haya creadopreviamente. Indicará al Recordset la base de datos en la que buscar su tabla.

SourceIndica al objeto Recordset la tabla a la que representará. A la propiedad Source se le asigna normalmenteuna cadena de caracteres con el nombre de la tabla. Sin embargo, también es posible asignarle una sentenciaSQL y entonces el objeto Recordset referenciará al resultado de aplicar dicha sentencia.

LockTypeIndica el tipo de bloqueo que se realiza sobre la base de datos. Por defecto toma el valor adLockReadOnlyque como su nombre indica sólo sirve para leer datos. Si deseamos editar o añadir registros, tendremos quecambiar esta propiedad por otro valor. El más usado es adLockOptimistic que permite editar la base de datoso añadir registros realizando un bloqueo optimista (sólo cuando sea estrictamente necesario).

CursorTypeEl tipo de cursor que se utiliza para recorrer los registros de un recordset. Por defecto toma el valoradOpenForwardOnly que como su nombre indica sólo permite moverse hacia adelante. Por ello si queremosutilizar libremente todos los métodos de movimiento de un recordset (MoveFirst, MoveTo, MoveNext,MovePrevious, etc) tendremos que cambiar el cursor por uno más potente. Esto puede hacerse asignando aesta propiedad el valor adOpenKeyset

12

ACCESO A DATOS EN WEB

Page 97: Módulo_12_Acceso a base de datos desde con ASP

Ejemplo

Aquí creamos en primer lugar un objeto Connection y luego un Recordset al que se asigna dicho objeto. Esteejemplo es una especie de esqueleto para los demás que sigan: Se supone que debe hacerse algo parecidoa esto para abrir el Recordset. Es decir, en los restantes ejemplos escribimos sólo el código que iría en el lugarde los puntos suspensivos de este script (NOTA: Recuerde que si hay que añadir registros es necesario cambiarel LockType antes de inicializar el recordset).

<%Set miconexion = Server.CreateObject(“ADODB.Connection”) miconexion.ConnectionString = “DSN=midsn” miconexion.Open Set mirecordset = Server.CreateObject(“ADODB.Recordset”) mirecordset.ActiveConnection = miconexion mirecordset.Source = “Clientes” mirecordset.Open ........ ‘ Operaciones con los datos ........’ de la tabla Clientes. mirecordset.Close miconexion.Close

%>

Propiedades que hacen referencia al número de registros

RecordCountNúmero de registros de la tabla a la que representa el objeto recordset.

Ejemplo:

<h3>Tenemos <%= rstClientes.RecordCount%> clientes registrados en nuestra base de datos</h3>

EOFAcrónimo de End Of File. Vale TRUE si estamos en el último registro y FALSE si no. Se usa mucho comocondición en bucles while, los cuales se ejecutan hasta llegar al último registro.

BOFAcrónimo de Begin Of File. Vale TRUE si estamos en el primer registro y FALSE si no.

13

ACCESO A DATOS EN WEB

Page 98: Módulo_12_Acceso a base de datos desde con ASP

Métodos para mover el cursor (registro activo):

Estos métodos pueden funcionar todos o no dependiendo del tipo de cursor creado. El tipo de cursor seasigna en la propiedad CursorType. Por ejemplo, para asignar un cursor adOpenKeySet que permita moversehacia adelante o hacia atrás:

<%Set miconexion = Server.CreateObject(“ADODB.Connection”) miconexion.ConnectionString = “DSN=midsn” miconexion.Open Set mirecordset = Server.CreateObject(“ADODB.Recordset”) mirecordset.ActiveConnection = miconexion mirecordset.Source = “Clientes” mirecordset.CursorType = adOpenKeySet mirecordset.Open ........ ‘ Operaciones con los datos ........’ de la tabla Clientes. mirecordset.Close miconexion.Close

%>

Nótese que la asignación de propiedades al recordset debe hacerse antes de invocar el método open que esel que lo inicializa con registros.

MoveFirstMueve el cursor al primer registro de la tabla

MoveLastMueve el cursor al último registro de la tabla

MoveNextMueve el cursor al siguiente registro.

MovePreviousMueve el cursor al registro anterior.

14

ACCESO A DATOS EN WEB

Page 99: Módulo_12_Acceso a base de datos desde con ASP

Ejemplo de un bucle que recorre todos los registros de una tabla

<%mirecordset.MoveFirst do while not mirecordset.EOF

..... ‘ Tratamiento

..... ‘ de datos mirecordset.MoveNext

loop %>

Lectura y modificación de los campos del registro activo

La sintaxis para acceder a los datos de un campo del registro activo de un recordset es:

mirecordset(“Domicilio”)

Esto se usa tanto para leer como asignar valores. En nuestro ejemplo, el objeto mirecordset representa a unatabla uno de cuyos campos tiene el nombre “Domicilio”. Así, con la expresión

dom = mirecordset(“Domicilio”)

Leemos el valor del campo domicilio del registro activo y se lo asignamos a la variable dom. Con la expresiónmirecordset(“Domicilio”) = “C/ Bretón de los Herreros 19, 1º M”

mirecordset.Update

asignamos un valor al campo Domicilio del registro activo. Tras la edición del registro, es necesario llamaral método Update. El motivo es que los cambios en el registro activo se realizan sobre un buffer (espacio dealmacenamiento intermedio) y no sobre el registro propiamente dicho.

15

ACCESO A DATOS EN WEB

Page 100: Módulo_12_Acceso a base de datos desde con ASP

Ejemplo:

El recordset rstClientes representa a nuestra tabla de clientes que, entre otros, tiene los campos Provinciae IVA . El siguiente bucle recorre todos los clientes, comprueba su provincia y le asigna el IVA correspondiente:0 para Canarias y 16 para los demás

<%

rstClientes.MoveFirst do while not rstClientes.EOF

if rstClientes(“Provincia”) = “Las Palmas” or rstClientes(“Provincia”) = “Tenerife”

Then rstClientes(“IVA”) = 0

else rstClientes(“IVA”) = 16

end if rstClientes.Update rstClientes.MoveNext

loop %>

Métodos para agregar o eliminar registros de la tabla

DeleteEliminar el registro activo es muy fácil. Basta con invocar este método. Por ejemplo, este bucle eliminatodos los clientes morosos de nuestra base de datos:

<%rstClientes.MoveFirst do while not rstClientes.EOF

if rstClientes(“Deuda”) > 0 Then rstClientes.Delete

end if rstClientes.MoveNext loop

%>

16

ACCESO A DATOS EN WEB

Page 101: Módulo_12_Acceso a base de datos desde con ASP

AddNew y UpdateCrear un nuevo registro involucra dos métodos: Primero AddNew crea un nuevo registro en blanco. Despuésasignamos valores a los distintos campos del registro. Por último invocamos el método Update para que sehaga efectiva la incorporación del nuevo registro con los valores asignados.

En este ejemplo incorporamos un nuevo cliente a nuestra base de datos

<%

rstClientes.AddNew rstClientes(“Nombre”) = “Pepe Gotera” rstClientes(“Direccion”) = “Rue del Percebe, 13” rstClientes(“Localidad”) = “Sildavia” rstClientes(“Profesion”) = “Chapuzas a domicilio” rsClientes.Update

%>

Recuerda que para que esto funcione hay que asignar un tipo de bloqueo que permita la edición de la basede datos. Esto se hace asignando a la propiedad LockType del recordset uno de estos valores:adLockOptimistic, adLockPessimistic o adLockBatchOptimistic.

CommandEste objeto es la representación de un comando que se envía a la base de datos. Este comando puede seruna de estas 3 cosas:

- Llamada a un procedimiento guardado en la base de datos. - El texto de una sentencia SQL. - El nombre de una tabla.

ActiveConnectionEs una referencia al objeto connection que enlaza con la base de datos. es imprescindible asignar estapropiedad antes de invocar el método command.execute para ejecutar el comando.

CommandTextEste es el texto del comando. Si se trata de una consulta SQL (lo habitual), esta propiedad es simplementeuna cadena con el texto de la consulta.

17

ACCESO A DATOS EN WEB

Page 102: Módulo_12_Acceso a base de datos desde con ASP

ExecuteEl método que ejecuta la consulta. El resultado de la ejecución del comando normalmente será un recordset.

En el ejemplo, obtenemos un recorset con un filtrado de la tabla Clientes en el que se toma sólo aquellosclientes cuya provincia es Navarra.

<%

Set miconexion = Server.CreateObject(“ADODB.Connection”) miconexion.ConnectionString = “DSN=midsn” miconexion.Open Set SqlCommand = Server.CreateObject(“ADODB.Command”) SqlCommand.ActiveConnection = miconexion SqlCommand.CommandText =

“SELECT * FROM Clientes WHERE Provincia = ‘Navarra’“ Set rstNavarros = SqlCommand.execute ‘ ....... ‘........ miconexion.Close

%>

Ejemplo

Como casi todos los script que vamos a desarrollar en este turorial, primero nos presenta el estado actualde la tabla Clientes y un formulario para añadir un nuevo registro en la BD.

También hemos explicado en este capítulo como borrar y moverse por el recordset, pero en el ejemplo nolo usamos porque la mayoría de las veces el cliente sólo debe poder ver y añadir registros a la base de datos,y no modificarlos y / o borrarlos.

18

ACCESO A DATOS EN WEB

Page 103: Módulo_12_Acceso a base de datos desde con ASP

19

Llamando al scripts desde el browser cliente con http://127.1.1.1/sie/asp/bd.asp debe aparecernos algoparecido a esto:

ACCESO A DATOS EN WEB

Page 104: Módulo_12_Acceso a base de datos desde con ASP

20

PERL

En este caso vamos a utilizar Perl 5 y su librería DBI ( Database Independent Interface ) para crear un scriptCGI que nos permita conectar con nuestra base de datos. Esta librería viene gratuita con la distribuciónnormal de Perl5.

¿Qué usamos?

Ya teníamos instalado Perl como vimos en el capítulo anterior . En este caso vamos a utilizar la otra base dedatos de la que disponíamos. Es decir vamos a utilizar la base de datos en formato DBase III. También vamosa cambiar el servidor PWS por el Sambar Web Server que teníamos instalado. No es por nada en particular,sólo para ir alternando entre las distintas tecnologías, bases de datos y servidores web para que veáis queno hay ningún problema. En particular con el DBI de Perl podemos acceder a cualquier base de datos OBDCtan sólo con modificar unas pocas líneas de código. Esto ya lo veremos.

El Módulo DBI

El módulo DBI es de increíble utilidad porque nos abstrae de cómo comunicarnos con cualquier tipo de basesde datos . El módulo DBI nos facilita una interfaz para que podamos enviar comandos SQL a cualquier Basede Datos. Escribimos un código standard que nos sirve para todas sin tener que reescribir ni una sola línea.El secreto está en la librería DBD (Database Dependent) que viene con la distribución standard de Perl 5. Estalibrería permite al DBI comunicarse con cualquier base de datos que necesite. Veamos gráficamente cómotrabaja todo el conjunto:

ACCESO A DATOS EN WEB

Page 105: Módulo_12_Acceso a base de datos desde con ASP

El CGI habla con el módulo DBI y este lo hace con DBD que tiene un driver para comunicarse con la base dedatos. Aunque para nosotros que vamos a programar en Windows 9x no nos importa mucho mientras tengael driver para OBDC ya que el sistema operativo se encargará de lo demás. Esto si es muy útil para los queprogramen en Linux o Unix.

API DBI

¿ Cómo se usa el módulo DBI?.

No es tan difícil aquí vamos a ver las características y métodos más comunes que nos hacen falta para nuestraaplicación y al final os dejo una tabla con todas las demás para el que quiera apurar hasta el máximo.

Lo primero es cargar el módulo DBI. Esto se hace con la directiva USE de perl.

Después el objeto conexión con la base de datos dándole el nombre de la base de datos, el del usuario, elpassword y el driver a usar. En nuestro ejemplo se haría como sigue:

use DBI;

$dbHandle = (DBI->connect(‘DBI:ODBC:Ejemplo2’, ‘Alejandro”, ‘12mw_l’));

Donde el nombre de la base de datos es Ejemplo2 y el driver es el ODBC. El usuario y el password no hacenfalta si en el ODBC no lo configurasteis.

Lo que queremos hacer normalmente con la base de datos ( en adelante BD ) después de conectar con ellasuele ser consultarla. Para ello preparamos la sentencia sql y la ejecutamos. Esto se hace :

use DBI;

$dbHandle = (DBI->connect(‘DBI:ODBC:Ejemplo2’, ‘Alejandro”, ‘12mw_l’));

$sql = “SELECT * FROM Clientes”;$statementHandle = $dbHandle->prepare($sql);$statementHandle->execute() ||

die $statementHandle->errstr;

21

ACCESO A DATOS EN WEB

Page 106: Módulo_12_Acceso a base de datos desde con ASP

Ya hemos ejecutado la consulta pero no hemos recogido los datos. Para esto vamos a utilizar un array.El método fetchall_arrayref() nos devuelve todas las filas devueltas por la consulta en un array.

use DBI;$dbHandle = (DBI->connect(‘DBI:ODBC:Ejemplo2’,

‘Alejandro”, ‘12mw_l’));

$sql = “SELECT * FROM Clientes”;$statementHandle = $dbHandle->prepare($sql);$statementHandle->execute() ||

die $statementHandle->errstr;

$arrayRef = $statementHandle->fetchall_arrayref;

$dbh->disconnect();cabar sólo tenéis que desconectar con el método disconnet();

Aquí tenéis los demás métodos del DBI

22

ACCESO A DATOS EN WEB

Page 107: Módulo_12_Acceso a base de datos desde con ASP

23

General DBI Class Methods

ACCESO A DATOS EN WEB

Page 108: Módulo_12_Acceso a base de datos desde con ASP

24

General Handle Methods

Database Handle Methods

ACCESO A DATOS EN WEB

Page 109: Módulo_12_Acceso a base de datos desde con ASP

25

Statement Handle Methods

Ejecutando el CGI

Como estamos usando el Sambar Web Server tenemos que situar nuestro cgi el el directorio cgi-bin de nuestroservidor y llamarlo desde nuestro navegador con una llamado como esta: “ http://127.1.1.1/cgi-bin/dbi_demo.cgi “ lo cual nos debe aparecer como se ve en la figura:

ACCESO A DATOS EN WEB

Page 110: Módulo_12_Acceso a base de datos desde con ASP

Aquí tienes el código fuente del CGI:

use DBI;use CGI;use CGI::Carp qw(fatalsToBrowser);

$dbName = “Ejemplo2”;$dbDriver = “ODBC”;$dbUserName = “”;$dbPassword = “”;

$dataIn = new CGI;$dataIn->header();$requestType = $dataIn->param(‘requestType’);$sql = $dataIn->param(‘sql’);

if ($sql eq “”){&printSearchForm();exit;}

else{$dbh = &connectToDB();$dataObject = executeSQLStatement($sql);@dbRows = &getDBRows($dataObject);if ($sql =~ /^SELECT/i)

{print qq!<HTML><HEAD><TITLE>SQL resultados</TITLE></HEAD><BODY BGCOLOR = “FFFFFF” TEXT = “000000”><CENTER><TABLE BORDER = “1”>!;foreach $rowReference (@dbRows)

26

ACCESO A DATOS EN WEB

Page 111: Módulo_12_Acceso a base de datos desde con ASP

{foreach $columnReference (@$rowReference)

{print qq!<TR>!;foreach $column (@$columnReference)

{print qq!<TD>$column</TD>\n!;}

print qq!</TR>!;}

}print qq!</TABLE></CENTER></BODY></HTML>!;exit;}

else{print “Your SQL Query has been processed, please hit the back button and submit a SELECT

to see the changes!”;}

}

sub connectToDB{return (DBI->connect($dbName, $dbUserName, $dbPassword, $dbDriver));}

sub executeSQLStatement{my ($sql) = shift;$dataObject = $dbh->prepare($sql);$dataObject->execute();return $dataObject;}

27

ACCESO A DATOS EN WEB

Page 112: Módulo_12_Acceso a base de datos desde con ASP

sub getDBRows{my ($dataObject) = shift;return $dataObject->fetchall_arrayref();}

sub printSearchForm{print qq!<HTML><HEAD><TITLE>Introduce la sentencia SQL</TITLE></HEAD><BODY BGCOLOR = “FFFFFF” TEXT = “000000”><FORM METHOD = “POST” ACTION = “dbi_demo.cgi”><TABLE BORDER = “1”><TR><TH>Introduce la sentencia SQL</TH><TD><INPUT TYPE = “TEXT” SIZE = “40” NAME = “sql”></TD><TD><INPUT TYPE = “SUBMIT” NAME = “requestType” VALUE = “Enviar SQL”></TD></TR></TABLE></FORM></BGODY></HTML>!;}

PHP3

El PHP3 es otro lenguaje de script que nos permite programar aplicaciones que se ejecutarán en nuestroservidor. Es uno de los lenguajes más utilizados en el mundo Unix con el servidor Apache aunque también sepuede ejecutar bajo Windows.

¿Qué utilizamos?

Ya teníamos instalado PHP3 como vimos en el capítulo anterior . En este caso vamos a utilizar la base de datosen formato Access de nuevo junto con el PWS. Por aquello de ir alternando uno y otro.

28

ACCESO A DATOS EN WEB

Page 113: Módulo_12_Acceso a base de datos desde con ASP

El Lenguaje PHP3

Lo primero que le indicamos al browser es que vamos a ejecutar código PHP3. Esto lo hacemos con la directiva<?php para que sepa cómo interpretarlo.Lo demás es bastante parecido a perl o a asp. Se trabaja con objetos.Primero creamos el objeto conexión:

$cnx = odbc_connect( ‘Ejemplo1’ , ‘Alejandro’, ‘pasword’ ); if (!$cnx) {

Error_handler( “Error al conectar odbc” , $cnx ); }

Después definimos la sentencia sql:

$SQL_Exec_String = “select * from Clientes”;

Lo ejecutamos:

$cur= odbc_exec( $cnx, $SQL_Exec_String ); if (!$cur) {

Error_handler( “Error en odbc_exec( ) “ , $cnx ); }

Obtenemos los resultados en un objeto cursor y se los mandamos al cliente en una tabla.

echo “<table border=1><tr><th>Dni</th><th>Nombre</th>”. “<th>Apellido1</th><th>Apellido2</th></tr>\n”;

$nbrow=0; //Variable local para contar el nº de filas while( odbc_fetch_row( $cur ) ) {

$nbrow++; $Dni= odbc_result( $cur, 1 ); $Nombre= odbc_result( $cur, 2 ); $Apellido1= odbc_result( $cur, 3 ); $Apellido2= odbc_result( $cur, 4 );

echo “<tr><td>$Dni</td><td>$Nombre</td>”. “<td>$Apellido1</td><td>$Apellido2</td></tr>\n”;

}

echo “<tr><td colspan=2>$nbrow entradas en la bd </td></tr></table>”;

29

ACCESO A DATOS EN WEB

Page 114: Módulo_12_Acceso a base de datos desde con ASP

30

Cerramos la conexión.

odbc_close( $cnx);

Como veis es bastante sencillo y parecido a todos los demás lenguajes scripts.

Insertar, borrar, etc..

Para las demás opciones de la base de datos ( insertar, Borrar, modificar ...) tan sólo tenemos que modificarle sentencia sql y volver a hacer un select * para devolver la nueva tabla al usuario, como se ve en el ejemplo:

function Enter_New_Entry($Dni,$Nombre,$Apellido1,$Apellido2) {

$cnx = odbc_connect( ‘Ejemplo1’ , ‘Alejandro’, ‘Password’ ); if (!$cnx) {

Error_handler( “Error en odbc_connect” , $cnx ); }

$SQL_Exec_String = “Insert Into Clientes (dni, Nombre, Apellido1, Apellido2) Values (‘$Dni’, ‘$Nombre’, ‘$Apellido1’, ‘$Apellido2’)“;

$cur= odbc_exec( $cnx, $SQL_Exec_String ); if (!$cur) {

Error_handler( “Error en odbc_exec( ) “ , $cnx ); }

odbc_close( $cnx); }

ACCESO A DATOS EN WEB

Page 115: Módulo_12_Acceso a base de datos desde con ASP

Ejecutando el CGI

Hemos Creado dos ficheros php3 uno es el que nos enseña el estado actual de la base de datos y nos presentaun formulario por si queremos añadir un registro a ella.

El segundo fichero es la respuesta a la inserción que hemos realizado y nos presenta el estado de la BD antesde insertar y después.

Debes copiar los dos en un directorio de tu servidor con permiso de ejecución.

Salida:

31

ACCESO A DATOS EN WEB

Page 116: Módulo_12_Acceso a base de datos desde con ASP

INTRODUCCIÓN AL COMERCIO ELECTRÓNICO EN LA WEB

© élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.

Page 117: Módulo_12_Acceso a base de datos desde con ASP

Introducción al Comercio Electrónico

El término “comercio electrónico” ha evolucionado desde su significado original de compra electrónica alsignificado actual que abarca todos los aspectos de los procesos de mercado y empresa habilitados porInternet y las tecnologías de la World Wide Web.

Comercio electrónico entendido como venta online. Escuetamente, comercio electrónico significa hacernegocios online o vender y comprar productos y servicios a través de escaparates Web. Los productoscomercializados pueden ser productos físicos como coches usados o servicios (por ejemplo, viajes, consultasmédicas online, y educación a distancia). También pueden ser productos digitales como noticias, imagen ysonido, bases de datos, software y todos los tipos de productos relativos a la información. Entendido así, elcomercio electrónico se parece a la venta por catalogo o la teletienda.

Comercio electrónico entendido como mercado. El comercio electrónico no está limitado a comprar y venderproductos online. Por ejemplo, una tienda de barrio puede abrir una tienda Web y reencontrarse con elmundo. Pero, además de clientes, también puede encontrar suministradores, inversores, servicios de pago,agencias gubernamentales y competidores en la red. Estos nuevos personajes online o digitales provocancambios en la forma de hacer negocios desde la producción al consumo, y afectarán a empresas que quizáni siquiera piensen que forman parte del comercio electrónico. Aparte de la venta online, el comercioelectrónico nos conducirá a cambios significativos en la forma de personalizar, distribuir e intercambiarproductos y en la forma que tienen los consumidores de buscar y comprar productos y servicios y tambiénde consumirlos.

ACCESO A DATOS EN WEB

2

Page 118: Módulo_12_Acceso a base de datos desde con ASP

En pocas líneas, la revolución que supone el comercio electrónico reside en sus efectos sobre los procesos.La definición orientada al proceso del comercio electrónico ofrece una visión más general de lo quérepresenta el comercio electrónico. Los procesos internos de la empresa (como, por ejemplo, la manufactura,el inventariado, administración contable) y los procesos empresa-a-empresa (como, por ejemplo, laadministración de la cadena de abastecimiento o licitaciones) quedan afectados por la tecnología y la reden igual medida que los procesos empresa-a-cliente. Incluso las funciones gubernamentales, educativas,sociales y procesos políticos sufren estos cambios.

Los ordenadores y redes no son nada nuevo. Llevan ya mucho tiempo presentes y existen aplicaciones denegocios como LAN y EDI que ya estaban bien asentadas mucho antes de que apareciera la World Wide Web.Entonces, ¿Por qué este repentino interés general por la Era Digital y el avance del comercio electrónico?

Hay dos cosas que hacen a Internet muy diferente de cualquier otro medio de comunicación existente. Alcontrario que los medios de radiodifusión, Internet permite la comunicación en las dos direcciones y estádesarrollada a partir de estándares abiertos. Comunicación en las dos direcciones significa que se puedeidentificar al receptor y que existe posibilidad de realimentación por parte de este. Los medios deradiodifusión envían mensajes dirigidos a “nadie en particular” y sin saber muy bien quiénes han recibido elmensaje. Un estándar abierto (como TCP/IP) nos da interoperabilidad y la ventaja de participar en un ampliomercado junto con la posibilidad de integrar un producto o proceso con otros.

Ambas características están siendo desafiadas. Para la generación WebTV, el futuro digital es como otraversión de la vieja radiodifusión pasiva unidireccional. El “nuevo medio” agrupa la visión de las empresas decomunicaciones y productoras de contenidos sobre el medio digital. Estamos acostumbrados a “recibirmensajes aleatorios” que normalmente olvidamos el hecho de que la radiodifusión ha sido un fenómenoexclusivo del siglo XX. Incluso la “televisión interactiva” augurada por medios actuales es sólo una forma deproporcionar un entretenimiento más eficaz, ofreciendo más información “relacionada con contenidosexistentes” (por ejemplo, información detallada sobre personajes, argumentos, y anuncios publicitarios dela televisión). La radiodifusión la TV digital multicanal puede muy bien ser un modelo para el entretenimientofuturo, pero hay que recordar que es sólo una aplicación de la red de comunicaciones digitales. Lacomercialización de Internet está forzando a las empresas a diferenciar sus productos creando productosincompatibles con los demás. Al contrario que la Internet pública dónde los estándares eran abiertos, lasfirmas empresariales intentan capturar y dominar el mercado con sus productos propietarios. En un entornode este tipo, TCP/IP tendría una oportunidad muy pequeña de convertirse en un estándar y abrirdefinitivamente la economía digital, de red. La cuestión sobre si los mercados dirigidos por intereses privadospueden proporcionar un mejor resultado (como, por ejemplo, un sistema tecnológicamente superior, etc.)sigue siendo todavía un debate falto de argumentos.

3

ACCESO A DATOS EN WEB

Page 119: Módulo_12_Acceso a base de datos desde con ASP

Quizás las redes telefónicas sean bastante similares a Internet (realmente la mayoría del tráfico en Internetpasa a través de las redes telefónicas). Pero al contrario que los teléfonos, el interfaz de usuario en Internet(el ordenador) es mucho más sofisticado y flexible. Debido a sus inicios como red de investigación pública,Internet no tiene la tarificación propia de las compañías telefónicas. La conexión mundial, por lo tanto,puede ser considerada un accidente. Si se aplicaran las tarifas basadas en la utilización y en la distancia,Internet se parecería mucho a la red telefónica.

Los participantes en el mercado electrónico no están limitados a las así llamadas empresas de productosdigitales como puedan ser las empresas dedicadas a la edición, software, entretenimiento e información. LaEra Digital y la revolución digital nos afectan a todos gracias a sus innovaciones sobre los procesos. Al final,a través de la WebTV y la televisión digital, la forma en que vemos las noticias y programas deentretenimiento en la televisión cambiarán. Los cambios en las telecomunicaciones afectarán a la forma enque recibimos la información, anuncios, pedidos, etc. Al igual que los teléfonos, los faxes, las fotocopiadoras,los PCs y las impresoras se han convertido en ingredientes esenciales en los negocios, también lo harán elcorreo electrónico, los sitios Web, y las comunicaciones digitales integradas.

Aunque las máquinas de oficina actuales no están integradas (por ejemplo, todavía los pedidos por fax hayque escribirlos primero en el ordenador), la “convergencia” de la que tanto se ha hablado llevará con eltiempo a todos esos equipos a una única plataforma digital, ya sea un ordenador conectado a Internet y aintranets, o una nueva clase de dispositivo capaz de interactuar con otros dispositivos, si existen undispositivo que demuestre se más efectivo y productivo. (¿será más fácil de utilizar? Eso dependerá de haprioridad que le den los desarrolladores e industrias a la interoperabilidad y estandarización.)

4

ACCESO A DATOS EN WEB

Page 120: Módulo_12_Acceso a base de datos desde con ASP

CASO DE ESTUDIO: Amazon.com contra Barnes & Noble

Incluso las aparentemente mundanas tiendas de libros se enfrentan a diferentes desafíos en el mercadoelectrónico debido a los procesos digitales involucrados en sus operaciones comerciales. El caso deAmazon.com contra Barnes & Noble nos demuestra que la propia definición de “tienda” tiene que serevaluada de nuevo. También tiene que ver con el tema de los impuestos en Internet.

La distribución de libros requiere numerosas terminaciones (tiendas de libros locales) para proporcionar unacceso conveniente a los clientes. Al mismo tiempo, la venta por correo ha sido utilizada por los librerosdurante décadas. Llevando esta idea a Internet, Amazon.com se ha convertido en el líder de la venta de librosonline, anunciándose a sí misma como “la mayor librería del mundo” sin abrir numerosas tiendas localessino vía Internet. La “tienda más grande del mundo”, Barnes & Noble con un elevado reparto de beneficiosy tiendas físicas, se ha visto obligada a responder al desafío de Amazon.com abriendo su propia tienda webasí como poniendo un pleito contra su competidor. (Véase La lucha entre la mayor y la más grande) ¿Cuálesson las estrategias competitivas de estas dos librerías? ¿Podría enfrentarse cualquier empresa de venta deproductos a una competencia similar?

AMAZON.COM ACUSA BARNES & NOBLE En el último asalto en la escalada de ataques entre la pionera en laventa de libros online Amazon.com y Barnes & Noble, Amazon.com ha presentado un litigio contra Barnes &Noble, alegando que la esta entidad debería pagar impuestos por los libros que vende a través de Internet.El argumento de Amazon se basa en el hecho de que B&N, no como Amazon.com, tiene presencia física enla mayoría de los estados a través de su cadena de más de 1000 tiendas que constituyen por tanto el “nexo”de actividad en cada estado. Uno de los abogados de B&N ha dicho que “no existe fundamento” para lasacusaciones de Amazon. En mayo, Barnes & Noble interpuso una demanda contra Amazon.com alegando queanunciarse como “la mayor librería del mundo” era publicidad engañosa. (Wall Street Journal 22 de Agostode 1997)

Internet y Extranet, dos conceptos.

Las intranets y extranets se han puesto de moda. Sólo expondremos definiciones breves. Las intranets yextranets comparten el mismo protocolo (TCP/IP) y las mismas tecnologías Web con Internet. Una intranetes un red cerrada limitada a la extensión de una empresa, pero que utiliza estándares abiertos como TCP/IPen lugar de los tradicionales protocolos propietarios utilizados en las LANs (redes de área local, normalmentecableadas) y en las WANs (redes de área extensa, normalmente LANs conectadas por cable, teléfono yconexiones sin cable). Una extranet es una WAN privada que utiliza protocolos públicos. Es decir, unaextranet es una red virtual privada entre grupos privados basada en redes y protocolos abiertos. Para asegurarla seguridad y privacidad, una extranet se apoya en canales seguros utilizando protocolos especiales e

5

ACCESO A DATOS EN WEB

Page 121: Módulo_12_Acceso a base de datos desde con ASP

identificadores digitales. En una línea, una extranet es una calle privada construida sobre suelo público(aunque los costes pueden ser sufragados por grupos privados).

El comercio electrónico

Los mercados electrónicos por norma se refieren a ventas y subastas online, por ejemplo, mercados decomercio de stocks online, subasta online de ordenadores y otros artículos. El comercio electrónico se refiereal emergente mercado económico donde los productores, intermediarios y consumidores interactúanelectrónicamente o digitalmente de alguna forma. El mercado electrónico es un representante virtual demercados físicos. Las actividades económicas a cargo de este mercado electrónico colectivamente representala economía digital. El comercio electrónico, en su definición más amplia, es aquel que concierne al mercadoelectrónico.

El mercado electrónico nos recuerda a los mercados físicos (los únicos que conozcemos) en muchos aspectos.Como en los mercados físicos, entre los componentes de la economía digital se incluyen:

- participantes (agentes del mercado como empresas, abastecedores, intermediarios, tiendas yconsumidores) productos (artículos y servicios;) y

- procesos (abastecimiento, producción, marketing, competición, distribución, consumo, etc.).

La diferencia estriba en que en el mercado electrónico, al menos alguno de estos componentes eselectrónico, digital, virtual u online (escoja el término que prefiera). Por ejemplo, un participante digitales alguien con una dirección de correo electrónico o una página Web. Los vendedores puramente “físicos”pueden estar vendiendo un producto digital, por ejemplo, un CD-ROM digital. Alguien que venda productosfísicos en una tienda física puede ofrecer información sobre los productos online (permitiendo a losconsumidores “buscar online”), mientras que la producción, pedido, pago y distribución siguen realizándosede forma convencional. Actualmente, el énfasis se pone sobre el núcleo del mercado electrónico donde todo(por ejemplo, todas las actividades del negocio) se realizan online. Pero si algún aspecto su negocio oconsumo se desarrolla sobre un proceso digital, usted forma parte del mercado digital. Es decir, ¡casi todosnosotros somos ya participantes en el mercado electrónico!

¿Es el mercado electrónico un mercado perfecto, “libre de fricciones”? ¿Llegarán los costes de transaccióna cero? ¿Será el mercado perfectamente competitivo, consiguiendo los precios más bajos posibles? ¿Se debedejar a este mercado avanzar libremente para que marche hacia estas predicciones? Superficialmente, elmercado electrónico parece ser un mercado perfecto, donde hay numerosos vendedores y compradoresinternacionales, que a su vez poseen abundante información sobre el mercado y los productos, y donde los

6

ACCESO A DATOS EN WEB

Page 122: Módulo_12_Acceso a base de datos desde con ASP

intermediarios no son necesarios. Un mercado de esta clase debe ser muy competitivo y eficiente (sinnecesidad de ser regulado o intervenido).

Sin embargo, un examen más detenido indica que la búsqueda del consumidor no es muy eficiente (debidoal coste que supone una base de datos completa y de fácil utilización, y porque los vendedores quizá noproporcionen toda la información necesaria). Aunque los vendedores al por mayor y al por menor puede queno sean necesarios, hay otros tipos de intermediarios esenciales para que el mercado electrónico funcioneadecuadamente (por ejemplo, autoridades de certificación, centros comerciales electrónicos que garanticenla calidad de los productos, mediadores para los convenios y la resolución de conflictos, etc.). Todos estosagentes añaden costes a la transacción.

¿Serán los precios más bajos? Los productos digitales son altamente personalizables debido a sutransmutabilidad, facilidad para revisar, reorganizar y editar. Con información suficiente sobre los gustosdel consumidor, los productos estarán diferenciados (o “personalizados”, como las noticias personalizadas).El número de vendedores potenciales puede ser bajo, o incluso sólo uno, en un mercado altamentediferenciado y segmentado, y el precio tenderá a aproximarse al máximo precio que el comprador estédispuesto a pagar. (En términos económicos, los vendedores practican una discriminación de precios en“primer grado o perfecta”, que es exactamente lo contrario de lo obtendríamos en un mercadoperfectamente competitivo.)

¿Qué pasa con el a menudo proclamado “coste marginal cero“ por el que los productos digitales tendrían unprecio cero (gratuito) debido a sus costes de reproducción mínimos? El precio se aproximaría a cero sólo siel coste marginal realmente se hace cero y existe una competencia efectiva entre los vendedores.Resumiendo, el coste marginal de un producto digital puede ser substancial. Incluso cuando se acerque acero, los precios en un mercado no competitivo se determinarán más por la demanda (o la disposición delcomprador a pagar) que por el coste marginal. A menos que pensemos que toda la información y productosdigitales no tienen valor, los vendedores con poder en el mercado nunca le pondrán un precio cero. (Que denproductos gratis hoy no significa que los vendedores lo hagan porque los costes sean cero ni que lo siganhaciendo cuando monopolicen el mercado.)

Las empresas centradas en el comercio electrónico comenzaron hace más de dos décadas con la introduccióndel intercambio electrónico de datos (EDI) entre firmas comerciales (envío y recibo de pedidos, informaciónde reparto y pago, etc.) Incluso el comercio electrónico orientado al consumidor tiene también una largahistoria: cada vez que utiliza un cajero automático o presenta una tarjeta de crédito, está efectuando unatransacción electrónica. EDI y ATM, sin embargo, operan en un sistema cerrado; son un medio decomunicación más conveniente, estrictamente entre las partes involucradas.

7

ACCESO A DATOS EN WEB

Page 123: Módulo_12_Acceso a base de datos desde con ASP

La World Wide Web (WWW), la parte cliente-servidor de Internet, ha abierto una nueva era combinando elcarácter abierto de Internet con un interfaz de usuario sencillo. La WWW fue creada en el Laboratorio defísica de partículas CERN en Ginebra en 1991 (con Mosaic, el predecesor de Netscape). Le llevó dos años aMosaic penetrar en Internet, y otros dos años antes de que las empresas y el público en general se dierancuenta de su potencial.

El CE, e Internet, no es una moda pasajera, se puede observar en sus efectos internacionales. Algunos puedenencontrar inútil abrir una tienda web; pero las tiendas web no son el comercio electrónico ni la economíadigital. Se desarrollarán nuevos tipos de interfaces (navegadores y protocolos) y nuevas redes (privatizadas),pero lo que la WWW representa es nuestra marcha imparable hacia la economía digital y la sociedad basadaen el conocimiento. Las tecnologías, la Web y otros procesos son sólo medios para alcanzar esa meta.

Los procesos del CE actual están basados en los ordenadores personales debido al origen de Internet, una redde ordenadores. La primera etapa de la expansión del CE reside en la base instalada de usuarios de ordenador(más usuarios “conectados”). La segunda ola vendrá cuando más gente tenga acceso a los ordenadores (víaprecios más bajos de los ordenadores o a través de dispositivos más baratos). La tercera, y más importante,expansión se predice que vendrá de aquellos con un acceso a la red global a través de un medio distinto delordenador: a través de TV de radiodifusión, TV por cable, redes telefónicas y nuevas aplicaciones. Un usomás amplio de estos medios de acceso baratos representa la fase de “llevar los ordenadores del centro detrabajo a la sala de estar de casa”.

Sin embargo, el precio de estos dispositivos, la facilidad de uso o el modo de acceder a la red son menosimportantes que la forma en que utilizaremos estos dispositivos. Convertir el ordenador en un dispositivo tanconveniente como la TV es una meta actual. Por ejemplo, la tecnología voz-a-texto hará la introducción dedatos manual innecesaria en un futuro cercano. En términos de productividad, es difícil convencerse de queel hardware y software informático ha cumplido nuestras expectativas para de hacer nuestro trabajo y vidamás fácil o más productiva durante la última década. ¿Pero que haremos con estos nuevos inventos cuandolos tengamos? ¿Transmitiremos la misma información pero de forma más conveniente? ¿Venderemos el mismoentretenimiento y programas de TV pero con más brío? El factor limitador será nuestra propia limitación demiras sobre el futuro electrónico.

8

ACCESO A DATOS EN WEB

Page 124: Módulo_12_Acceso a base de datos desde con ASP

En este caso tendrás que acceder a una base de datos de Access, usando los objetos del espacio denombres OLEDB.

Las tareas que tendrás que realizar serán las siguientes:

- Crear una conexión a la base de datos.- Mostrar las tablas de la base de datos indicada.- Mostrar las columnas (o campos) de una tabla.- Crear un DataAdapter para acceder a los datos devueltos por una consulta.

ACCESO A DATOS EN WEB

1

© élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.

Page 125: Módulo_12_Acceso a base de datos desde con ASP

Siguiendo con el caso anterior habrás de realizar las siguientes tareas adicionales:

- Crear un DataSet basado en los datos asociados al DataAdapter.- Crear nuevos registros.- Eliminar registros.- Mostrar el contenido de la tabla en un control ListView.- Guardar la información mantenida en memoria a la BD

ACCESO A DATOS EN WEB

1

© élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.