VWD2005 incluye SQL Server 2005 Express Edition, una versión gratuita de SQL Server 2005 dirigida a desarrolladores entusiastas o no profesionales que desean crear aplicaciones con una solución de base de datos sencilla. Debido a que SQL Server Express admite el modelo completo de programación de SQL Server, como SQLCLR, T-SQL, procedimientos almacenados, vistas, desencadenadores y tipos de datos XML, puede utilizar SQL Server Express para aprender sobre estas tecnologías y asegurarse de que sus aplicaciones puedan ejecutarse. En plataformas de nivel superior (como SQL Server Enterprise Edition). SQL Server Express es fácil de descargar e instalar (tiene menos de 36 MB) y se incluye con Visual Studio 2005 y Visual Web Developer 2005.
Visual Studio incluye herramientas para la administración de bases de datos, como Database Explorer y Query Builder, que puede usar para administrar bases de datos de SQL Server Express. Visual Studio también admite una nueva base de datos basada en archivos para crear bases de datos de SQL Server Express como parte de un proyecto. Al mismo tiempo, Visual Studio 2005 y SQL Server 2005 Express proporcionan una solución completa para crear e implementar aplicaciones web basadas en datos, incluidas las siguientes características:
· Elementos de datos del proyecto de base de datos
· Conexión de base de datos local
· Administración del navegador de base de datos
· Cadenas de conexión de ruta relativa
· Compatibilidad con la implementación de XCopy
· Compatibilidad con depuración integrada
Este artículo describe el enfoque de base de datos basada en archivos en Visual Studio 2005 y cómo el diseñador crea y utiliza estas bases de datos.
Visual Web Developer y DataVisual
Web Developer proporciona una serie de herramientas para utilizar bases de datos con aplicaciones web. Puede utilizar el Explorador de bases de datos para conectarse fácilmente a una base de datos y crear o ver un diagrama o esquema de base de datos. También puede utilizar el cuadro de diálogo del generador de consultas y la tabla de resultados de la consulta para consultar la base de datos y completar los datos. La creación de nuevas bases de datos (usando archivos locales) también se proporciona como elementos de datos del proyecto.
Una vez que se haya conectado a la base de datos en Visual Web Developer, puede arrastrar y soltar tablas de la base de datos directamente en la página para crear un control GridView vinculado a datos. Visual Web Developer crea automáticamente un control de fuente de datos asociado y configura sus operaciones de selección, actualización, inserción y eliminación en función de la tabla de datos. Esta operación rápida le ahorra mucho trabajo necesario para crear manualmente una fuente de datos y puede reemplazar fácilmente GridView con un control vinculado a datos adecuado según sea necesario.
Bases de datos locales y de servidor
Es posible que ya esté familiarizado con las bases de datos basadas en servidor y las cadenas de conexión. En este caso, el servidor de la base de datos (como SQL Server 2005) asocia el nombre de la base de datos con el archivo de la base de datos mantenido por el servidor. Puede conectarse a una base de datos basada en servidor especificando el nombre del servidor, el nombre de la base de datos y las credenciales, por ejemplo:
"server=(local)SQLExpress;database=Pubs;Integrated Security=true"
Sin embargo, Visual Studio 2005 también admite la concepto de bases de datos locales, que es un archivo agregado al directorio App_Data de la aplicación web actual. Es seguro almacenar archivos de datos en el directorio App_Data porque el contenido de este directorio nunca responderá a las solicitudes de los usuarios. Este directorio también es la ubicación recomendada para almacenar archivos XML y otros tipos de almacenamiento de datos. Las bases de datos nativas de SQL Server Express tienen una extensión .MDF (como "MyDatabase.MDF"), que es un formato de archivo estándar compatible con SQL Server. Cuando se conecta al servidor, la base de datos también tiene un archivo de registro asociado (como "MyDatabase_log.LDF"). La ubicación del archivo de base de datos y el archivo de registro deben estar juntos.
Podemos adjuntar automáticamente una base de datos de archivos local a SQL Server Express utilizando una cadena de conexión de ruta relativa. Las rutas relativas garantizan que la conexión de la base de datos no se interrumpa cuando la aplicación se mueva a cualquier otra ubicación. La cadena de conexión de ruta relativa en la aplicación web tiene este aspecto:
"server=(local)SQLExpress;AttachDbFileName=|DataDirectory|MyDatabase.mdf;Integrated Security=true;User Instance=true"
La cadena de conexión anterior tiene dos atributos adicionales más . La propiedad AttachDbFileName especifica la ubicación del archivo de base de datos que se adjunta dinámicamente al servidor cuando se abre la conexión. Aunque esta propiedad puede aceptar una ruta completa a la base de datos (por ejemplo, usando la sintaxis |DataDirectory|), en tiempo de ejecución esta ruta será reemplazada por el directorio App_Data de la aplicación. Esto también garantiza que las conexiones no se interrumpan cuando la aplicación se mueva a otra ubicación. La segunda propiedad es User Instance=true, que especifica cómo SQL Server Express adjunta la base de datos. En este caso, SQL Server Express crea un nuevo proceso para adjuntar la base de datos a la nueva instancia, ejecutándose como el usuario que abrió la conexión. En una aplicación ASP.NET, este usuario es la cuenta ASPNET local o el servicio de red predeterminado, según el sistema operativo. Para adjuntar de forma segura archivos de bases de datos proporcionados por cuentas que no son de administrador (como cuentas ASP.NET), es necesario crear una instancia de usuario de SQL Server separada.
Tenga en cuenta: debido a que, de forma predeterminada, todas las aplicaciones ASP.NET se ejecutan en el mismo proceso, todas las aplicaciones adjuntarán la base de datos local a la misma instancia de SQL Server Express. Esto significa que todas las aplicaciones tienen el mismo acceso a todas las bases de datos adjuntas a esta instancia, independientemente de a qué base de datos se adjuntó originalmente la aplicación. Para aislar diferentes aplicaciones, debe ejecutar cada aplicación en un proceso de trabajo o grupo de aplicaciones diferente (en IIS 6). Por este motivo, una base de datos local de SQL Server está destinada principalmente a facilitar el desarrollo y no pretende reemplazar una base de datos basada en servidor en un entorno de alojamiento compartido.
Otro punto importante es que no se permite que dos usuarios se conecten a una base de datos local al mismo tiempo. Al diseñar una aplicación en Visual Studio, el diseñador libera automáticamente la conexión para garantizar que Visual Studio y ASP.NET puedan compartir archivos de base de datos (por ejemplo, al depurar una aplicación en ejecución en el diseñador).
Creación de una base de datos local
Puede crear fácilmente una base de datos local en un proyecto de aplicación web de Visual Studio. Dado que Visual Studio viene con SQL Server Express instalado, puede seguir los siguientes pasos para crear una base de datos local, agregar tablas y completar los datos.
Para crear una base de datos local:
1. Haga clic derecho en el Explorador de soluciones y seleccione la opción "Agregar nuevo elemento...".
2. Seleccione el elemento "Base de datos SQL" y especifique un nombre de archivo, como "Database.mdf".
3. Visual Studio solicita agregar este archivo al directorio App_Data. Haga clic en "Sí".
4. Visual Studio agrega este archivo y se conecta automáticamente a la base de datos mediante el Explorador de bases de datos.
Para agregar una tabla de datos a la base de datos local:
1. Haga clic derecho en el nodo Tablas en el navegador de la base de datos y seleccione la opción "Agregar nueva tabla".
2. Ingrese el nombre y el tipo de la columna en la base de datos y, opcionalmente, establezca otras propiedades de la columna en la tabla de propiedades. Para configurar la base de datos de contactos de muestra, siga los pasos a continuación.
3. Establezca el nombre de la primera columna en "ContactID" y el tipo de datos en "int". Desmarque la casilla de verificación "Permitir valores nulos".
4. Haga clic derecho en el cuadrado gris a la izquierda de la columna ContactID y seleccione la opción "Establecer como clave principal".
5. En la tabla "Propiedades de columna" a continuación, expanda el nodo "Especificación de identificador" y establezca "Es un identificador" en "Sí".
6. Establezca el nombre de la segunda columna en "ContactName" y el tipo de datos en "varchar(50)". Deje marcada la casilla "Permitir valores nulos".
7. Presione Ctrl-S para guardar la tabla y establecer el nombre de la tabla en "Contactos". Haga clic en Aceptar para guardar la tabla.
8. Cierre la ventana de definición de tabla.
Para completar una tabla con datos:
1. Haga clic con el botón derecho en el nodo de la tabla de datos (por ejemplo, "Contactos") en el Explorador de bases de datos y seleccione la opción "Mostrar datos de la tabla".
2. Ingrese los datos para las filas de la tabla de datos en el formulario que se muestra. Si utiliza el ejemplo de Contactos anterior, puede ingresar un valor en la columna ContactName y la base de datos generará automáticamente el valor de ContactID correspondiente.
3. Cierre la ventana de la tabla.
Vinculación a una base de datos local
Para vincularse a una base de datos local, debe configurar el control de fuente de datos ASP.NET para conectarse al archivo mediante una conexión de ruta relativa. Para vincular simplemente una base de datos de SQL Server Express a los controles SqlDataSource y GridView, utilice los siguientes pasos:
1. Haga doble clic en una página en el Explorador de soluciones (por ejemplo, "Default.aspx"). Visual Studio abrirá esta página.
2. Seleccione la pestaña "Vista de diseño" en la parte inferior de la ventana de la página para cambiar a la vista de diseño.
3. Haga doble clic en el archivo de base de datos (por ejemplo, "Database.mdf") en el Explorador de soluciones. Visual Studio abre un explorador de base de datos para la conexión.
4. Expanda el nodo Tablas para mostrar las tablas en la base de datos.
5. Arrastre y suelte la tabla en el Explorador de bases de datos en la página abierta en la vista Diseño. Visual Studio crea un GridView vinculado al control SqlDataSource.
6. Expanda el "Panel de transacciones inteligentes" del control GridView y seleccione paginación, clasificación y edición.
7. Presione Ctrl-F5 para ejecutar la página (sin depurar).
El siguiente ejemplo muestra un control GridView y SqlDataSource conectado a una base de datos local. Para ejecutar este ejemplo, la cuenta de proceso ASP.NET debe tener permisos de lectura/escritura para los archivos MDF y LDF en el directorio ~/App_Data. El proceso de configuración de permisos es el siguiente:
1. Seleccione el archivo ~/App_Data/Database.MDF en el navegador de Windows y seleccione "Propiedades".
2. Seleccione la pestaña "Seguridad" y haga clic en "Agregar".
3. Haga clic en "Ubicación...", seleccione el nombre de su computadora (en la parte superior de la lista) y haga clic en "Aceptar".
4. En el área de texto Nombre del objeto, ingrese el nombre de la cuenta del proceso ASP.NET. De forma predeterminada, el nombre en IIS 6.0 es "Servicio de red" y en IIS 5.x es "ASPNET".
5. Seleccione "Leer" y "Escribir" en la columna "Permitir" y haga clic en "Aceptar".
6. Si hay un archivo LDF en el directorio App_Data, debe repetir los pasos anteriores para configurar las propiedades del archivo LDF.
Si utiliza Visual Studio para crear una aplicación en su computadora local, de forma predeterminada, tiene los permisos anteriores en el directorio App_Data. Si un archivo de base de datos necesita cambiar los permisos después de adjuntarlo, primero debe cerrar el dominio de la aplicación antes de que los nuevos permisos puedan surtir efecto.
<Columnas>
<asp:BoundField DataField="ContactID" HeaderText="ID" ReadOnly="True" SortExpression="ID" />
<asp:BoundField DataField="NombreContacto" HeaderText="Nombre" SortExpression="Nombre" />
</Columnas>
</asp:GridView>
<asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:ContactsDatabase %>" ID="SqlDataSource1" runat="server" SelectCommand="SELECT [ID de contacto], [Nombre de contacto] DESDE [Contactos]" OnSelected="SqlDataSource1_Selected"></ asp:SqlDataSource>
Implementación de una base de datos local
Una de las ventajas de un archivo de base de datos local es que puede acompañar a la aplicación, moverse como parte de la aplicación a otras ubicaciones o a otras computadoras (por supuesto, la computadora también debe ejecutar SQL Server Expresar). Al mover la base de datos, el archivo debe estar en estado desbloqueado. El archivo está bloqueado mientras el diseñador o la aplicación están conectados a la base de datos. Para desbloquear, se deben cerrar todas las conexiones activas a la base de datos. Puedes utilizar las siguientes técnicas para cerrar la conexión de la base de datos:
· Si ASP.NET ha abierto la conexión, puedes cerrar el dominio de la aplicación agregando un archivo "app_offline.htm" al directorio raíz de la aplicación web. Su función es cerrar el dominio de la aplicación (no el proceso) y redirigir todas las solicitudes de la aplicación a este archivo (devolviendo un código de respuesta 404). Si desea reiniciar la aplicación, simplemente elimine este archivo. Tenga en cuenta que simplemente cerrar la conexión en el código de la página no liberará el bloqueo del archivo, porque de forma predeterminada, el grupo de conexiones ADO.NET mantiene las conexiones activas.
Visual Studio proporciona la función Copiar web, que puede copiar archivos de la aplicación desde el directorio de trabajo al servidor de destino mediante xcopy, FTP o la extensión del servidor FrontPage. La computadora de destino puede ser local o remota. Puede llamar a la función Copiar sitio web seleccionando "Sitio web > Copiar sitio web..." en la barra de menú de Visual Studio.
Aunque puede usar Copy Web o una simple operación xcopy o FTP para mover la base de datos, para que la aplicación continúe funcionando, la computadora de destino debe estar ejecutando SQL Server Express (con el mismo nombre de instancia). Mencionamos anteriormente que, dado que todas las aplicaciones que ejecutan ASP.NET están conectadas a la misma instancia de SQL, todas las aplicaciones en la computadora de destino deben confiar entre sí. Si una aplicación no puede ver la base de datos de otra aplicación, recomendamos utilizar un enfoque basado en servidor (usando autenticación SQL u otras técnicas de separación) en lugar de la base de datos local. Si utiliza SQL Server Express como herramienta de desarrollo, deberá copiar el contenido de la base de datos de SQL Server Express a los clientes como parte de la implementación de producción.