1

我构建了一个控制台应用程序,并尝试测试我的应用程序是否按预期工作。
我创建了一个 API 类的实例,如下面的代码所示,但我收到一个错误:
An object reference is required for the non-static field.我已经检查过类似的问题,它似乎有所不同。我究竟做错了什么?

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

5 回答 5

5

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

改变:

Test_api.getQualWeight(ConStr, bin_Num, lblResults);

到:

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

因为ConStr,bin_NumlblResults实例变量,所以它们必须是类实例的引用——在这种情况下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;
于 2012-07-25T13:15:32.657 回答
2

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

要么也声明它们static,要么使用Test_API.ConStr例如作为方法的参数。

于 2012-07-25T13:15:35.030 回答
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;
于 2012-07-25T13:19:43.370 回答
-1

更改您的方法签名如下

public static Dictionary<String, String> getQualWeight(String sqlConStr, String inBin, Label lblResults)
于 2012-07-25T13:14:08.133 回答
-1
 public static Dictionary<String, String> getQualWeight

将 static 关键字放在方法的声明中。

于 2012-07-25T13:15:00.503 回答