Utilizar SQL Server Express con ASP.NET
Actualización: noviembre 2007
Microsoft SQL Server 2005 Express proporciona una solución de base de datos sencilla para generar aplicaciones. SQL Server Express admite el modelo de programación completo de SQL Server 2005, incluidos Transact-SQL, procedimientos almacenados, vistas, desencadenadores, integración de CLR con SQL Server (SQLCLR) y el tipo de datos XML. Cuando se desarrolla una aplicación utilizando SQL Server Express como origen de datos, se puede garantizar que la aplicación será compatible con los servidores de producción que ejecuten SQL Server 2005.
Conectar con una base de datos de SQL Server Express
Se puede establecer conexión con una base de datos de SQL Server Express del mismo modo que se establecería conexión con cualquier base de datos de SQL Server, especificando el servidor de bases de datos como origen de datos local de SQL Server Express. Por ejemplo, la cadena de conexión siguiente conecta con la base de datos denominada Customers.
Data Source=.\SQLEXPRESS;Initial Catalog=Customers;Integrated Security=True;
También se puede especificar un archivo de base de datos al que asociarse mediante el atributo de cadena de conexión AttachDBFilename en lugar de los atributos de cadena de conexión InitialCatalog o Database. Si se utiliza un nombre de archivo para conectar con la base de datos, se simplifica la implementación de la base de datos con la aplicación (siempre que se esté ejecutando SQL Server Express en el servidor de destino). Por ejemplo, la cadena de conexión siguiente conecta con una base de datos almacenada en el archivo Customers.mdf.
Data Source=.\SQLEXPRESS;AttachDbFileName=e:\data\Customers.mdf;Integrated Security=True;User Instance=True
ASP.NET proporciona una opción eficaz para almacenar datos en el directorio App_Data de una aplicación Web. El contenido del directorio App_Data no se proporciona como respuesta a las solicitudes Web, lo cual mejora la seguridad de los datos de la aplicación. Como ventaja opcional, se puede proporcionar la variable de cadena de conexión |DataDirectory|en lugar de la ruta de acceso al directorio App_Data de la aplicación. Al abrirse una conexión a la base de datos, las características de ASP.NET, como el control SqlDataSource o los proveedores de suscripciones, funciones, perfiles de usuario y personalización de elementos Web, sustituirán automáticamente la ruta de acceso al directorio App_Data para la variable de la cadena de conexión |DataDirectory|. De este modo se garantiza que la ruta de acceso a la base de datos permanece actualizada si la aplicación Web se mueve a otro directorio. En el siguiente ejemplo de código se muestra una cadena de conexión que incluye la variable de la cadena de conexión |DataDirectory|.
Data Source=.\SQLEXPRESS;AttachDbFileName=|DataDirectory|Customers.mdf;Integrated Security=True;User Instance=True
Nota: |
---|
SQL Server Express sólo permite una conexión a un archivo .mdf cuando se conecta con una cadena de conexión que tiene el valor User Instance establecido en true. |
Se puede cerrar la conexión de Visual Web Developer haciendo clic con el botón secundario del mouse en la base de datos del Explorador de soluciones y seleccionando la opción Desasociar, o bien, haciendo clic con el botón secundario del mouse en la base de datos del Explorador de servidores y seleccionando Cerrar conexión. Visual Web Developer cerrará automáticamente las conexiones abiertas con la base de datos cuando se ejecute o depure la aplicación Web.
Además, si necesita liberar las conexiones abiertas a una base de datos de SQL Server Express, puede descargar la aplicación Web mediante el Administrador de Internet Information Services (Administrador de IIS). También puede descargar una aplicación Web agregando un archivo HTML denominado App_offline.htm al directorio raíz de la aplicación Web. Para que la aplicación Web pueda empezar a responder de nuevo a las solicitudes Web, sólo hay que quitar el archivo App_offline.htm. Es necesario liberar las conexiones abiertas a una base de datos de SQL Server Express si desea copiar o mover la base de datos a otra ubicación.
Configurar una base de datos de SQL Server Express
Visual Web Developer proporciona herramientas que ayudan a crear una base de datos de SQL Server Express, administrar los elementos de la base de datos, como tablas y procedimientos almacenados, y administrar las conexiones a la base de datos. El acceso a estas funciones se realiza a través de la ventana Explorador de servidores. Para obtener instrucciones sobre cómo crear una base de datos de SQL Server Express, vea Cómo: Crear bases de datos de SQL Server Express.
También se puede crear una base de datos de SQL Server Express conectándose a un equipo con SQL Server Express y emitiendo un comando CREATE DATABASE, o bien, mediante las herramientas de administración de SQL Server proporcionadas para SQL Server Express.
El proveedor predeterminado de las características de ASP.NET que almacenan los datos en una base de datos de SQL Server, como son las suscripciones, las funciones, los perfiles de usuario y la personalización de elementos Web, está configurado de modo que se conecte a la base de datos Aspnetdb.mdf de SQL Server Express, ubicada en el directorio App_Data de la aplicación. Si se habilita cualquiera de estas características de almacenamiento de datos mediante el proveedor predeterminado y la base de datos Aspnetdb.mdf de SQL Server Express no existe en el directorio App_Data de la aplicación, se creará automáticamente la base de datos. Si no existe el directorio App_Data de la aplicación, también se creará.
Instancias de usuario
SQL Server Express admite instancias de usuario, lo que significa que se iniciará un nuevo proceso para cada usuario que se conecte a una base de datos de SQL Server Express. La identidad del proceso será el usuario que abra la conexión. Para obtener información sobre cómo determinar la identidad de una aplicación ASP.NET, vea Suplantación de ASP.NET.
Cuando se conecta a un proyecto de base de datos local, Visual Web Developer se conecta a la base de datos de SQL Server Express con las instancias de usuario habilitadas, de manera predeterminada. En el siguiente ejemplo de código se muestra una cadena de conexión típica que utiliza Visual Web Developer para conectarse a una base de datos de SQL Server Express.
Data Source=.\SQLEXPRESS;AttachDbFileName=|DataDirectory|Database.mdf;Integrated Security=True;User Instance=True
Aunque es útil permitir instancias de usuario para el desarrollo de escritorio, no es adecuado iniciar procesos de trabajo en los servidores Web que hospedan sitios de varios clientes en los que las aplicaciones deben estar separadas y protegidas. Las aplicaciones ASP.NET que se ejecutan con la misma identidad de proceso pueden conectarse a la misma instancia de usuario. Puesto que todas las aplicaciones ASP.NET se ejecutan con la misma identidad de proceso en Windows 2000 y Windows XP Professional (de forma predeterminada, la cuenta ASPNET local) y las aplicaciones ASP.NET del mismo grupo de aplicaciones se ejecutan con la misma identidad de proceso en Windows Server 2003 (de forma predeterminada, la cuenta NETWORK SERVICE), los servidores host compartidos que contienen aplicaciones que no son de confianza, deben deshabilitar de forma explícita las instancias de usuario. Para desactivar esta funcionalidad, conéctese a la instancia de SQL Server Express (por ejemplo, emitiendo el comando siguiente en el símbolo del sistema: osql –E –S .\SQLEXPRESS) y emita el siguiente comando Transact-SQL.
EXEC sp_configure 'show advanced option', '1'
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sp_configure 'user instances enabled', 0
GO
RECONFIGURE WITH OVERRIDE
GO
Implementar una base de datos de SQL Server Express
Una base de datos de SQL Server Express se compone de dos archivos: el archivo .mdf, que contiene el esquema y los datos de la base de datos, y el archivo .ldf, que contiene la información de registro de la base de datos. Cuando se implementa un sitio Web mediante la herramienta Copiar sitio Web, también se copian los archivos de la base de datos de SQL Server Express. La aplicación continuará ejecutándose mientras permanezca instalado SQL Server Express en el servidor de destino. Para obtener más información, vea Cómo: Copiar archivos de sitios Web con la herramienta Copiar sitio Web.
A continuación figuran algunas otras opciones para implementar una base de datos de SQL Server Express.
Si establece una conexión basada en archivo a una base de datos de SQL Server Express, se podrán copiar estos archivos junto con la aplicación en un servidor de destino (con SQL Server Express) mediante XCopy, FTP u otro medio.
Dado que SQL Server Express utiliza el mismo formato de archivo que las demás versiones de SQL Server 2005, se pueden copiar los archivos .mdf e .ldf a un servidor con SQL Server y, a continuación, adjuntar los archivos como una base de datos.
Si desea copiar una base de datos vacía de SQL Server Express que contiene un esquema de la base de datos pero no los datos, las herramientas de administración de SQL Server permiten generar secuencias de comandos que se puedan ejecutar en la base de datos de destino para duplicar el esquema de la base de datos de desarrollo.
Nota: |
---|
Si se implementa la base de datos de SQL Server Express en un servidor Web que hospede varios sitios que no son de confianza, no se pueden utilizar conexiones basadas en archivos ni instancias de usuario para garantizar que los datos no se expongan a otras aplicaciones ubicadas en el servidor. En este caso, se recomienda migrar el contenido de la base de datos de SQL Server Express a otra versión de SQL Server 2005 a la que pueda tener acceso la aplicación ASP.NET implementada. |
Si la base de datos de SQL Server Express contiene información cifrada, como las contraseñas cifradas almacenadas en una base de datos de suscripciones, asegúrese de copiar también las claves de cifrado en el servidor de destino.
Si desea mover la base de datos completa de SQL Server Express, deberá asegurarse de que no haya ninguna conexión abierta a la base de datos que la esté bloqueando.
Desbloquear una base de datos bloqueada
Si hay una conexión abierta a una base de datos, ésta se bloquea y no se puede mover ni eliminar. Las conexiones abiertas las puede mantener una aplicación ASP.NET, Visual Studio o algún otro programa o cliente de la base de datos. Para desbloquear una base de datos, todas las conexiones abiertas a la base de datos deben cerrarse. Las conexiones abiertas se pueden cerrar de las maneras siguientes:
Se puede cerrar la conexión de Visual Web Developer haciendo clic con el botón secundario del mouse en la base de datos del Explorador de soluciones y seleccionando la opción Desasociar, o bien, haciendo clic con el botón secundario del mouse en la base de datos del Explorador de servidores y seleccionando Cerrar conexión. Visual Web Developer cerrará automáticamente las conexiones abiertas con la base de datos cuando se ejecute o depure la aplicación Web.
Se pueden cerrar las conexiones mantenidas por una aplicación ASP.NET finalizando la aplicación. Esto se puede realizar mediante el Administrador de IIS o colocando un archivo denominado App_offline.htm en el directorio raíz de la aplicación ASP.NET (es preciso quitar este archivo para poder reiniciar la aplicación).
Se pueden cerrar las conexiones mantenidas por otros orígenes, como una aplicación de Windows Forms, saliendo del programa.
Vea también
Conceptos
Información general sobre las propiedades de perfil de ASP.NET
Otros recursos
Obtener acceso a datos con ASP.NET