如何创建安装程序以实现数据库架构更改?

时间:2009-07-15 12:49:22

标签: .net asp.net sql-server

我正在创建一个拥有自己的数据库架构的项目。将使用我的项目创建的DLL的其他项目将在我的DLL所需的数据库中具有相同的模式。 但问题是,如果需要为我更改架构,对于在数据库中进行所有更改的每个客户端说这都不是一个好的选择。

所以,我想创建一个安装程序,它会自动为它们执行此操作... 任何建议,想法赞赏..

5 个答案:

答案 0 :(得分:1)

查看此工具 - > http://www.liquibase.org/ 它允许自动化数据库迁移脚本

答案 1 :(得分:0)

我会在数据库模式的每个更改上生成一个更改srcipt,检查是否尚未应用更改并将其与我的DLL或安装应用程序一起发送,这将更新DLL并运行所有更改脚本

答案 2 :(得分:0)

您可以使用WiX来创建安装程序:GAC'您的程序集只是一个选项,您可以对数据库执行SQL脚本。

答案 3 :(得分:0)

此解决方案使用Visual Studio 2008中的安装项目,并使用.NET框架中的内置Installer类。可以找到其他链接herehere

以下是该怎么做的基本概要:

  1. Installer类实例添加到将安装到客户端PC的项目
  2. 添加将应用程序安装到客户端PC的安装项目
  3. 定义将在安装期间的某些点引发的安装项目中的操作
  4. 覆盖Installer类上的相关方法,以便在应用程序安装期间从最终用户获取数据库连接详细信息
  5. 保留数据库连接设置(如果是卸载)
  6. 在安装程序的上下文中运行自定义方法/类/可执行文件并执行必须执行的操作
  7. 以下是分步指南:

    1. 添加Installer类:必须在要安装的应用程序中放置Installer类。在Visual Studio的Solution Explorer中,选择要安装的应用程序,然后单击菜单项“Project-> Add New Item-> Installer Class”。这将添加一个名为“Installer1”的默认安装程序类。
    2. 在Visual Studio的解决方案资源管理器中,选择“安装”项目并右键单击它。选择“查看 - >自定义操作”以显示安装期间要执行的自定义操作。
    3. 在“自定义操作”窗口中,为“安装”和“卸载”
    4. 添加自定义操作
    5. 转到Installer班级(“Installer1”)并覆盖OnBeforeInstall
    6. 这是关于事情如何运作的伪代码:

      [Installer1.cs]

      protected override void OnBeforeInstall(IDictionary savedState)
      {
          base.OnBeforeInstall(savedState);
      
          MessageBox.Show("OnBeforeInstall: " + GetProperties(savedState));
      
          using (ConnectionDialog d = new ConnectionDialog())
          {
              d.ShowDialog();
      
              savedState["database"] = d.Database;
              savedState["user"] = d.User;
              savedState["password"] = d.Password;
              savedState["integrated"] = d.Integrated;
          }
      }
      

      安装程序传入的IDictionary实例是一组键/值对,用户可以使用它们的相关数据进行填充。这些相同的信息将传递给其他方法,例如OnBeforeUninstall,开发人员可以使用这些方法来分离数据库或回滚更改或其他任何方法。

答案 4 :(得分:0)

如果您的安装程序可以调用简单的批处理文件,则可以创建一个只执行以下操作的批处理文件:

  1. 使用osql查询表的架构版本号。在这种情况下,我们可以说表中存有“3”。
  2. 再次使用osql运行下一个版本更新,一个名为4.sql
  3. 的文件
  4. 使用osql更新版本号
  5. 然后,如果5.sql存在,请执行下一个,等等。