2012-06-13 46 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,我更新了包含这些的答案。 –

相关问题