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_NumlblResultsTest_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 に答える