我有一个应用程序可以调用在线数据库。如果我丢失了与互联网的连接或数据库已关闭,我的应用程序将崩溃。
处理此问题的方法是什么?
我自己的方法是拥有一个始终一直调用数据库的对象,如果抛出异常,则触发一个事件,所有其他组件都注册到该事件,然后禁用某些函数。
这是正确的方法还是有更好的解决方案?
答案 0 :(得分:3)
我想这取决于功能的重要性。你要做的是类似于Smart Client Application Block试图实现的目标。所以它可能值得研究它如何处理这样的情况。
从内存中我认为我听过的大多数应用程序实际上都试图缓存数据。因此,应用程序可以处理数据库的本地副本,并且只要它可以连接就可以与在线副本同步。
例如,SQL Server Express允许您通过网络将数据库与另一个SQL Server数据库同步。所以基本上它取决于你的数据,如果你可以有一个用户工作的本地缓存,并且你可以稍后同步,那么你可以使用它。否则你所描述的方法听起来应该有效。
答案 1 :(得分:2)
很难说知道更大的情况会对你有什么好处,但我可以想出3种方法可以解决这些问题:
1)在它们发生的时间点处理连接问题,并且只是很好地报告它们 2)就像你说的,如果“ping”失败,则定期轮询连接并禁用功能 3)使用db的本地副本,然后在连接时同步更新到主db
IMO,我会选择1)或3)。 选项3提供最佳用户体验。 选项1可能涉及最少的开发工作。
使用选项2,您遇到的问题是无论您多长时间投票一次,都可能随时遇到连接问题。
答案 2 :(得分:1)
要检查您是否在网络上,可以使用来自NetworkInterface
命名空间的.NET System.Net.NetworkInformation
:
bool connected = NetworkInterface.GetIsNetworkAvailable();
对于数据库处于脱机状态 - 在调用该数据库时,您必须处理可能的异常,以便您的应用程序不会崩溃,但会向用户返回一条信息性消息 - 或者记录,或者是什么使得在你的场景中感觉到。
马克