2009-12-06 84 views
1

我有一个应用程序调用在线数据库。如果我失去与互联网的连接或数据库关闭,我的应用程序将崩溃。处理在线和离线

处理这个问题的方法是什么?

我自己的做法是让一个对象始终保持调用数据库的状态,如果抛出异常,则会触发一个事件,其他所有组件都会注册并禁用某些功能。

这是正确的方法还是有更好的解决方案?

回答

2

很难说什么是最适合你,明知大局观,但我能想到的3种方式,你可能掌握了这些情况:

1)处理连接问题以及在它们发生的时间点恰好报告给他们
2)像你说的那样,如果“ping”失败,定期轮询连接并禁用功能
3)使用db的本地副本,然后同步更新到连接时有主分贝

海事组织,我会去1)或3)。 选项3提供了最佳的用户体验。选项1可能涉及最少的开发工作。

使用选项2,您遇到的问题是无论您经常轮询多少次,都可能随时遇到连接问题。

+0

首先thx为所有答案!我想我会选择2和3相结合的解决方案。我需要能够显示应用程序是否在线。 –

3

我想这取决于功能的重要性。你试图做的是什么样的Smart Client Application Block试图实现。所以它可能值得研究它如何处理这种情况。

从内存我认为我听到的大多数应用程序实际上试图缓存数据。因此,该应用程序在数据库的本地副本上工作,并在每次连接时与在线副本同步。

例如,SQL Server Express允许您通过网络将数据库与另一个SQL Server数据库同步。

所以基本上它取决于你的数据,如果你可以有一个本地缓存,用户的工作,并且你可以稍后同步,那么你可以去。否则,你所描述的方法听起来应该起作用。

1

要检查是否是在网络上还是没有,你可以使用.NET的NetworkInterfaceSystem.Net.NetworkInformation命名空间:

bool connected = NetworkInterface.GetIsNetworkAvailable(); 

至于数据库是脱机 - 你必须处理可能的异常时调用该数据库以这样的方式使您的应用程序不会崩溃,但会向用户返回一条信息性消息 - 或者进行日志记录,或者在您的方案中有意义。

马克