结合使用 ASP.NET 和 SQL Server Express Edition

来源:互联网 发布:mud游戏制作软件 编辑:程序博客网 时间:2024/05/21 09:26

 

Microsoft SQL Server 2005 Express Edition 为生成应用程序提供了一个简单的数据库解决方案。SQL Server Express Edition 支持完整的 SQL Server 2005 编程模型,包括 Transact-SQL、存储过程、视图、触发器、SQL Server CLR 集成 (SQLCLR) 以及 XML 数据类型。当您开发一个使用 SQL Server Express Edition 作为数据源的应用程序时,可以确保应用程序将与运行 SQL Server 2005 的成品服务器兼容。

通过将数据库服务器指定为本地 SQL Server Express Edition 数据源,您可以连接到 SQL Server Express Edition 数据库,就像您连接到任何 SQL Server 数据库一样。例如,下面的连接字符串连接到一个名为 Customers 的数据库。

复制代码
Data Source=./SQLEXPRESS;Initial Catalog=Customers;Integrated Security=True;

通过使用代替 InitialCatalogDatabase 连接字符串属性的 AttachDBFilename 连接字符串属性,您也可以指定一个要附加到的数据库文件。通过使用文件名连接到数据库可以简化将数据库与应用程序一起部署的工作(假如目标服务器运行的是 SQL Server Express Edition )。例如,下面的连接字符串连接到存储在 Customers.mdf 文件中的数据库。

复制代码
Data Source=./SQLEXPRESS;AttachDbFileName=e:/data/Customers.mdf;Integrated Security=True;User Instance=True

ASP.NET 提供了用于在 Web 应用程序的 App_Data 目录中存储数据的便捷选项。App_Data 目录的内容不会在响应 Web 请求时提供,从而提高了应用程序的数据安全性。另外一种方便性是,您可以提供 |DataDirectory| 连接字符串变量,以代替应用程序的 App_Data 目录的文件路径。当打开到数据库的连接时,ASP.NET 功能(如 SqlDataSource 控件或用于成员资格、角色、用户配置文件、Web 部件个性化设置等的提供程序)自动将 App_Data 目录的文件路径替换为 |DataDirectory| 连接字符串变量。如果将 Web 应用程序移动到另一个目录,这可以确保数据库的路径保持最新。下面的代码示例演示一个包含 |DataDirectory| 连接字符串变量的连接字符串。

复制代码
Data Source=./SQLEXPRESS;AttachDbFileName=|DataDirectory|Customers.mdf;Integrated Security=True;User Instance=True
说明:

当您与 User Instance 设置为 true 的连接字符串进行连接时,SQL Server Express Edition 只允许有单个连接连到 .mdf 文件。

通过在“解决方案资源管理器”中右击数据库并选择“分离”选项,或者通过在“服务器资源管理器”中右击数据库并选择“关闭连接”,可以关闭由 Visual Web Developer 占有的连接。当您运行或调试 Web 应用程序时,Visual Web Developer 将自动关闭任何打开的数据库连接。

此外,如果您需要释放任何打开的 SQL Server Express Edition 数据库连接,您可以使用 Internet 信息服务管理器(IIS 管理器)卸载 Web 应用程序。您也可以通过将名为 App_offline.htm 的 HTML 文件添加到 Web 应用程序的根目录,来卸载 Web 应用程序。若要允许 Web 应用程序再次开始响应 Web 请求,只需移除 App_offline.htm 文件。当您要将数据库复制或移动到新位置时,您需要释放打开的 SQL Server Express Edition 数据库连接。

Visual Web Developer 提供了一些工具,以帮助您创建 SQL Server Express Edition 数据库;管理数据库元素,如表、存储过程等等;以及管理数据库连接。您可以通过“服务器资源管理器”窗口来访问这些功能。有关创建 SQL Server Express Edition 数据库的说明,请参见如何:创建 SQL Server Express Edition 数据库

您也可以通过连接到运行 SQL Server Express Edition 的计算机并发出 CREATE DATABASE 命令,或者通过使用为 SQL Server Express Edition 提供的 SQL Server 管理工具,来创建 SQL Server Express Edition 数据库。

将数据存储在 SQL Server 数据库中的 ASP.NET 功能(例如成员资格、角色、用户配置文件、Web 部件个性化等等)的默认提供程序,配置为连接到应用程序的 App_Data 目录中的 Aspnetdb.mdf SQL Server Express Edition 数据库。如果启用这些使用默认提供程序的数据存储功能中的任何一项,并且在应用程序的 App_Data 目录中不存在 Aspnetdb.mdf SQL Server Express Edition 数据库,则该数据库将自动创建。如果应用程序的 App_Data 目录不存在,则还会创建该目录。

SQL Server Express Edition 支持用户实例,这意味着系统将为连接到 SQL Server Express Edition 数据库的每个用户启动一个新进程。进程的标识将为打开该连接的用户。有关确定 ASP.NET 应用程序标识的信息,请参见 ASP.NET 模拟

默认情况下,当您连接到本地数据库项目时,Visual Web Developer 会连接到 SQL Server Express Edition 数据库,并启用用户实例。例如,下面的代码示例演示由 Visual Web Developer 用来连接到 SQL Server Express Edition 数据库的典型连接字符串。

复制代码
Data Source=./SQLEXPRESS;AttachDbFileName=|DataDirectory|Database.mdf;Integrated Security=True;User Instance=True

虽然启用用户实例适合于桌面开发,但在承载多个客户站点的 Web 服务器上,启动辅助进程并不合适;在这种 Web 服务器上,应用程序必须分开并受到保护。使用相同进程标识运行的 ASP.NET 应用程序可以连接到同一个用户实例。由于在 Windows 2000 和 Windows XP Professional 上,所有 ASP.NET 应用程序都使用相同的进程标识(默认为本地 ASPNET 帐户)运行,而在 Windows Server 2003 上,同一应用程序池中的 ASP.NET 应用程序也使用相同的进程标识(默认为 NETWORK SERVICE 帐户)运行,因此包含互不信任的应用程序的托管服务器应该显式禁用用户实例。通过连接到 SQL Server Express Edition 实例(例如,通过在命令提示符处发出以下命令:osql –E –S ./SQLEXPRESS)并发出以下 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

SQL Express Edition 数据库由两个文件组成:包含数据库架构及数据的 .mdf 文件和包含数据库日志信息的 .ldf 文件。当您通过复制网站工具部署网站时,SQL Server Express Edition 数据库文件也会被复制。只要目标服务器上安装了 SQL Server Express Edition,应用程序将继续运行。有关更多信息,请参见如何:使用“复制网站”工具复制网站文件

以下是部署 SQL Server Express Edition 数据库的一些其他选项。

  • 如果您正在进行基于文件的 SQL Server Express Edition 数据库连接,可以通过 XCopy、FTP 或其他方法,将这些文件与应用程序一起复制到目标服务器(已安装了 SQL Server Express Edition 的服务器)。

  • 因为 SQL Server Express Edition 使用与其他版本的 SQL Server 2005 相同的文件格式,所以您可以将 .mdf 和 .ldf 文件复制到运行 SQL Server 的服务器,然后附加文件作为数据库。

  • 如果您要复制一个包含数据库架构但不包含数据的空 SQL Server Express Edition 数据库,SQL Server 管理工具使您能够生成可以在目标数据库中运行的脚本,以从开发数据库中复制架构。

说明:

如果您正在将 SQL Server Express Edition 数据库部署到承载多个互不信任站点的 Web 服务器,则您无法使用基于文件的连接或用户实例,来帮助确保数据不会公开给服务器上的其他应用程序。在此情况下,建议您将 SQL Server Express Edition 数据库的内容迁移到部署的 ASP.NET 应用程序可以访问的另一个版本的 SQL Server 2005。

如果 SQL Server Express Edition 数据库包含加密的信息,例如存储在成员资格数据库中的加密密码,请确保加密密钥也已复制到目标服务器。

如果您要移动整个 SQL Server Express Edition 数据库,您需要确保没有打开的数据库连接,该连接会导致数据库被锁定。

取消对锁定数据库的锁定

如果存在打开的数据库连接,则该数据库将被锁定,并且无法移动或删除。打开的连接可以由 ASP.NET 应用程序、Visual Studio 或一些其他程序或数据库客户端占用。若要取消对数据库的锁定,必须关闭所有打开的数据库连接。可以用以下方法关闭打开的连接:

  • 通过在“解决方案资源管理器”中右击数据库并选择“分离”选项,或者通过在“服务器资源管理器”中右击数据库并选择“关闭连接”,可以关闭由 Visual Web Developer 占有的连接。当您运行或调试 Web 应用程序时,Visual Web Developer 将自动关闭任何打开的数据库连接。

  • 通过结束 ASP.NET 应用程序,您可以关闭由该应用程序占用的任何连接。这可以使用 IIS 管理器来完成,或者将名为 App_offline.htm 的文件放在 ASP.NET 应用程序的根目录中(必须移除此文件才能重新启动应用程序)。

  • 通过退出程序,您可以关闭由其他资源(如 Windows 窗体应用程序)占用的任何连接。

概念

ASP.NET 配置文件属性概述

其他资源

通过 ASP.NET 访问数据
使用成员资格管理用户
使用角色管理授权
原创粉丝点击