部署数据库 (VB)

作者 :Scott Mitchell

部署 ASP.NET Web 应用程序需要从开发环境获取必要的文件和资源到生产环境。 对于数据驱动的 Web 应用程序,这包括数据库架构和数据。 本教程是系列教程中的第一个教程,探讨将数据库从开发环境成功部署到生产环境所需的步骤。

简介

部署 ASP.NET Web 应用程序需要从开发环境获取必要的文件和资源到生产环境。 在过去的六篇教程中,我们介绍了如何部署一个简单的 Book Reviews Web 应用程序。 此演示站点由许多服务器端资源(ASP.NET 页面、配置文件、 Web.sitemap 文件等)以及客户端资源(如图像和 CSS 文件)组成。 但是,数据驱动的 Web 应用程序呢? 若要部署使用数据库的 Web 应用程序,必须执行哪些额外步骤?

在接下来的几个教程中,我们将介绍部署数据驱动 Web 应用程序所需的步骤。 本教程首先检查如何将数据库的架构和内容从开发环境获取到生产环境,而后续教程则介绍所需的配置更改。 接下来,我们将探讨部署使用应用程序服务 (成员身份、角色、配置文件等) 的数据库的挑战。

检查更新的 Book Reviews Web 应用程序

为了演示如何部署数据驱动的 Web 应用程序,我已将 Book Reviews Web 应用程序从简单的静态网站更新为数据驱动网站。 与之前一样,本教程下载中有两个版本的应用程序:一个使用 Web 应用程序项目模型,一个使用网站项目模型。

更新的 Book Reviews Web 应用程序使用 SQL Server 2008 Express Edition 数据库,该数据库存储在站点文件夹 App_Data (~/App_Data/Reviews.mdf) 中。 如果计算机上已安装 SQL Server 2008,则演示应运行且不会出现错误。 如果你有较旧版本的 SQL Server可以安装免费的 SQL Server 2008 Express Edition,也可以使用本教程下载中提供的数据库脚本自行创建数据库。

数据库 Reviews.mdf 包含四个表:

  • Genres - 包括每种流派的记录,例如“技术”、“小说”和“商业”。
  • Books- 包括每个审阅的记录,以及 、TitleGenreIdReviewDateReview等列。
  • Authors - 包括有关为审阅书籍做出贡献的每位作者的信息。
  • BooksAuthors - 多对多联接表,指定哪些作者编写了哪些书籍。

图 1 显示了这四个表的 ER 关系图。

Book Reviews Web 应用程序的数据库由四个表组成

图 1:Book Reviews Web 应用程序的数据库由四个表组成 (单击以查看全尺寸图像)

以前版本的书评网站为每本书都有一个单独的 ASP.NET 页面。 例如,有一个名为 ~/Tech/TYASP35.aspx 的页面,其中包含在 24 小时内自学 ASP.NET 3.5 的评论。 这个新的数据驱动版本的网站包含存储在数据库中的评论和单个 ASP.NET 页面,Review.aspx?ID=bookId,其中显示了指定书籍的评论。 同样,有一个Genre.aspx?ID=genreId 页面,其中列出了指定流派中已审阅的书籍。

图 2 和图 3 显示了 操作中的 Genre.aspxReview.aspx 页面。 记下每个页面的地址栏中的 URL。 在图 2 中,它Genre.aspx?ID=85d164ba-1123-4c47-82a0-c8ec75de7e0e。 由于 85d164ba-1123-4c47-82a0-c8ec75de7e0e 是 GenreId 技术流派的值,因此页面标题为“技术评论”,项目符号列表枚举属于此流派的网站上的这些评论。

“技术流派”页

图 2:“技术流派”页 (单击以查看全尺寸图像)

自学 ASP.NET 24 小时内 3.5 的评论

图 3:回顾 自学 ASP.NET 24 小时内 3.5 (单击以查看全尺寸图像)

Book Reviews Web 应用程序还包括一个管理部分,管理员可以在其中添加、编辑和删除流派、评论和作者信息。 目前,任何访问者都可以访问管理部分。 在将来的教程中,我们将添加对用户帐户的支持,并且仅允许授权用户进入管理页面。

如果下载 Book Reviews 应用程序,请记住,其用途是演示数据驱动应用程序的部署。 就应用程序设计而言,它不会展示最佳做法。 例如,没有单独的数据访问层 (DAL) ;ASP.NET 页通过其代码隐藏类中的 sqlDataSource 控件或 ADO.NET 代码直接与数据库通信。 若要更深入地了解如何使用分层体系结构创建数据驱动应用程序,请参阅我的 使用数据 教程

开发数据库与生产数据库

在数据驱动的 Web 应用程序上开始开发时,必须指定数据库连接字符串,其中提供了有关如何连接到数据库的应用程序详细信息。 除其他事项外,此连接字符串指定数据库服务器、数据库名称和安全信息。 大多数情况下,应用程序在开发期间使用的数据库与在生产环境中使用的数据库不同。 使用不同的数据库进行开发与生产有很多好处。 开发中使用不同的数据库意味着不必担心意外修改或删除实时数据。 它还允许你放入虚拟测试数据或对数据模型进行重大更改,而无需担心对生产环境中应用程序的影响。 在开发和生产环境中使用不同数据库的缺点是,在部署应用程序时,还必须部署对数据库架构或数据的任何相关更改。

在第一次部署之前,只有一个数据库实例,并且该实例位于开发环境中。 首次将应用程序部署到生产环境时,我们不仅必须复制必要的服务器端和客户端文件,还必须将数据库从开发环境复制到生产环境。 这就是我们目前使用 Book Reviews Web 应用程序的位置 - 数据库位于 App_Data 开发环境中的 文件夹中,但尚未推送到生产环境。

部署应用程序后,数据库有两个副本。 随着应用程序的成熟,可能会添加新功能,因此需要对数据模型 (进行更改,例如向现有表添加新列、更改现有列、添加新表等) 。 下一次部署 Web 应用程序时,自上次部署以来应用于开发环境中的数据库的更改必须应用于生产数据库。 将来的教程中将讨论管理此过程的一些策略。 本教程重点介绍如何将整个数据库从开发环境部署到生产环境。

将数据库部署到生产环境

本教程的其余部分介绍如何将数据库从开发环境部署到生产环境。 如果遵循以下操作,则需要确保 Web 主机提供商的帐户包含 Microsoft SQL Server 数据库支持。 你还需要有一些信息,即数据库服务器名称、数据库名称以及用于连接到数据库的用户名和密码。

如本教程前面所述,书评网站的 数据库是存储在 App_Data 文件夹中的 SQL Server 2008 Express Edition 数据库。 部署此类数据库就像将 App_Data 文件夹从开发环境复制到生产环境一样简单,这是有道理的。 但是,出于安全原因,大多数 Web 主机提供程序不支持在 App_Data 文件夹中托管数据库。 相反,Web 主机在其环境中的SQL Server数据库服务器上提供帐户。 将数据库从开发环境部署到生产环境需要在 Web 主机数据库服务器上注册数据库。

那么,如何将数据库从开发环境迁移到生产环境呢? 有几种方法可以完成此操作,具体取决于 Web 主机提供的服务。 使用某些主机(如 DiscountASP.NET),可以将数据库或实际.mdf文件的备份 FTP 到网站,然后从控制面板还原备份文件或将.mdf文件附加到SQL Server数据库服务器。 使用此类工具部署数据库非常简单,只需将App_Data文件夹复制到生产环境,然后通过控制面板附加它即可。 这也许是首次发布数据库的最简单、最快捷的方法。

另一种方法是使用数据库发布向导。 数据库发布向导是一个 Windows 桌面应用程序,它将生成 SQL 命令来创建数据库的架构(表、存储过程、视图、用户定义函数等),还可以选择创建表中的数据。 然后,可以通过 SQL Server Management Studio 连接到 Web 主机提供程序的数据库服务器,然后执行此脚本以在生产环境中复制数据库。 更好的是,如果 Web 主机提供程序支持 Microsoft 数据库发布服务,则可以代表你在数据库服务器上自动执行数据库发布向导生成的脚本。 由于数据库发布向导会生成用于创建数据库的架构和数据的脚本,因此无论 Web 主机提供程序是否提供附加上传 .mdf 的文件等功能,它都将正常工作。

生成 SQL 命令以使用数据库发布向导创建数据库架构和数据

让我们演练如何使用数据库发布向导将 Book Reviews 数据库部署到生产环境。 如果使用 Visual Studio 2008 或更高版本,则已安装数据库发布向导。

打开 Visual Studio 并导航到 Reviews.mdf 数据库。 如果使用 Visual Web Developer,请转到数据库资源管理器;如果使用 Visual Studio,请使用服务器资源管理器。 图 4 显示了 Reviews.mdf Visual Web Developer 中的数据库资源管理器中的数据库。 如图 4 所示, Reviews.mdf 数据库由四个表、三个存储过程和一个用户定义的函数组成。

在数据库资源管理器或服务器资源管理器中找到数据库

图 4:在数据库资源管理器或服务器资源管理器中找到数据库 (单击以查看全尺寸图像)

右键单击数据库名称,然后从上下文菜单中选择“发布到提供程序”选项。 这将启动数据库发布向导 (见图 5) 。 单击“下一步”以前进到初始屏幕。

“数据库发布向导”窗口的屏幕截图,其中显示了初始屏幕和用于推进向导的“下一步”按钮。

图 5:数据库发布向导初始屏幕 (单击以查看全尺寸图像)

向导中的第二个屏幕列出了数据库发布向导可访问的数据库,并允许你选择是编写所选数据库中的所有对象的脚本,还是选择要编写脚本的对象。 选择适当的数据库,并选中“为所选数据库中的所有对象编写脚本”选项。

注意

如果在图 6 所示的屏幕中单击“下一步”时收到错误“数据库 数据库中 没有此向导可编写脚本的类型的对象名称”,请确保数据库文件的路径不会过长。 如果数据库文件的路径太长,则可能会出现此错误。

“数据库发布向导”窗口的屏幕截图,其中显示了列表中突出显示的数据库和填充的“脚本所有对象”复选框。

图 6:数据库发布向导初始屏幕 (单击以查看全尺寸图像)

在下一屏幕中,可以生成脚本文件,或者,如果 Web 主机支持,请将数据库直接发布到 Web 主机提供程序的数据库服务器。 如图 7 所示,我正在将脚本写入文件 C:\REVIEWS.MDF.sql

将数据库脚本编写为文件或直接发布到 Web 主机提供程序

图 7:将数据库脚本编写为文件或直接发布到 Web 主机提供程序 (单击以查看全尺寸图像)

后续屏幕会提示你输入各种脚本选项。 可以指定脚本是否应包含 drop 语句以删除这些现有对象。 这默认为 True,首次部署数据库时正常。 还可以指定目标数据库是SQL Server 2000、SQL Server 2005 还是SQL Server 2008。 最后,可以指示是编写架构和数据、仅编写数据还是仅编写架构脚本。 架构是数据库对象、表、存储过程、视图等的集合。 数据是驻留在表中的信息。

如图 8 所示,我已将向导配置为删除现有数据库对象、为 SQL Server 2008 数据库生成脚本以及发布架构和数据。

指定发布选项

图 8:指定发布选项 (单击以查看全尺寸图像)

最后两个屏幕汇总了即将执行的操作,然后显示脚本的状态。 运行向导的净结果是,我们有一个脚本文件,其中包含在生产环境中创建数据库并使用与开发时相同的数据填充数据库所需的 SQL 命令。

在生产环境数据库上执行 SQL 命令

现在,我们有了脚本,其中包含用于创建数据库的 SQL 命令及其数据,剩下的就是在生产数据库上执行脚本。 某些 Web 主机提供程序在其控制面板中提供了一个文本框,你可以在其中输入要对数据库执行的 SQL 命令。 如果脚本文件非常大,则 (REVIEWS.MDF.sql 脚本文件的大小超过 425 KB(例如) ),此选项可能无法使用。

更好的方法是使用 SQL Server Management Studio (SSMS) 直接连接到生产数据库服务器。 如果计算机上安装了非 Express 版本的 SQL Server,则可能已安装 SSMS。 否则,可以下载并安装 SQL Server Management Studio Express Edition 的免费副本。

启动 SSMS 并使用 Web 主机提供程序提供的信息连接到 Web 主机数据库服务器。

“连接到服务器”对话框的屏幕截图,该对话框在文本字段中显示 Web 主机的数据服务器信息。

图 9:连接到 Web 主机提供程序的数据库服务器 (单击以查看全尺寸图像)

展开“数据库”选项卡并找到数据库。 单击工具栏左上角的“新建查询”按钮,粘贴数据库发布向导创建的脚本文件中的 SQL 命令,然后单击“执行”按钮,在生产数据库服务器上运行这些命令。 如果脚本文件特别大,则执行命令可能需要几分钟时间。

Microsoft SQL Server Management Studio窗口的屏幕截图,其中显示了正在生产服务器上执行的脚本文件命令。

图 10:连接到 Web 主机提供程序的数据库服务器 (单击以查看全尺寸图像)

这就是它的全部! 此时,开发数据库已复制到生产环境。 如果在 SSMS 中刷新数据库,应会看到新的数据库对象。 图 11 显示了生产数据库的表、存储过程和用户定义的函数,它们镜像开发数据库中的表、存储过程和用户定义函数。 由于我们指示数据库发布向导发布数据,因此在执行向导时,生产数据库表的数据与开发数据库表的数据相同。 图 12 显示了 Books 生产数据库表中的数据。

生产数据库上的数据库对象已重复

图 11:生产数据库上的数据库对象已复制 (单击以查看全尺寸图像)

生产数据库包含与开发数据库相同的数据

图 12:生产数据库包含与开发数据库上的相同数据 (单击以查看全尺寸图像)

此时,我们只将开发数据库部署到生产环境。 我们尚未讨论如何部署 Web 应用程序本身,也没有研究需要哪些配置更改才能使生产上的应用程序使用生产数据库。 我们将在下一教程中介绍这些问题!

总结

部署数据驱动的 Web 应用程序需要将开发期间使用的数据库复制到生产环境。 许多 Web 主机提供程序都提供工具来简化数据库部署过程。 例如,使用 DiscountASP.NET 可以 FTP 数据库.mdf文件 (或备份) ,然后将数据库从控制面板附加到数据库服务器。 无论 Web 主机提供程序提供的功能如何,另一个有效选项是 Microsoft 数据库发布向导工具,该工具可生成 SQL 命令脚本来创建开发数据库的架构和数据。 生成此脚本后,可以在生产数据库上执行它。

现在,书评 Web 应用程序的数据库已投入生产,我们可以部署该应用程序。 但是,Web 应用程序的配置信息指定数据库的连接字符串,并且该连接字符串引用开发数据库。 将站点部署到生产环境时,我们需要更新此连接字符串信息。 下一教程将介绍这些配置差异,并逐步讲解将数据驱动的书籍评论站点发布到生产环境所需的步骤。

编程快乐!

深入阅读

有关本教程中讨论的主题的详细信息,请参阅以下资源: