非静态字段,方法或属性(变量声明)需要对象引用

Kpt*_*aos 0 c# variables sqlconnection

我试图在我的查询中添加一个参数,并在这样做时它给了我上面的错误.我有变量public我声明在外面或我的方法.我尝试将其设置为静态,因为我已阅读其他帖子但它然后它给了我其他所引用的错误.方法我在公共静态列表方法中工作.

采取的步骤:尝试在我的方法中声明变量t将变量传递给.在线研究测试在线研究.

这是我声明的变量:

public int CarrierID { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是我的方法,我试图添加参数,它在CarrierID cmd.Parameters.AddWithValue("CarrierID",CarrierID)给我错误的位置; :

SqlConnection dbConn = new 
   SqlConnection(ConfigurationManager.ConnectionStrings
   ["Connection"].ConnectionString);

   SqlCommand cmd = new SqlCommand();
   cmd.CommandText = sqlString.ToString();
   cmd.Parameters.AddWithValue("CarrierID", CarrierID);

   SqlDataReader reader = null;

   try
   {
      reader = DBHelper.executeQuery(dbConn, sqlString.ToString(), null);
      if (reader != null)
      {
          while (reader.Read())
          {
              EmpData ed = new EmpData();
              ed.CarrierID = (int)reader["CarrierID"];
              list.Add(ed);
           }
Run Code Online (Sandbox Code Playgroud)

empData类:

class EmpData
{
    public int EmployeeID { get; set; }
    public string FName { get; set; }
    public string LName { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public string Email { get; set; }
    public static int CarrierID { get; set; }
    public string CellNumber { get; set; }
    public bool IsActive { get; set; }
    public string CarrierName { get; set; }


    public static List<EmpData> getData()
    {

        List<EmpData> list = new List<EmpData>();

        StringBuilder sqlString = new StringBuilder();
        sqlString.Append("SELECT e.*, c.Carrier ");
        sqlString.Append("FROM Employee e, CellCarrier c ");
        sqlString.Append(" WHERE e.CarrierID = @CarrierID ");
        sqlString.Append("  AND e.CarrierID = c.CarrierID");

        SqlConnection dbConn = new SqlConnection(ConfigurationManager.ConnectionStrings["Connection"].ConnectionString);

        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = sqlString.ToString();
        cmd.Parameters.AddWithValue("CarrierID", CarrierID);

        SqlDataReader reader = null;

        try
        {
            reader = DBHelper.executeQuery(dbConn, sqlString.ToString(), null);
            if (reader != null)
            {
                while (reader.Read())
                {
                    EmpData ed = new EmpData();
                    ed.EmployeeID = (int)reader["EmployeeID"];
                    ed.FName = reader["FirstName"].ToString();
                    ed.LName = reader["LastName"].ToString();
                    ed.UserName = reader["UserName"].ToString();
                    ed.Password = reader["Password"].ToString();
                    ed.Email = reader["Email"].ToString();
                    ed.CarrierID = (int)reader["CarrierID"];
                    ed.CellNumber = reader["CellNumber"].ToString();
                    ed.IsActive = (bool)reader["IsActive"];
                    ed.CarrierName = reader["Carrier"].ToString();
                    list.Add(ed);
                }
                reader.Close();
                reader.Dispose();
                dbConn.Close();
                dbConn.Dispose();
            }
            else
                throw new Exception("No records returned");
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (dbConn != null)
            {
                try { dbConn.Close(); dbConn.Dispose(); }
                catch { }
            }
            if (reader != null)
            {
                try { reader.Close(); reader.Dispose(); }
                catch { }
            }
        }
        return list;
    }
}
Run Code Online (Sandbox Code Playgroud)

Sim*_*ead 7

你的方法是static..你的变量不是.

您需要将变量标记static为在static方法中使用它:

public static int CarrierID { get; set; }
//     ^^^^^^ this
Run Code Online (Sandbox Code Playgroud)

另一个选项是static从此代码所在的方法中删除修饰符,并在使用它之前实例化它所在的类.

编辑:

编辑后..我认为你应该改变你的方法:

public static List<EmpData> GetData(int carrierId) {
    // code here..

    cmd.Parameters.AddWithValue("CarrierID", carrierId);

    // code here..
}
Run Code Online (Sandbox Code Playgroud)

然后,无论何时你打电话..传递CarrierID你需要的:

EmpData.GetData(5);
Run Code Online (Sandbox Code Playgroud)

我假设您已经拥有所需的CarrierID可用设置..在调用此方法之前(因此您可以将其传入).我也大写了该方法的第一个字符..因为这更符合C#风格.