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

时间:2012-05-03 09:12:50

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

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

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

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

由于

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

例如:

答案 3 :(得分:0)

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

1

分析某个SQL DB的WinForms应用程序以及包含scruipt文件的SQL解决方案文件夹。然后它将脚本文件计算为SQL对象,并让我构建一个“Manifest.xml”,其中包含各种脚本文件的执行顺序。

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

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

2

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

然后在我的app中每当我的appversion> dbversion我运行升级。

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