【问题标题】:Execute SQL Script with .net executable使用 .net 可执行文件执行 SQL 脚本
【发布时间】:2012-05-03 09:12:49
【问题描述】:

我有一个 c# .net 应用程序,它已分别分发给多个客户端,有时我们会添加一些新功能或修复一些错误并经常在数据库中进行更改。我使用单击一次部署方法将 exe 更新到我的客户端电脑。 SQL 服务器实例已安装在他们的系统上。

我想知道如何在每次更新 exe 时更新他们的 sql 数据库。

请记住,客户可能正在使用版本 2 并且从未更新到版本 3,但是当版本 4 发布时,他会更新应用程序。在这种情况下,我需要在他的数据库上执行两个脚本。一个用于版本 3,另一个用于当前版本 4。

谢谢

【问题讨论】:

    标签: c# .net sql automation database-deployment


    【解决方案1】:

    假设您有一个可以将一个版本更新为另一个版本的存储过程/脚本,并且假设您无法加载任何其他将运行它的 exe,为什么不在开始时包含一个运行它的调用新版本?是否在软件加载时进行检查,以查看他们是否使用了正确版本的数据库,如果没有,请更新它。要处理从第 2 版升级到第 4 版等问题,只需确保数据库本身跟踪当前的版本即可。

    【讨论】:

    • 所以我需要将数据库的所有脚本保存在我的可执行文件中,这样每当用户更新 exe 时,它​​们各自的脚本都应该可用。
    【解决方案2】:

    您可以尝试sqlcmd,然后从您的应用程序中调用带有数据库更新的 exe。

    【讨论】:

      【解决方案3】:

      这种情况最好通过使用“数据库迁移”来解决。 .net 生态系统中有多种工具可以帮助您。有些工具带有单独的运行器,而其他工具可以编译为 .net 程序集,您可以将其包含在您的项目中。

      例如:

      【讨论】:

        【解决方案4】:

        我创建了两个组件来解决这个问题:

        1.

        分析特定 SQL 数据库以及包含脚本文件的 SQL 解决方案文件夹的 WinForms 应用程序。然后它将脚本文件与 SQL 对象进行数学运算,并让我构建一个“Manifest.xml”,其中包含各种脚本文件的执行顺序。

        表的脚本文件包含有关升级表结构的每个版本的说明。

        然后,构建器将相关脚本文件与清单一起复制到某个位置。如果我不担心我的应用程序文件夹过于拥挤,我通常会将它们与我的应用程序一起复制。否则,我会将它们压缩为受密码保护的 7-zip。

        2.

        解包(如果需要)并执行清单的命令行应用程序。实际工作是在一个单独的类库中完成的,该类库可以集成到我的应用程序中。

        然后在我的应用程序中每当我的 appversion > dbversion 我运行升级。

        在只有一个客户的暂存和生产设置且通常不涉及应用程序的设置中,我将手动使用独立的 CLI 应用程序。这是一种推送更新的简单方法,特别是如果您修改了 20 个视图并且真的不想将它们全部复制/粘贴到 SQL Mgt Studio 中:p

        【讨论】:

          猜你喜欢
          • 2010-11-14
          • 1970-01-01
          • 2010-10-13
          • 1970-01-01
          • 1970-01-01
          • 2013-05-11
          • 1970-01-01
          • 2014-01-09
          • 1970-01-01
          相关资源
          最近更新 更多