2012-06-13 61 views
2

我找不到任何解決方案張貼問題:錯誤:字段初始不能引用非靜態字段,方法或屬性

class ApiData 

{ SqlCeConnection conn = new SqlCeConnection(@"Data Source=C:\Users\Peter\Documents \db.sdf;"); 

SqlCeCommand cmd = null; 
    SqlCeDataReader rdr = null; 
    public string code() 
    { 
     conn.Open(); 
     cmd = conn.CreateCommand(); 
     cmd.CommandText ="SELECT code FROM Charakter WHERE id=1"; 
     rdr = cmd.ExecuteReader(); 
     rdr.Read(); 
     string selected = rdr.GetString(0); 
     conn.Close(); 
     return (selected); 
    } 
class Data{ 
    ApiData g= new ApiData(); 
    string vode = **g.code();** 
} 

這是爲什麼收到錯誤「A字段初始不能引用非靜態字段,方法或屬性「在粗體標記行?

+1

重複的http://stackoverflow.com/questions/7400677/a-field-initializer-can-reference-the-non-static-field-method-or-property – zebrabox

回答

1

嘗試使現場static這是給這個問題

//INITIALLY this field was non-static 
//public string ConnectionString = "Data Source=ServerName;Initial Catalog=DBname;User Id=user_id;Password=password"; 

//Make this field static 
public static string ConnectionString = "Data Source=ServerName;Initial Catalog=DBname;User Id=user_id;Password=password"; 
static SqlConnection sqlConnection = new SqlConnection(ConnectionString); 

希望這有助於...

+0

爲什麼連接字符串需要是靜態的? –

+0

@umeshsohaliya這是一個相當古老的答案,可能我可能在我們的一個項目中做了一些命中和試用。 – xameeramir

7

字段的初始值需要使用常量,靜態字段/方法/屬性或新實例。相反,在構造函數設置:

class Data 
{ 
    ApiData g; 
    string vode; 

    public Data() 
    { 
     g = new ApiData(); 
     vode = g.code(); 
    } 
} 
+0

「字段的初始值需要使用常量」 - 它不像限制那樣;他們也可以引用靜態字段,方法或屬性。但解決方案是正確的,+1。 – Joe

+0

謝謝,我之前嘗試過,但忘記了「字符串vcode;」線。我在c#上做了太久沒有任何東西#^^ –

+0

這是正確的@Joe,我更新了包含這些的答案。 –

相關問題