使用 .net 可执行文件执行 SQL 脚本

本文关键字:SQL 脚本 执行 可执行文件 net 使用 | 更新日期: 2023-09-27 18:32:56

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

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

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

谢谢

使用 .net 可执行文件执行 SQL 脚本

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

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

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

例如:

  • 流利迁移器
  • Migrator.net
  • RikMigrations
  • 亚音速迁移
  • 海牛

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

1.

一个 WinForms 应用程序,用于分析某个 SQL 数据库以及包含 scruipt 文件的 SQL 解决方案文件夹。然后,它将脚本文件数学化为 SQL 对象,并让我构建一个包含各种脚本文件的执行顺序的"清单.xml"。

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

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

阿拉伯数字。

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

然后,在我的应用程序中,每当我的应用程序版本>数据库版本时,我都会运行升级。

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