我构建了一个控制台应用程序,我正在尝试测试我的应用程序是否按预期工作
我创建了一个API类的实例,如下面的代码所示,但是我收到一个错误:
An object reference is required for the non-static field.
我已经检查了this one之类的类似问题,但似乎有所不同。我究竟做错了什么?
namespace ConsoleApplication1
{
class Api
{
String ConStr = "SERVER=myservername; Database=mydb; UID=mylogin; PWD=mypassword;encrypt=no;enlist=false";
String bin_Num = "201284-11-000";
Label lblResults;
static void Main(string[] args)
{
Api Test_api = new Api();
Test_api.getQualWeight(ConStr, bin_Num, lblResults);
}
public Dictionary<String, String> getQualWeight(String sqlConStr, String inBin, Label lblResults)
{
Dictionary<String, String> qualList = new Dictionary<string, string>();
string selectSQL = "select Name,qual_weight from Qualification_type "
+ "where ID in (select Qualification_ID from Qualifications where BIN = @inBin)";
con = getConn(sqlConStr);
SqlCommand cmd = new SqlCommand(selectSQL, con);
cmd.Parameters.AddWithValue("@inBin", inBin);
SqlDataReader reader;
try
{
con.Open();
reader = cmd.ExecuteReader();
while (reader.Read())
{
qualList.Add(reader[0].ToString(), reader[1].ToString());
}
reader.Close();
return qualList;
}
catch (Exception err)
{
lblResults.Text = "error fetching qualification weight " + err.Message;
return null;
}
finally
{
con.Close();
}
}
}
}
答案 0 :(得分:4)
如果你想使用Object
而不是所有成员都是静态的,你需要使用类的实例来引用非静态成员变量。
变化:
Test_api.getQualWeight(ConStr, bin_Num, lblResults);
要:
Test_api.getQualWeight(Test_api.ConStr, Test_api.bin_Num, Test_api.lblResults);
由于ConStr
,bin_Num
和lblResults
是实例变量,因此必须使用该类的实例进行引用 - 在本例中为{{1} }。
或者,您可以通过更改其声明来将这些值移动到全局静态范围中:
Test_api
对此:
String ConStr = "SERVER=myservername; Database=mydb; UID=mylogin; PWD=mypassword;encrypt=no;enlist=false";
String bin_Num = "201284-11-000";
Label lblResults;
答案 1 :(得分:2)
您已将要传递给函数调用的成员声明为实例变量,但您尝试从静态Main
方法的范围访问它们。这是不可能的,因为静态Main
方法无法访问成员变量。
也可以将它们声明为static
,或者使用Test_API.ConStr
作为方法的参数。
答案 2 :(得分:1)
您必须将ConStr,bin_Num和lblResults标记为静态。
static String ConStr = "SERVER=myservername; Database=mydb; UID=mylogin; PWD=mypassword;encrypt=no;enlist=false";
static String bin_Num = "201284-11-000";
static Label lblResults;
答案 3 :(得分:-1)
更改您的方法签名,如下所示
public static Dictionary<String, String> getQualWeight(String sqlConStr, String inBin, Label lblResults)
答案 4 :(得分:-1)
public static Dictionary<String, String> getQualWeight
将static关键字放在方法的声明中。