Xcopy 部署 (SQL Server Express)

Xcopy 是一种简化的应用程序和 SQL Server Express 数据库部署方式。使用 Xcopy 部署可以将新应用程序文件 (.exe) 和数据库文件 (.mdf) 复制到另一台计算机或同一台计算机上的不同位置。这种方式无需任何其他配置。

若要将应用程序分发给用户,只需发送这些 .exe 和 .mdf 文件即可。每个用户都可以在本地保存这些文件,并且双击 .exe 即可启动应用程序。如果您的应用程序使用复制,则不应当使用 Xcopy 部署。

若要使用 Xcopy 部署,SQL Server Express 必须安装在目标计算机上并且必须有一个正在运行的实例。有关详细信息,请参阅非管理员用户实例

如何使用 Xcopy 部署?

当应用程序首次与正在运行的 SQL Server Express 实例建立连接时,SQL Server Express 会自动附加一个 .mdf 文件。当用户关闭应用程序时,SQL Server Express 会将 .mdf 文件从实例中分离出来。Xcopy 功能使得 .mdf 文件变得完全可移植。您可以复制并移动该文件,同时在相同的实例上运行该文件的多个副本。

数据库逻辑命名

当 SQL Server Express 附加数据库时,如果您应用程序中的连接字符串没有指定逻辑名称,它便会自动为该数据库生成一个逻辑名称。该逻辑名称必须是唯一的。SQL Server Express 将使用驱动器号、目录名以及数据库文件名作为逻辑名称。例如,如果您的 .mdf 文件位于 C:\Program Files\My Application\Data\MainData.mdf 路径中,则 SQL Server Express 便会分配一个与路径 C:\Program Files\My Application\Data\MainData.mdf 完全匹配的逻辑数据库名称。

注意注意

如果完整路径和文件名的长度超过 127 个字符,则需要缩短数据库的逻辑名称,并加上 GUID 作为前缀。这确保了逻辑名称的唯一性。

日志文件的创建和命名

部署应用程序时,只需要在 Xcopy 中包含应用程序文件和 .mdf 文件。不应当包括日志文件 (.ldf)。SQL Server Express 会在附加数据库时自动创建新的日志文件。SQL Server Express 将该日志文件命名为 database_name_log.ldf。如果 .mdf 文件所在目录中已经存在同名的文件,则使用现有文件。

使用 Xcopy 部署时的限制

当您对应用程序使用 Xcopy 部署时,某些 SQL Server Express 功能可能无法正常使用。以下列表说明了可能出现的限制。

  • 任何包含数据库逻辑名称的 Transact-SQL 代码都无法使用。

    因为数据库的逻辑名称取决于文件位置,该位置会在每次 Xcopy 时发生更改,所以,任何指定数据库逻辑名称的代码都无法使用。

  • 复制方案无法执行。

    复制需要一个持久的数据库逻辑名称。如果您的应用程序使用复制,则不应当使用 Xcopy 部署。

为 SQL Server Express 实例管理员进行 Xcopy 部署

若要使应用程序能够使用 SQL Server Express 的 Xcopy 部署功能,必须确保在应用程序中所使用的连接字符串包含正确的参数:

  • 使用 data source 参数,但将计算机名称更改为句点 (.) 或(本地)。除非能确保 SQL Server Express 将始终安装在未命名的实例上,否则还必须指定实例名称。

  • 使用 initial catalog 或 database 参数,但不要将参数设置为值。

  • 添加 AttachDBFileName 参数并将其设置为 .mdf 文件的名称和路径。Attachdbfilename 是一个 SqlClient 连接字符串选项,它允许在运行时附加数据库并自动生成数据库名称。使用 DataDirectory 关键字可以指定数据库文件的相对路径。Attachdbfilename还有助于提高数据库的可移植性。有关 Attachdbfilename 的详细信息,请参阅 Visual Studio 2005 文档。

以下连接字符串会将 MyDb.mdf 数据库文件(该文件与应用程序可执行文件位于同一个文件夹中)附加到本地计算机上运行的 SQL Server Express 实例上。

@"Data Source='.\SQLExpress'; Initial Catalog=; Integrated 
Security=true; AttachDBFileName='" |DataDirectory| + 
@"\MyDb.mdf'"

SQL Server Express 实例上针对非管理员的 Xcopy 部署

若要为不具有 SQL Server Express 实例的管理用户权限的用户部署应用程序,必须指定:

  • Xcopy 部署的连接字符串中的参数。

  • user instance 参数。

有关详细信息,请参阅非管理员用户实例

请参阅

其他资源