我想知道,如果有克服這種情況的方式:靜態C#變量,拋出一個錯誤,因爲數據庫連接
我有一個叫做靜態變量的靜態類假設
static string[] Cities = GetCities();
和GetCities
從數據庫中獲得所有城市。問題是我收到GetCities
錯誤,因爲數據服務器有時不可用,即使服務器再次可用,此錯誤也不會消失。
我認爲這是因爲變量城市只創建一次...
我想知道,如果有克服這種情況的方式:靜態C#變量,拋出一個錯誤,因爲數據庫連接
我有一個叫做靜態變量的靜態類假設
static string[] Cities = GetCities();
和GetCities
從數據庫中獲得所有城市。問題是我收到GetCities
錯誤,因爲數據服務器有時不可用,即使服務器再次可用,此錯誤也不會消失。
我認爲這是因爲變量城市只創建一次...
我認爲,這是因爲可變城市創建只有一次
這是正確的:會有的GetCities()
只有一個呼叫;如果失敗,將不會有其他電話。要解決此問題,請將Cities
更改爲只讀屬性,並在獲得結果時緩存GetCities()
的結果。
static string[] cachedCities = null;
public static string[] Cities {
get {
return cachedCities ?? (cachedCities = GetCities());
}
}
非常感謝,我要與這個答案 – robertwolfheart
@robertwolfheart不客氣!如果您不再尋找改進的解決方案,則可以接受您認爲有幫助的那個,以表明您已經有解決方案。這也可以爲您帶來Stack Overflow上的新徽章。 – dasblinkenlight
靜態初始化只發生一次每個類。當靜態初始化發生異常時,CLR存儲異常。該類的未來使用將自動重新拋出相同的異常,而不是觸發任何重新初始化。你不能改變這種行爲。
你真的不應該在初始化類型時進行數據庫訪問。
請考慮引入數據庫查詢的緩存機制。
你可以做一些初始化方法,它會嘗試連接到數據庫,然後將所需的信息保存到'城市' –