2016-07-19 37 views
-1

我的問題是,我不斷收到這樣的錯誤:爲*的類型初始值引發了異常

爲「myproject.GV」的類型初始值引發了異常「

GV。代碼看起來很好,在運行時沒有錯誤,但是在我用MySqlConnection調用conn之後,問題就會出現。 我嘗試調用conn的代碼示例如下:GV.conn.Open();

在我將以下代碼放入我的程序之前,工作得很好。現在,它保持引發錯誤:

導致出現此問題
public static class GV 
{ 
    public static MySqlConnection conn = new MySqlConnection(
       "server=localhost;port=3306;uid=root;database=sysdb_elearn;password=***"); 
    public static MySqlCommand com = null; 
    public static MySqlDataReader dr = GV.com.ExecuteReader(); 
    public static frmLearnerPanel flp = new frmLearnerPanel(); 
    public static frmLogIn frmLogin = new frmLogIn(); 
} 
+2

這一般看起來像是一個非常危險的方式來做數據庫CRUD – Kritner

+0

可能是你的數據庫連接出了問題。嘗試獲取有關該問題的詳細信息(請參閱http://stackoverflow.com/a/4398380/870604)。另外,你通常不需要在數據庫連接上使用單例,但這是另一回事。 – ken2k

+0

看起來你已經遺漏了很多代碼,或者你的班級不完整。你希望能夠將它用作'常量'類,對嗎?如果是這樣,只需將連接字符串放在conn中,然後在Main()中實例化一個MySqlConnection。此外,我敢肯定,你不能只使用這樣的dr成員。 –

回答

0

即時錯誤 - 在NullReferenceException異常靜態字段inizialization上MySqlDataReader dr = GV.com.ExecuteReader();com是字段都被初始化的時間空)。當靜態屬性初始化期間出現任何異常時,整個類標記爲失敗的初始化,並且將來的任何訪問都會引發您觀察到的異常。更多信息可以在MSDN文章TypeInitializationException中找到。

修復:

  • 如果你真的需要在靜態字段這個數據 - 在處理異常並不會拋出靜態方法包裝代碼。請注意,靜態變量中的緩存讀取器非常不實用,因爲您只能從中讀取一次數據。

    public static MySqlDataReader dr = StaticInitializerThatDoesNotThrow(); 
    
  • 更好的解決方案 - 重構代碼調用SQL是必要和妥善處置連接對象。即看到正確的電話 - How to retrieve data from a SQL Server database in C#?

+0

哈哈固定它謝謝!我記得之前我沒有把MySqlDataReader放在public static我認爲它應該工作,所以我試驗了一下。我刪除了DataReader,然後在我的表單上聲明它。 –

相關問題