C# 确保两台计算机运行相同版本的应用程序

C# 确保两台计算机运行相同版本的应用程序,c#,sql-server,vb.net,C#,Sql Server,Vb.net,这是我的情况。我有一个与sql server交互的桌面应用程序。将有一个sql server,多个应用程序将访问同一个数据库。目前有两台计算机运行相同的应用程序 如果我在数据库模式中进行了更改,我还必须在应用程序中进行更改,现在问题就出现了 更改前: 带列的发票表 -标题varchar(128) 变更后: 带列的发票表 -标题varchar(128) -内容varchar(128) 计算机A使用的旧应用程序没有关于新列“内容”的任何信息,而计算机B使用的是新应用程序 因为A正在使用旧的应用程序,

这是我的情况。我有一个与sql server交互的桌面应用程序。将有一个sql server,多个应用程序将访问同一个数据库。目前有两台计算机运行相同的应用程序

如果我在数据库模式中进行了更改,我还必须在应用程序中进行更改,现在问题就出现了

更改前: 带列的发票表 -标题varchar(128)

变更后: 带列的发票表 -标题varchar(128) -内容varchar(128)

计算机A使用的旧应用程序没有关于新列“内容”的任何信息,而计算机B使用的是新应用程序

因为A正在使用旧的应用程序,它将向表中插入空值,而B将面临空指针异常

我不能想到任何其他方法,因为旧的应用程序不能在事务中间终止和下载最新版本。我认为,告诉人们不要在停机时间内使用应用程序,然后在停机时间后重新启动应用程序不是一个好主意

一个网站如何处理这个问题?我想所有的网站都会面临这个问题

防止这种情况发生的正确方法是什么?
请给我指出正确的方向

您可以在数据库中查询一条记录,该记录告诉您兼容的应用程序的最低版本是什么。

有一些选项可供选择。例如:

使用部署,您可以在
应用程序更新
对话框中指定应用程序所需的最低版本。您还可以在应用程序运行时使用代码进行检查

此外,如果不使用ClickOnce,则可以将软件的最低要求版本保留在数据库中,并在应用程序启动时检查数据库中的版本,如果当前版本低于最低要求版本,则不运行应用程序。如果需要,还可以在应用程序运行时以编程方式进行检查

var version = Assembly.GetExecutingAssembly().GetName().Version;

一个快速而肮脏的解决方案是为insert编写一个触发器,该触发器将向新列(“内容”)写入一个默认值为您的列使用默认值。

有趣的一点。但是,如果它在事务处理过程中,它不会有同样的问题吗?我发现我可以让它在事务结束时检查表版本。嗯,添加默认值听起来是个不错的主意。如果添加了“总计”列,它的默认值是0.00。但是这是“总计”“列必须包含值的总和,则此方法无法正常工作?您可以在触发器中计算总数,也可以使用计算列。”。你的数据库后端是什么?再说一遍:这是一个肮脏的!您可以在表定义中添加默认值-不需要触发器,除非您正在更新其他表,或者如上所述,在DB端创建值。我可以在启动时检查版本,但它看起来大部分时间都不起作用,因为除非人们关闭应用程序,否则应用程序将刚刚启动并运行。或者正如我所说,您可以在应用程序运行时检查它。