【问题标题】:Ensure two computers running the same version of the application确保两台计算机运行相同版本的应用程序
【发布时间】:2016-01-08 02:20:28
【问题描述】:

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

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

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

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

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

因为A使用的是旧app,所以会往表中插入空值,B会遇到空指针异常。

我想不出任何其他方式,因为旧应用程序不能在交易过程中终止并下载最新版本。而且我认为告诉人们不要在停机时间内使用应用程序并在之后重新启动应用程序是一个好主意。

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

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

【问题讨论】:

    标签: c# sql-server vb.net


    【解决方案1】:

    有一些选项可以做到这一点。例如:

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

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

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

    【讨论】:

    • 我可以在启动时检查版本,但它似乎在大多数情况下都无法工作,因为除非人们关闭应用程序,否则应用程序将刚刚启动并运行。
    • 或者像我说的,你可以在应用运行的时候检查一下。
    【解决方案2】:

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

    【讨论】:

    • 有趣的地方。但是如果是在交易的中间,是不是也有同样的问题呢?我看到我可以让它在事务结束时检查表版本
    【解决方案3】:

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

    【讨论】:

    • 嗯,添加一个默认值听起来是个好主意。假设添加了“总计”列,默认值为 0.00。但是这个“总计”列必须包含值的总和,那么这种方法就行不通了?
    • 您可以在触发器中计算总数或有一个计算列。你的数据库后端是什么?
    • 再说一遍:这太脏了!
    • 您可以在表定义中添加默认值 - 不需要触发器,除非您正在更新其他表,或者如上所述,在数据库端创建值。
    猜你喜欢
    • 2018-01-18
    • 1970-01-01
    • 2020-06-26
    • 2016-10-24
    • 2014-08-08
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多