2009-12-06 81 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(); 

至於數據庫是脫機 - 你必須處理可能的異常時調用該數據庫以這樣的方式使您的應用程序不會崩潰,但會向用戶返回一條信息性消息 - 或者進行日誌記錄,或者在您的方案中有意義。

馬克