2012-07-25 29 views
1

我构建了一个控制台应用程序,并试图测试我的应用程序是否按预期工作。
我创建了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(); 
      } 
     } 
    } 
} 

回答

4

如果你想使用Object而不是所有的成员都是静态的,你需要使用类的实例引用非静态成员变量。

变化:

Test_api.getQualWeight(ConStr, bin_Num, lblResults); 

要:

Test_api.getQualWeight(Test_api.ConStr, Test_api.bin_Num, Test_api.lblResults); 

因为ConStrbin_Num,并且lblResults实例变量,他们必须与类的实例的引用 - 在这种情况下Test_api

String ConStr = "SERVER=myservername; Database=mydb; UID=mylogin; PWD=mypassword;encrypt=no;enlist=false"; 
String bin_Num = "201284-11-000"; 
Label 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; 
+0

谢谢@Matt Razza – kombo 2012-07-25 13:43:04

+0

您的解决方案是正确的 – kombo 2012-07-25 13:45:46

-1

改变你的方法签名如下

public static Dictionary<String, String> getQualWeight(String sqlConStr, String inBin, Label lblResults) 
-1
public static Dictionary<String, String> getQualWeight 

把static关键字在方法的声明。

2

你声明的成员你传递以函数调用作为实例变量,但您试图从静态方法的范围访问它们。这是不可能的,因为静态Main方法不能访问成员变量。

也可以声明它们为static,或者使用Test_API.ConStr作为该方法的参数。

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; 
+0

谢谢。但现在我怎样才能打印getQualWeight中的值? – kombo 2012-07-25 13:33:24

相关问题