这是我的情况。我有一个与sql server交互的桌面应用程序。将有一个sql server和多个应用程序将访问同一个数据库。目前有两台计算机正在运行相同的应用程序。
如果我在数据库架构中进行了更改,我还必须在应用程序中进行更改,现在问题就出现了。
更改前: 表发票与列 - title varchar(128)
更改后: 表发票与列 - title varchar(128) - content varchar(128)
计算机A使用旧应用程序,该应用程序没有关于该新列“内容”的任何信息,而计算机B使用新应用程序。
因为A正在使用旧的应用程序,它会向表中插入空值,B将面临空指针异常。
我想不出任何其他方式,因为旧的应用程序不能在交易过程中终止和下载最新版本。我不认为告诉人们在停机时间内不使用应用程序并在之后重新启动应用程序是个好主意。
网站如何处理此问题?我认为所有网站都将面临这个问题。
防止这种情况发生的正确方法是什么? 请指出正确的方向
答案 0 :(得分:1)
有一些选择可以做到这一点。例如:
使用ClickOnce部署,您可以在Application Updates
对话框中为应用程序指定所需的最低版本。您还可以在应用程序运行时使用代码检查programmatically。
此外,如果您不使用ClickOnce,您可以将所需软件的最低版本保留在数据库中,并在应用程序启动时检查数据库中的版本,如果当前版本低于最低要求版本,则不要运行应用程序。如果需要,您还可以在应用程序运行时以编程方式检查它。
var version = Assembly.GetExecutingAssembly().GetName().Version;
答案 1 :(得分:0)
您可以在数据库中查询记录,告诉您兼容的应用程序的最低版本是什么。
答案 2 :(得分:0)
一个快速而肮脏的解决方案是为插入编写一个触发器,它会将默认值写入新列(“内容”。或者(更容易)使用列的默认值。