5

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

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

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

谢谢

4

4 回答 4

2

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

于 2012-05-03T09:41:08.203 回答
0

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

1.

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

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

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

2.

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

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

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

于 2012-05-03T11:54:51.907 回答
0

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

于 2012-05-03T09:24:56.287 回答
0

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

例子是:

于 2012-05-03T11:37:38.230 回答