结合使用 ASP.NET 和 SQL Server Express Edition
转http://msdn2.microsoft.com/zh-cn/library/ms228037.aspx
Microsoft SQL Server 2005 Express 版为生成应用程序提供了一个简单的数据库解决方案。SQL Server Express Edition 支持 SQL Server 2005 的完整编程模型,包括 Transact-SQL、存储过程、视图、触发器、SQL Server CLR 集成 (SQLCLR) 和 XML 数据类型。当您开发一个使用 SQL Server Express 版作为数据源的应用程序时,可以确保应用程序将与运行 SQL Server 2005 的成品服务器兼容。
连接到 SQL Server Express 版数据库
通过将数据库服务器指定为本地 SQL Server Express 版数据源,您可以连接到 SQL Server Express 版数据库,就像您连接到任何 SQL Server 数据库一样。例如,下面的连接字符串连接到一个名为 Customers 的数据库。
Data Source=.\SQLEXPRESS;Initial Catalog=Customers;Integrated Security=True;
通过使用 AttachDBFilename 连接字符串属性代替 InitialCatalog 或 Database 连接字符串属性,还可以指定要附加到的数据库文件。通过使用文件名连接到数据库可以简化将数据库与应用程序一起部署的工作(假如目标服务器运行的是 SQL Server Express 版)。例如,下面的连接字符串连接到存储在 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 版只允许有单个连接连到 .mdf 文件。 |
如果需要释放到 SQL Server Express Edition 数据库的任何打开的连接,可以使用 Internet 信息服务管理器(IIS 管理器)卸载 Web 应用程序。还可以向 Web 应用程序的根目录添加一个名为 App_offline.htm 的 HTML 文件来卸载 Web 应用程序。若要允许 Web 应用程序再次开始响应 Web 请求,只需移除 App_offline.htm 文件。当您要将数据库复制或移动到新位置时,您需要释放打开的 SQL Server Express 版数据库连接。
设置 SQL Server Express 版数据库
通过连接到运行 SQL Server Express Edition 的计算机并发出 CREATE DATABASE 命令,或者通过使用为 SQL Server Express Edition 提供的 SQL Server 管理工具,可以创建 SQL Server Express Edition 数据库。此外,开发工具(如 Visual Studio)提供了可使您可以轻松创建和管理 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 版支持用户实例,这意味着系统将为连接到 SQL Server Express 版数据库的每个用户启动一个新进程。进程的标识将为打开该连接的用户。有关如何确定 ASP.NET 应用程序标识的信息,请参见 ASP.NET 模拟。
虽然启用用户实例适合于桌面开发,但是启动辅助进程不适合为多个客户托管站点的 Web 服务器,在这种情况下,必须分离应用程序并进行安全保护。使用相同进程标识运行的 ASP.NET 应用程序可以连接到同一个用户实例。由于在 Windows 2000 和 Windows XP Professional 上,所有 ASP.NET 应用程序都使用相同的进程标识(默认为本地 ASPNET 帐户)运行,而在 Windows Server 2003 上,同一应用程序池中的 ASP.NET 应用程序也使用相同的进程标识(默认为 NETWORK SERVICE 帐户)运行,因此包含互不信任的应用程序的托管服务器应该显式禁用用户实例。通过连接到 SQL Server Express 版实例(例如,通过在命令提示符处发出以下命令: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 Server Express 版数据库
SQL Server Express Edition 数据库由两个文件组成:.mdf 文件,其中包含数据库架构和数据;.ldf 文件,其中包含数据库的日志信息。如果对 SQL Server Express Edition 数据库进行基于文件的连接,可以使用 XCopy、FTP 或其他方法将这些文件随应用程序一起复制到目标服务器。只要目标服务器上安装了 SQL Server Express Edition,应用程序就会继续运行。
因为 SQL Server Express 版使用与其他版本的 SQL Server 2005 相同的文件格式,所以您可以将 .mdf 和 .ldf 文件复制到运行 SQL Server 的服务器,然后附加文件作为数据库。
![]() |
---|
如果您正在将 SQL Server Express 版数据库部署到承载多个互不信任站点的 Web 服务器,则您无法使用基于文件的连接或用户实例,来帮助确保数据不会公开给服务器上的其他应用程序。在此情况下,建议您将 SQL Server Express 版数据库的内容迁移到部署的 ASP.NET 应用程序可以访问的另一个版本的 SQL Server 2005。 |
如果想要复制包含数据库架构但是不包含数据的 SQL Server Express Edition 空数据库,SQL Server 管理工具可使您生成可在目标数据库中运行以复制开发数据库中的架构的脚本。
如果 SQL Server Express 版数据库包含加密的信息,例如存储在成员资格数据库中的加密密码,请确保加密密钥也已复制到目标服务器。
如果您要移动整个 SQL Server Express 版数据库,您需要确保没有打开的数据库连接,该连接会导致数据库被锁定。
取消对锁定数据库的锁定
如果存在打开的数据库连接,则该数据库将被锁定,并且无法移动或删除。打开的连接可能由 ASP.NET 应用程序、Visual Studio 之类设计器或其他某个程序或数据库客户端所保留。若要取消对数据库的锁定,必须关闭所有打开的数据库连接。可以用以下方法关闭打开的连接:
-
可以通过退出程序来关闭设计器所保留的连接。(在 Visual Studio 中,在“解决方案资源管理器”中右击数据库并选择“分离”选项;或者可以在“服务器资源管理器”中右击数据库并选择“关闭连接”选项。)
-
可以通过结束应用程序来关闭 ASP.NET 应用程序所保留的任何连接。这可以使用 IIS 管理器来完成,或者将名为 App_offline.htm 的文件放在 ASP.NET 应用程序的根目录中(必须移除此文件才能重新启动应用程序)。
-
通过退出程序,您可以关闭由其他资源(如 Windows 窗体应用程序)占用的任何连接。