65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET 安装程序自动安装 SQL 2005 Express

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.77/5 (23投票s)

2008 年 7 月 28 日

GPL3

5分钟阅读

viewsIcon

158757

downloadIcon

6222

此项目使开发人员能够创建一个自动安装 SQL 2005 Express 并从中恢复数据库的安装包

引言

程序员经常会遇到这样的问题:

  1. 包含 SQL Express 2005 的安装和部署项目只能安装默认数据库实例名称 (SQLEXPRESS),而程序员通常希望使用不同的实例名称。在使用安装和部署项目时,这是不可能实现的。
  2. 当数据库安装完成后,一些安装需要程序员手动指定备份数据库的位置,以便进行恢复,或者大多数情况下程序员会使用 Management Studio 手动完成。
  3. 恢复时经常会出现问题,因为原始 MDF LDF 位置和恢复目标位置不同,例如:
        "[Microsoft][ODBC SQL Server Driver][SQL Server]Directory lookup for the file 
        failed with the operating system error 5(Access is denied.)."
        or
        File 'XXX_Log' cannot be restored to 'x:\yyy'. Use WITH MOVE to identify a valid 
        location for the file. 

    第一个错误通常发生在 SQL 运行恢复时尝试在另一个 SQL 数据库实例(通常是默认实例)中查找路径,但由于没有文件夹访问权限,会生成“拒绝访问”错误。第二个错误发生在原始 MDF 位置和恢复 MDF 位置不同时。

  4. 程序员希望有一个安装文件,能够自动安装 .NET、Windows Installer、SQL Express。

    本项目解决了以上所有问题,使安装文件能够自动安装所需的应用程序,而无需用户了解如何创建数据库、如何恢复、如何配置连接字符串等,应用程序可以自动完成所有这些操作。

步骤

  1. 下载示例项目,并将其解压到,例如 D:\Software Pekerjaan\Makanan
  2. http://download.microsoft.com/download/e/a/4/ea4b699b-bec4-4722-96d3-254580ed7f9e/SQLEXPR32.EXE 下载 SQL 2005 Express Edition。将其复制到任何文件夹,然后从命令提示符 (CMD.exe) 进入包含该文件的文件夹,运行“SQLEXPR32.exe /x”,然后会出现一个窗口询问要提取文件的位置。选择一个位置。
  3. 将提取的文件和文件夹复制到 MenuMakanan 项目的 bin\debug\SQLEXPR2005 文件夹,该文件夹已包含一个名为 Food_Restore.bak 的文件,这是程序员创建的数据库备份,必须放在那里。
  4. 现在我们将使用主窗体中的 InstallationSQLEXPR 类,该类在程序员应用程序中显示。例如,程序员有一个启动窗体名为 Login.cs,请按以下方式更改构造函数:
     public Login()
            {
                InitializeComponent();
                
                InstallationSQLEXPR _ins = new InstallationSQLEXPR("Food", "JOHN",
                "MenuMakanan", "Food", "JOHNKENEDYDAL", "FOOD_RESTORE.BAK");
                if (_ins.IsDone == false) _ins.ShowDialog();
                if (_ins.IsRestart == true)
                {
                    Application.Exit();
                    this.Close();
                    return;
                }
            } 

请记住添加 using JohnKenedy.DataAccess; 以便找到 Installation 类。这个 Installation 类接受 6 个参数,下面我将进行解释:

  1. 第一个是 Food,这是在安装进度中显示的应用名称。
  2. 第二个是 JOHN,这是你的计算机名称,你可以简单地使用 "(local)" 替换 "JOHN" 来表示安装是在运行 Setup 的计算机上完成的。
  3. 第三个是 MenuMakanan,这是将要安装的新数据库实例。使用安装和部署项目时,我们不能将数据库实例命名为 SQLExpress 以外的名称,但使用这个 InstallationSQLEXPR 类,我们可以做到这一点,甚至可以自己指定 sa 密码。
  4. 第四个是 Food,这是应用程序安装的数据库名称。
  5. 第五个是 JOHNKENEDYDAL,这是新安装的 SQL EXPRESS 的 sa 密码。使用 Management Studio 连接到数据库实例时需要此密码。
  6. Food_Restore.BAK 是你的数据库备份文件名,存储在 MenuMakanan 项目 bin\debug\SQLEXPR2005 文件夹中。你可以根据需要进行更改。

正如你所注意到的,会有代码检查 IsDone IsRestart 。保留这两个检查不变,因为这是 Installation 类留给我们的条件,用于告诉主 Startup 窗体应该做什么,是关闭应用程序还是显示窗体。

现在编译应用程序。你的编译后的 MenuMakanan.exe 将自动安装你的应用程序,因为配置是 IsInstall=1IsRestart=0。如果安装成功,该值将都变为 0,应用程序将正常启动。

创建安装和部署项目

  1. 创建一个新的安装和部署项目,在此示例中已存在名为 SetupMakananSqlExpr 的项目。
  2. 在应用程序文件夹中,创建一个名为 SQLEXPR2005 的新文件夹。选择从步骤 2(上一节)中提取的所有文件,并将它们拖放到这个新创建的文件夹中。
  3. 添加你的数据库备份文件,在此示例中是 Food_Restore.bak(来自 MenuMakanan bin\debug\SQLEXPR2005 文件夹,因为 Installation 类在恢复时会在此文件夹中查找备份文件。完成步骤二和三后,它看起来会是这样:

    create_setup.JPG

  4. 现在右键单击 SetupMakanan 项目,选择属性,然后单击“先决条件”按钮。

    set_prerequisites.JPG

  5. 然后选择第二个单选按钮,从我的应用程序的相同位置下载先决条件。单击确定,然后保存。

  6. 生成整个解决方案,然后生成 SetupMakananSqlExpr 项目。你将在 SetupMakananSqlExpr 项目的 debug 文件夹中看到 Setup.exeSetupMakanan.msi,以及两个新文件夹;一个是 Windows Installer 3_1,另一个是 DotNetFX35,它们是 .NET 的先决条件。

现在你可以将这些文件刻录到 CD 或压缩以进行分发。Setup 应用程序将安装先决条件,然后将你的应用程序安装到指定文件夹。当用户运行你的应用程序时,它会检查 IsInstall IsRestart 参数以确定是否需要安装数据库。如果需要,它将安装数据库,然后请求重启。重启后,它会再次检查是否需要附加数据库。如果需要,它将附加数据库,最后运行你的应用程序。

当用户安装应用程序时,如果不存在,它将安装 Windows Installer 和 .NET。当您第一次运行应用程序时,它会检查数据库实例是否存在。如果不存在,它将安装数据库实例,并将备份数据库恢复到新的数据库实例。

注释

  1. 库中的 RestoreDatabase 方法可以恢复数据库,即使备份的原始 MDF 位置与恢复位置不同(不同的数据库实例/PC)。
  2. 库具有 JohnKenedy.DataAccess 命名空间,必须将其包含在程序员的 Windows Form 项目中。
  3. SQL 2005 Express 无法安装除 SQLExpress 以外的其他数据库实例,但此库可以实现,因为它使用了 ProcessStartInfo ,并在应用程序安装完成并首次运行时进行安装。
  4. Microsoft 提供的 SQLEXPR32.exe 必须被提取(使用 /x 选项)才能使用命令行参数进行安装,而此库正是这样做的。
  5. 用户可以看到 SQL 2005 Express 的安装过程,但用户只需单击“下一步”并查看进度条,而无需进行配置,因为它是由库传递的参数进行配置的。

历史

此库并未完全准备好进行安装,相反,该库具有数据访问功能 - 文章可以在 https://codeproject.org.cn/kb/library/johnkenedy_library.aspx 找到。

我创建了另一篇文章,其中安装 MSDE 并将数据库附加到 MSDE,你可以在 https://codeproject.org.cn/KB/dotnet/_Net_Installer_With_MSDE.aspx?
msg=2654769#xx2654769xx.
阅读。
© . All rights reserved.