2013-06-26 33 views
1

我想知道,如果有克服這種情況的方式:靜態C#變量,拋出一個錯誤,因爲數據庫連接

我有一個叫做靜態變量的靜態類假設

static string[] Cities = GetCities(); 

GetCities從數據庫中獲得所有城市。問題是我收到GetCities錯誤,因爲數據服務器有時不可用,即使服務器再次可用,此錯誤也不會消失。
我認爲這是因爲變量城市只創建一次...

+0

你可以做一些初始化方法,它會嘗試連接到數據庫,然後將所需的信息保存到'城市' –

回答

4

我認爲,這是因爲可變城市創建只有一次

這是正確的:會有的GetCities()只有一個呼叫;如果失敗,將不會有其他電話。要解決此問題,請將Cities更改爲只讀屬性,並在獲得結果時緩存GetCities()的結果。

static string[] cachedCities = null; 
public static string[] Cities { 
    get { 
     return cachedCities ?? (cachedCities = GetCities()); 
    } 
} 
+0

非常感謝,我要與這個答案 – robertwolfheart

+0

@robertwolfheart不客氣!如果您不再尋找改進的解決方案,則可以接受您認爲有幫助的那個,以表明您已經有解決方案。這也可以爲您帶來Stack Overflow上的新徽章。 – dasblinkenlight

0

靜態初始化只發生一次每個類。當靜態初始化發生異常時,CLR存儲異常。該類的未來使用將自動重新拋出相同的異常,而不是觸發任何重新初始化。你不能改變這種行爲。

1

你真的不應該在初始化類型時進行數據庫訪問。

請考慮引入數據庫查詢的緩存機制。