Tutorial de ASP.NET
Vista Previa de ASP.NET 2.0

Trabajando con Bases de Datos en VWD

Working with Databases in Visual Web Developer 2005 Express Edition

Visual Web Developer 2005 Express Edition incluye SQL Server 2005 Express Edition, una edición gratuita de SQL Server 2005 para desarrolladores amateurs que quieren una solución simple de base de datos para realizar sus aplicaciones. Debido a que SQL Server Express soporta el modelo de programación de SQL Server completo (SQLCLR, T-SQL, procedimientos almacenador, vistas, triggers y el tipo de datos XML), podemos ir acostumbrándonos a esta tecnología utilizando SQL Server Express, al mismo tiempo que nos aseguramos que nuestra aplicación sigue funcionando conun SKU de alto nivel, cómo SQL Server Enterprise Edition. SQL Express es fácil de descargar y configurar (ocupa menos de 36MB), y está incluido en el Visual Studio 2005 y Visual Web Developer 2005.

Visual Studio incluye herramientas para la administración de la base de datos, como el "Database Explorer" (explorador de base de datos) y el "Query Builder" (creador de peticiones), qué pueden ser usadas con las bases de datos de SQL Server Express. Visual Studio también soporta un nuevo acceso a bases de datos basado en ficheros para la creación de bases de datos SQL Server Express como parte de nuestro proyecto. Juntos, Visual Studio 2005 y SQL Server 2005 Express proporcionan una solución completa para construir y desplegar aplicaciones Web orientadas a datos, incluyendo las siguientes características:
  • Elemento de proyecto de base de datos
  • Conexiones a base de datos local
  • Administración mediante "Explorador de Bases de Datos"
  • Cadenas de Rutas de Conexiones Relativas
  • Soporte para el despligue de XCopy
  • Soporte para la depuración integrado
Esta sección describe el acceso a bases de datos basado en ficheros en el Visual Studio 2005 y cómo crear y usar estas bases de datos desde el diseñador.

Visual Web Developer y los Datos

Visual Web Developer proporciona herramientes para trabajar con las bases de datos que utilizan nuestras aplicaciones web. Podemos conectarno fácilmente e una base de datos y crear o ver los diagramas o esquemas de la base de datos mediante el Explorados de Bases de Datos. También podemos preguntar a la base de datos y llenar los datos mediante el diálogo "Query Builder" y la rejilla "Query results". La creación de una nueva base de datos (mediante un fichero local) se muestra cómo un elemento del proyecto (descrito más adelante).

Una vez tenemos conexión a la base de datos en Visual Web Developer, podemos arrastrar y dejar caer las tablas directamente en la páginas para crear un control GridView enlazado a datos. Visual Web Developer crea automáticamente un control de fuente de datos asociado y configurado para las operaciones Select, Update, Insert y Delete en dicha tabla. Este "atajo" nos puede ahorrar el esfuerzo de tener que crear unaa duente de datos manualmente, y podemos reemplazar fácilmente el GridView por el control enlazado a datos más apropiado para nuestro escenario.

Bases de Datos Locales y de Servidor

Probablemente estemos familiarizados con las bases de datos de sevidor y las cadenas de conexión. Es esta configuración, un servidor de bases de datos como SQL Server 2005 asocia un nombre de base de datos a un fichero de base de datos que es adjuntado y mantenido por el servidor. Podemos conectarnos a una base de datos de servidor mediante una cadena de conexión que especifique el nombre del servidor, el de la base de datos y un esquema de autenticación, por ejemplo:
"server=(local)\SQLExpress;database=Pubs;Integrated Security=true"
Sin embargo, Visual Studio 2005 también soporta la noción de base de datos local, que se añade como un fichero al directorio App_Data de la actual aplicación Web. El directorio App_Data es un lugar seguro en el que almacenar los ficheros de datos, ya que el contenido de este directorio nunca se sirve a peticiones de clientes. Además también es la ubicación recomendada para fichero XML y otros almacenes de datos. Una base de datos local de SQL Server Express tiene una extensión .MDF, por ejemplo "MyDatabase.MDF", que es el tipo de fichero estándar soportado por SQL Server. Cuando estamos conectados a un servidor, la base de datos también tiene un fichero de log asociado, por ejemplo "MyDatabase.LDF". Los ficheros de la base de datos y de log deben ser movidos conjuntamente.

Un fichero de base de datos local se adjunta a SQL Server Express de forma dinámica a través del uso de una cadena de conexión de ruta relativa. La ruta relativa asegura que la aplicación puede moverse a otra ubicación sin romper la conexión a la base de datos. Una cadena de conexión de ruta relativa en una aplicación Web se especifica de la siguiente forma:
"server=(local)\SQLExpress;AttachDbFileName=|DataDirectory|MyDatabase.mdf;Integrated Security=true;User Instance=true"
Hay dos propiedades adicionales de la cadena de conexión anterior. La propiedad AttachDbFileName especifica la ubicación del ficher de la base de datos que se adjuntará al servidor de forma dinámica cuando se abra la conexión. Aunque esta propiedad puede aceptar una ruta completa a la base de datos, este ejemplo usa la sintaxis |DataDirectory|, que se substituirá por el path al directorio App_Data de la aplicación Web en tiempo de ejecución. Ésto es lo que permite a la aplicación ser movida a una ubicación diferente sin romper la conexión. En segundo lugar, la propiedad User Instance=true dicta la forma en la que SQL Server Express atará la base de datos. En este caso, SQL Server Express engendra un nuevo proceso que correrá como el usuario que ha abierto la conexión para atar la base de datos a esta nueva instancia. En aplicaciones ASP.NET, este usuario será la cuenta local ASPNET o el Network Service, dependiendo del sistema operativo. Una instancia de usuario separada de SQL Server es necesaria para adjuntar de forma segura ficheros desde una cuenta sin permisos de administración, cómo la cuenta ASP.NET.


Importante: Debido a que todas las aplicaciones ASP.NET corren bajo la misma cuenta de usuario por defecto, todas las aplicaciones ligarán bases de datos locales a la misma instancia de SQL Server Express. Ésto implica que todas las aplicaciones tendrán el mismo acceso a todas las bases de datos ligadas a esta instancia, independientemente de la aplicación individual que ligó la base de datos inicialmente. Para aislar las aplicaciones cuando usamos SQL Sever Express, debemos ejecutar cada aplicación en un proceso diferente o "application pool" (bajo IIS 6). Por esta razón, las bases de datos localoes de SQL Server se consideran una comodidad para el desarrollo, y no un reemplaxzo de las bases de datos de servidos en escenarios de hosting compartido. Para más información sobre cómo mover los contenidos de una base de datos local a una base de datos de servidor, acudid al punto de "despliegue" del final de esta sección.

Otro punto importante es que dos usuarios no deben estar conectados a la misma base de datos al mismo tiempo. Cuándo diseñemos una aplicación en Visual Studio, el diseñador se tiene que preocupar de liberar automáticamente las conexiones para permitir al Visual Studio y ASP.NET  compartir el acceso al fichero (cuando ejecutamos la aplicación para depurar desde el diseñador, por ejemplo).

Creando una Base de Datos Local

Podemos crear de forma sencilla una base de datos local en un proyecto de aplicación Web en Visual Studio. Siempre que instalemos SQL Server Express con Visual Studio, podremos seguir los siguientes pasos para crear una base de datos local, añadir tablas y rellenar los datos.

Para crear una base de datos local:
  1. Hacemos clic con el botón derecho sobre "Solution Explorer" y seleccionamos la opción "Add New Item...".
  2. Seleccionamos el elemento "SQL Database" y le damos un nombre, por ejemplo "Database.mdf".
  3. Visual Studio nos pedirá si queremos añadir el fichero al directorio "App_Data". Hacemos clic en "Yes".
  4. Visual Studio añadirá el fichero y se conectará automáticamente a la base de datos mediante el "Database Explorer".
Upload/figure6.gif


















Para añadir una tabla a la base de datos local:
  1. Hacer clic con el botón derecho en el nodo "Tables" del "Database Explorer" y seleccionar la opción "Add New Table".
  2. Intorducir los nombres y tipos para las columnas de la base de datos, estableciendo de forma opcional, las propiedades de las columnas en la rejillas de propiedades. Para crear una base de datos de contactos de ejemplo, seguid los siguientes pasos.
  3. Estableced el nombre de la primera columna a "ContactID" y establecer el tipo de datos a "int". Deseleccionar el checkbox "Allow Nulls" de la columna.
  4. Hacer clic con el botón derecho en la casilla gris con una flecha, al lado de la columna ContactID, y seleccionar la opción "Set Primary Key".
  5. En la columna "Properties grid", debajo de la rejilla de columnas, expandir el nodo "Identity Specification" y fijar "Is Identity" a "Yes".
  6. Establecer el segundo nombre de columna a "ContactName" y establecer el tipo de datos a "varchar(50)". Dejar el checkbox "Allow Nulls" seleccionado.
  7. Teclear Ctrl-S para salvar la tabla y darle el nombre "Contacts". Hacer clic en OK para salvarla.
  8. Cerrar la ventana de definición de tablas.
Upload/figure4.gif









Para rellenar una tabla con datos:
  1. Hacer clic con el botón derecho sobre el nodo de la tabla (por ejemplo "Contacts") en el "Database Explorer" y selecionar la opción "Show Table Data".
  2. Introducir los datos en las columnas de nuestra tabla en el cuadro de resultados. Si seguimos el ejemplo de "Contacts", podemos introducir valores para "ContactName" y la base de datos generará de forma automática los valores de "ContactID".
  3. Cerrar el cuadro de resultados.
Upload/figure5.gif





Enlazando a una base de datos local

Para enlazar a una base de datos local podemos configurar un control de fuente de datos de ASP.NET para conectarse al fichero mediante una conexión de ruta relativa. Para enlazar fácilmente una base de datos SQL Server Express  a un control SqlDataSource y GridView, seguiremos estos pasos:
  1. Hacer doble clic en una página en el "Solution Explorer", por ejemplo "Default.aspx". Visual Studio abrirá el fichero.
  2. Seleccionar la pestaña "Design View"  debajo de la ventana de la página para cambiar a la Vista de Diseño.
  3. Hacer doble clic sobre el fichero de base de datos en el "Solution Explorer", por ejemplo "Database.mdf". Visual Studio abrirá el "Database Explorer" para esta conexión.
  4. Expandir los nodos de las tablas para mostrar las tablas de la base de datos.
  5. Arrastras y dejar caer una tabla desde el "Database Explorer" a la ventana de la página abierta en "Design View". Visual Studio creará un GridView enlazado a un control SqlDataSource.
  6. Expandir el "Smart Task Panel" en el control GridView y permitir la paginación, clasificación y edición para la rejilla.
  7. Teclear Ctrl-F5 para ejecutar las página (sin depurar).
El siguiente ejemplo muestra un GridView y un SqlDataSource conectados a una base de datos. Para ejecutar este ejemplo, la cuenta con la que se ejecuta el proceso ASP.NET debe tener permisos de lectura/Escritura en los ficheros MDF y LDF del directorio ~/App_Data. Para asegurar estos permisos seguid los siguientes pasos:
  1. Seleccionar el fichero ~/App_Data/Database.MDF  en el explorador de Windows y seleccionar sus Propiedades
  2. Seleccionar la pestaña de Seguridad y hacer clic en añadir...
  3. Hacer clic en Ubicaciones..., seleccionar nuestro ordenador (a principio de la lista) y hacer clic en OK
  4. En el area de texto de nombres del objeto, escribir el nombre de la cuenta del proceso ASP.NET. Por defecto es "Network Service" en IIS 6 o "ASPNET" en IIS 5.x
  5. Comprobar que está seleccionado "Lectura" y "Escritura" en la columna de permitir y hacer clic en OK
  6. Repetir esta operación con el fichero LDF del directorio App_Data, si existe
Si hemos creado la aplicación en nuestro ordenador mediante Visual Studio, los permisos que se mencionan arriba ya estarán garantizado spor defecto en el directorio App_Data. Si necesitamos modificar los permisos del fichero de la base de datos después de adjuntarlo, tendremos que apagar el dominio de la aplicación para que los permisos se apliquen. Acudid a la información de abajo "app_offline" para instrucciones de apagado de la aplicación ASP.NET.

C# Enlazando a una Base de Datos Local


Despliegue de la Base de Datos Local

Un beneficio de una base de datos local es que se puede mover fácilmente como parte de la aplicación a otra ubicación o máquina (siempre que es dicha máquina también esté ejecutándose SQL Server Express). Para mover la base de datos, el fichero debe desbloquearse. Mientras que un diseñador o aplicación estén conectados a la base de datos, el fichero permanecerá bloqueado. Para desbloquear la base de datos, todas las conexiones activas a la base de datos deben cerrarse. Podemos cerrar dichas conexiones mediante las siguientes técnicas:
  • Si ASP.NET tiene conexiones abiertas, podemos apagar la aplicación añadiendo un fichero llamado "app_offline.htm" al directorio raíz de la aplicación Web. Ésto tiene el efecto de apagar el dominio de la aplicación (no el proceso) y redireccionar todas las peticiones que se hacen a la aplicación a este fichero (devolviendo una respuesta de código 404). Para permitir que la aplicación se reinicie, sólo tendremos que borrar este fichero. Observad que el simple hecho de cerrar las conexiones en el código de nuestra página no libera el bloqueo del fichero, porque por defecto la conexión ADO.NET mantiene las conexiones activas.
Visual Studio proporciona la característica Copy Web para mover los ficheros de aplicación desde el directorio de trabajo a un servidor, mediante xcopy, FTP o las Extensiones de Servidor de FrontPage. El servidor objetivo puede ser local o remoto. Para llamar a la característica de Copy Web elegiremos "Website > Copy Web Site..." en la barra de menú de Visual Studio.

Mientras copiamos la base de datos usando Copy Web o una simple operación xcopy o FTP, la máquina objetivo debe estar ejecutando también SQL Server Express (baja la instancia del mismo nombre) para que la aplicación continúe funcionando. Cómo hemos comentado arriba, debido a que las aplicaciones que se ejecutan como ASP.NET se conectan a la misma instancia SQL, todas las aplicaciones de la máquina objetivo deben confiar las unas en las otras. En máquinas en las que las aplicaciones no podrán ver las bases de datos del resto, el enfoque basado en servidor (usando autenticación SQL o otra técnica de aislamiento) se recomienda en lugar de una base de datos local. Si usamos SQL Server Express como herramienta de desarrollo, necesitaremos copiar los contenidos de la base de datos a la base de datos que proporciona el servidor, como parte del despliegue de producción.