Implementar una base de datos (C#)

por Scott Mitchell

La implementación de una aplicación web ASP.NET implica la obtención de los archivos y recursos necesarios del entorno de desarrollo en el entorno de producción. En el caso de las aplicaciones web controladas por datos, esto incluye el esquema y los datos de la base de datos. Este tutorial es el primero de una serie que explora los pasos necesarios para implementar correctamente la base de datos desde el entorno de desarrollo a producción.

Introducción

La implementación de una aplicación web ASP.NET implica la obtención de los archivos y recursos necesarios del entorno de desarrollo en el entorno de producción. En el transcurso de los últimos seis tutoriales hemos visto la implementación de una sencilla aplicación web de reseñas de libros. Este sitio de demostración se compone de una serie de recursos del lado servidor: páginas ASP.NET, archivos de configuración, un archivo Web.sitemap, etc., junto con recursos del lado cliente, como imágenes y archivos CSS. ¿Pero qué ocurre con las aplicaciones web controladas por datos? ¿Qué pasos adicionales se deben realizar para implementar una aplicación web que use una base de datos?

En los siguientes tutoriales abordaremos los pasos necesarios para implementar una aplicación web controlada por datos. Este tutorial comienza examinando cómo obtener un esquema y contenido de la base de datos del entorno de desarrollo al entorno de producción, mientras que el tutorial posterior examina los cambios de configuración necesarios. A continuación, exploraremos los desafíos de implementar una base de datos que use los servicios de aplicación (pertenencia, roles, perfil, etc.).

Examen de la aplicación web actualizada de reseñas de libros

Para demostrar la implementación de una aplicación web controlada por datos, he actualizado la aplicación web de reseñas de libros de un sitio web simple y estático a uno controlado por datos. Como antes, hay dos versiones de la aplicación en esta descarga del tutorial: una que usa el modelo de proyecto de aplicación web y otra que usa el modelo de proyecto de sitio web.

La aplicación web de opiniones de libros actualizada usa una base de datos de SQL Server 2008 Express Edition, que se almacena en la carpeta del App_Data sitio (~/App_Data/Reviews.mdf). Si tiene SQL Server 2008 instalado en el equipo, la demostración debe ejecutarse sin errores. Si tiene una versión anterior de SQL Server, puede instalar la versión gratuita de SQL Server 2008 Express Edition o puede usar los scripts de base de datos disponibles en esta descarga del tutorial para crear la base de datos usted mismo.

La base de datos Reviews.mdf contiene cuatro tablas:

  • Genres: incluye un registro para cada género, como Tecnología, Ficción y Negocios.
  • Books: incluye un registro para cada revisión, con columnas como Title, GenreId, ReviewDate y Review, entre otras.
  • Authors: incluye información sobre cada autor que ha contribuido a un libro reseñado.
  • BooksAuthors: una tabla de combinación que especifica qué autores han escrito qué libros.

En la ilustración 1 se muestra un diagrama ER de estas cuatro tablas.

The Book Reviews Web Application s Database is Comprised of Four Tables

Ilustración 1: la base de datos de la aplicación web de reseñas de libros consta de cuatro tablas (haga clic para ver la imagen a tamaño completo)

La versión anterior del sitio web de reseñas de libros tenía una página ASP.NET independiente para cada libro. Por ejemplo, hubo una página denominada ~/Tech/TYASP35.aspx que contenía la revisión de Teach Yourself ASP.NET 3.5 in 24 Hours. Esta nueva versión controlada por datos del sitio web tiene las revisiones almacenadas en la base de datos y una sola página ASP.NET, Review.aspx?ID=bookId, que muestra la reseña del libro especificado. Del mismo modo, hay una página Genre.aspx?ID=genreId que enumera los libros reseñados en el género especificado.

Las ilustraciones 2 y 3 muestran las páginas Genre.aspx y Review.aspx en acción. Anote la dirección URL de la barra de direcciones de cada página. En la ilustración 2, es Genre.aspx?ID=85d164ba-1123-4c47-82a0-c8ec75de7e0e. Dado que 85d164ba-1123-4c47-82a0-c8ec75de7e0e es el valor GenreId para el género Tecnología, el encabezado de la página lee "Reseñas de tecnología" y la lista con viñetas enumera esas reseñas en el sitio que se encuentran bajo este género.

The Technology Genre Page

Ilustración 2: página Género tecnológico (haga clic para ver la imagen a tamaño completo)

The Review for Teach Yourself ASP.NET 3.5 in 24 Hours

Ilustración 3: reseña de Teach Yourself ASP.NET 3.5 in 24 Hours (haga clic para ver la imagen a tamaño completo)

La aplicación web de reseñas de librps también incluye una sección de administración en la que los administradores pueden agregar, editar y eliminar géneros, reseñas e información del autor. Actualmente, cualquier visitante puede acceder a la sección de administración. En un tutorial futuro agregaremos compatibilidad con las cuentas de usuario y solo permitiremos a los usuarios autorizados en las páginas de administración.

Si descarga la aplicación de reseñas de libros, tenga en cuenta que su propósito es demostrar la implementación de una aplicación controlada por datos. No presenta procedimientos recomendados en cuanto al diseño de aplicaciones. Por ejemplo, no existe una capa de acceso a datos (DAL) independiente; las páginas ASP.NET se comunican directamente con la base de datos a través del control SqlDataSource o del código ADO.NET en sus clases de código oculto. Para obtener una visión más detallada de la creación de aplicaciones controladas por datos mediante una arquitectura en capas, consulte mis tutoriales sobre cómo trabajar con datos.

Bases de datos en desarrollo frente a producción

Al iniciar el desarrollo en una aplicación web controlada por datos, debe especificar una cadena de conexión de base de datos, que proporciona los detalles de la aplicación sobre cómo conectarse a la base de datos. Esta cadena de conexión especifica, entre otras cosas, el servidor de bases de datos, el nombre de la base de datos y la información de seguridad. La mayoría de las veces, la base de datos usada por la aplicación durante el desarrollo es diferente de la que se usa cuando está en producción. Hay muchas ventajas de usar bases de datos diferentes para el desarrollo frente a la producción. Tener una base de datos diferente en desarrollo significa que no tiene que preocuparse por modificar o eliminar datos activos accidentalmente. También le permite colocar datos de prueba ficticios o realizar cambios importantes en el modelo de datos sin tener que preocuparse de los efectos de la aplicación en producción. La desventaja de tener una base de datos diferente en los entornos de desarrollo y producción es que, cuando la aplicación se implementa, la base de datos y los cambios pertinentes en el esquema o los datos de la base de datos también deben implementarse.

Antes de la primera implementación, solo hay una instancia de la base de datos y está en el entorno de desarrollo. Al implementar la aplicación en producción por primera vez, no solo debemos copiar los archivos necesarios del lado servidor y del lado cliente, sino también copiar la base de datos del entorno de desarrollo en el entorno de producción. Esta es la situación actual de la aplicación web Reseñas de libros: la base de datos se encuentra en la carpeta App_Data de nuestro entorno de desarrollo, pero aún no se ha transferido al entorno de producción.

Una vez implementada la aplicación, hay dos copias de la base de datos. A medida que la aplicación madura, pueden añadirse nuevas funciones que obliguen a modificar el modelo de datos (como añadir nuevas columnas a las tablas existentes, realizar cambios en las columnas existentes, añadir nuevas tablas, etc.). Cuando la aplicación web se implementa a continuación, los cambios aplicados a la base de datos en el entorno de desarrollo desde la última implementación se deben aplicar a la base de datos de producción. En un tutorial futuro se describirán algunas estrategias para administrar este proceso. Este tutorial se centra en la implementación de toda la base de datos desde el entorno de desarrollo a producción.

Implementación de la base de datos en el entorno de producción

El resto de este tutorial examina cómo implementar la base de datos desde el entorno de desarrollo en el entorno de producción. Si está siguiendo el ejemplo, debe asegurarse de que su cuenta con su proveedor de host web incluye soporte para bases de datos Microsoft SQL Server. También deberá tener información a mano, es decir, el nombre del servidor de bases de datos, el nombre de la base de datos y el nombre de usuario y la contraseña usados para conectarse a la base de datos.

Como se indicó anteriormente en este tutorial, la base de datos del sitio web opiniones de libros es una base de datos de SQL Server 2008 Express Edition almacenada en la carpeta App_Data. Sería tan sencillo como copiar la carpeta App_Data del entorno de desarrollo en el entorno de producción. Sin embargo, la mayoría de los proveedores de host web no admiten el hospedaje de bases de datos en la carpeta App_Data por motivos de seguridad. En su lugar, los hosts web proporcionan una cuenta en un servidor de base de datos de SQL Server dentro de su entorno. La implementación de la base de datos desde el entorno de desarrollo en el entorno de producción requiere la obtención de la base de datos registrada en el servidor de bases de datos del host web.

¿Cómo obtiene la base de datos del entorno de desarrollo al entorno de producción? Hay un par de maneras de hacerlo en función de los servicios que ofrece el host web. Con algunos hosts, como DiscountASP.NET, puede enviar por FTP una copia de seguridad de la base de datos o el archivo .mdf real a su sitio web y, a continuación, desde el Panel de control, restaurar el archivo de copia de seguridad o adjuntar el archivo .mdf al servidor de base de datos SQL Server. Con estas herramientas, la implementación de la base de datos es tan sencilla como copiar la carpeta App_Data en el entorno de producción y, a continuación, adjuntarla a través del Panel de control. Esta es quizás la forma más sencilla y rápida de publicar la base de datos por primera vez.

Otro enfoque consiste en usar el asistente para publicación de bases de datos. El asistente para publicación de bases de datos es una aplicación de escritorio de Windows que generará los comandos SQL para crear el esquema de la base de datos (las tablas, procedimientos almacenados, vistas, funciones definidas por el usuario, etc.) y, opcionalmente, los datos de sus tablas. A continuación, puede conectarse al servidor de base de datos del proveedor de host web a través de SQL Server Management Studio y, a continuación, ejecutar este script para duplicar la base de datos en producción. Mejor aún, si su proveedor de host web es compatible con los servicios de publicación de bases de datos de Microsoft, puede hacer que el script generado por el asistente de publicación de bases de datos se ejecute automáticamente en el servidor de bases de datos en su nombre. Dado que el asistente para publicación de bases de datos genera un script que crea el esquema y los datos de la base de datos, funcionará independientemente de si el proveedor de host web ofrece características como adjuntar un archivo .mdf cargado.

Generación de los comandos SQL para crear el esquema de base de datos y los datos mediante el asistente para publicación de bases de datos

Veamos cómo usar el asistente para publicación de bases de datos para implementar la base de datos de reseñas de libros en producción. Si usa Visual Studio 2008 o posterior, el asistente para publicación de bases de datos ya está instalado.

Abra Visual Studio y vaya a la base de datos Reviews.mdf. Si usa Visual Web Developer, vaya al Explorador de bases de datos; si usa Visual Studio, use el Explorador de servidores. En la ilustración 4 se muestra la base de datos Reviews.mdf en el Explorador de bases de datos en Visual Web Developer. Como se muestra en la ilustración 4, la base de datos Reviews.mdf se compone de cuatro tablas, tres procedimientos almacenados y una función definida por el usuario.

Locate the Database in the Database Explorer or Server Explorer

Ilustración 4: buscar la base de datos en el Explorador de bases de datos o en el Explorador de servidores (haga clic para ver la imagen a tamaño completo)

Haga clic con el botón derecho en el nombre de la base de datos y elija la opción "Publicar en proveedor" en el menú contextual. Esto inicia el asistente para publicación de bases de datos (véase la ilustración 5). Haga clic en Siguiente para avanzar más allá de la pantalla de presentación.

Screenshot of the Database Publishing Wizard window, which shows the splash screen and the Next button to advance the wizard.

Ilustración 5: pantalla de presentación del asistente para publicación de bases de datos (haga clic para ver la imagen a tamaño completo)

La segunda pantalla del asistente enumera las bases de datos a las que puede acceder el asistente para la publicación de bases de datos y le permite elegir si desea crear un script para todos los objetos de la base de datos seleccionada o elegir los objetos que desea crear. Seleccione la base de datos adecuada y deje activada la opción "Incluir todos los objetos de la base de datos seleccionada".

Nota:

Si aparece el error "No hay objetos en la base de datos databaseName de los tipos que puede crear scripts este asistente" al hacer clic en Siguiente en la pantalla que se muestra en la ilustración 6, asegúrese de que la ruta a su archivo de base de datos no es demasiado larga. Se ha descubierto que este error puede surgir si la ruta de acceso al archivo de base de datos es demasiado larga.

Screenshot of the Database Publishing Wizard window, which shows a highlighted database in the database list and a filled Script all objects checkbox.

Ilustración 6: pantalla de presentación del asistente para publicación de bases de datos (Haga clic para ver la imagen a tamaño completo)

En la siguiente pantalla puede generar un archivo de script o, si su proveedor de host web lo admite, publicar la base de datos directamente en el servidor de bases de datos de su proveedor de host web. Como se muestra en la figura 7, tengo el script escrito en el archivo C:\REVIEWS.MDF.sql.

Script the Database to a File or Publish it Directly to Your Web Host Provider

Ilustración 7: crear un script de la base de datos en un archivo o publicarlo directamente en el proveedor de host web (haga clic para ver la imagen a tamaño completo)

La siguiente pantalla le pide una variedad de opciones de scripting. Puede especificar si el script debe incluir instrucciones drop para quitar estos objetos existentes. Este valor predeterminado es True, que es correcto al implementar una base de datos por primera vez. También puede especificar si la base de datos de destino es SQL Server 2000, SQL Server 2005 o SQL Server 2008. Por último, puede indicar si se debe crear un script del esquema y los datos, solo los datos o simplemente el esquema. El esquema es la colección de objetos de base de datos, las tablas, los procedimientos almacenados, las vistas, etc. Los datos son la información que reside en las tablas.

Como se muestra en la ilustración 8, tengo el asistente configurado para quitar objetos de base de datos existentes, generar un script para una base de datos de SQL Server 2008 y publicar tanto el esquema como los datos.

Specify the Publishing Options

Ilustración 8: especificar las opciones de publicación (haga clic para ver la imagen a tamaño completo)

Las dos pantallas finales resumen las acciones que están a punto de realizarse y después muestran el estado del scripting. El resultado neto de ejecutar el asistente es que tenemos un archivo de script que contiene los comandos SQL necesarios para crear la base de datos en producción y rellenarla con los mismos datos que en el desarrollo.

Ejecución de los comandos SQL en la base de datos del entorno de producción

Ahora que tenemos el script que contiene los comandos SQL para crear la base de datos y sus datos solo queda ejecutar el script en la base de datos de producción. Algunos proveedores de host web ofrecen un cuadro de texto en su Panel de control donde puede escribir comandos SQL para ejecutarse en la base de datos. Si tiene un archivo de script muy grande, es posible que esta opción no funcione (el archivo de script de REVIEWS.MDF.sql tiene un tamaño de más de 425 KB, por ejemplo).

Un mejor enfoque es conectarse directamente al servidor de base de datos de producción mediante SQL Server Management Studio (SSMS). Si tiene instalada en su ordenador una versión de SQL Server que no sea Express Edition, es probable que ya tenga instalado SSMS. De lo contrario, puede descargar e instalar una copia gratuita de SQL Server Management Studio Express Edition.

Inicie SSMS y conéctese al servidor de bases de datos del host web mediante la información proporcionada por el proveedor de host web.

Screenshot of the Connect to Server dialog box, which shows the web host's data server information in the text fields.

Ilustración 9: conectarse al servidor de base de datos del proveedor de host web (haga clic para ver la imagen a tamaño completo)

Expanda la pestaña Bases de datos y busque la base de datos. Haga clic en el botón Nueva consulta situado en la esquina superior izquierda de la barra de herramientas, pegue los comandos SQL del archivo de script creado por el asistente para la publicación de bases de datos y haga clic en el botón Ejecutar para ejecutar estos comandos en el servidor de base de datos de producción. Si el archivo de script es especialmente grande, puede tardar varios minutos en ejecutar los comandos.

Screenshot of the Microsoft SQL Server Management Studio window, which shows the commands from the script file are executed on the production server.

Ilustración 10: conectarse al servidor de base de datos del proveedor de host web (haga clic para ver la imagen a tamaño completo)

Así de simple. En este momento, la base de datos de desarrollo se ha duplicado en producción. Si actualiza la base de datos en SSMS, debería ver los nuevos objetos de base de datos. En la ilustración 11 se muestran las tablas, los procedimientos almacenados y las funciones definidas por el usuario de la base de datos de producción, que reflejan las de la base de datos de desarrollo. Y como se ha indicado al asistente para publicación de bases de datos que publiquen los datos, las tablas de la base de datos de producción tienen los mismos datos que las tablas de la base de datos de desarrollo en el momento en que se ejecutó el asistente. En la ilustración 12 se muestran los datos de la tabla Books en la base de datos de producción.

The Database Objects Have Been Duplicated on the Production Database

Ilustración 11: los objetos de base de datos se han duplicado en la base de datos de producción (haga clic para ver la imagen a tamaño completo)

The Production Database Contains the Same Data as on the Development Database

Ilustración 12: la base de datos de producción contiene los mismos datos que en la base de datos de desarrollo (haga clic para ver la imagen a tamaño completo)

En este momento, solo hemos implementado la base de datos de desarrollo en producción. Aún no hemos examinado la implementación de la propia aplicación web o hemos examinado qué cambios de configuración son necesarios para que la aplicación en producción use la base de datos de producción. Trataremos estos problemas en el siguiente tutorial.

Resumen

La implementación de una aplicación web controlada por datos requiere copiar la base de datos usada durante el desarrollo en el entorno de producción. Muchos proveedores de host web ofrecen herramientas para simplificar el proceso de implementación de una base de datos. Por ejemplo, con DiscountASP.NET puede enviar por FTP su archivo .mdf de base de datos (o una copia de seguridad) y luego adjuntar la base de datos al servidor de base de datos desde el Panel de control. Otra opción que funciona independientemente de las funciones que ofrezca su proveedor de host web es la herramienta del asistente de publicación de bases de datos de Microsoft, que genera un script de comandos SQL para crear el esquema y los datos de la base de datos de desarrollo. Una vez generado este script, puede ejecutarlo en la base de datos de producción.

Ahora que la base de datos de la aplicación web de reseñas de libros está en producción, podemos implementar la aplicación. Sin embargo, la información de configuración de la aplicación web especifica la cadena de conexión a la base de datos y esa cadena de conexión hace referencia a la base de datos de desarrollo. Es necesario actualizar esta información de cadena de conexión al implementar el sitio en producción. En el siguiente tutorial se examinan estas diferencias de configuración y se describen los pasos necesarios para publicar el sitio de opiniones de libros controlados por datos en producción.

¡Feliz programación!

Lecturas adicionales

Para obtener más información sobre los temas descritos en este tutorial, consulte el siguiente recurso: