我正在尝试向查询添加一个参数,这样做会给我上面的错误。我有变量public我声明在外面或我的方法。我尝试将其设置为静态,因为我已阅读其他帖子但它然后它给了我其他所引用的错误。方法我在公共静态列表方法中工作。
采取的步骤: 尝试在我的方法中声明一个变量t将变量传递给。 在线研究 经过测试的在线研究。
这是我声明的变量:
public int CarrierID { get; set; }
这是我尝试添加参数的方法,以及它在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);
}
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;
}
}
答案 0 :(得分:7)
您的方法是static
..您的变量不是。
您需要将变量标记为static
,以便在static
方法中使用它:
public static int CarrierID { get; set; }
// ^^^^^^ this
您拥有的另一个选项是从此代码所在的方法中删除static
修饰符,并在使用它之前实例化它所在的类。
编辑:
编辑后..我认为你应该改变你的方法:
public static List<EmpData> GetData(int carrierId) {
// code here..
cmd.Parameters.AddWithValue("CarrierID", carrierId);
// code here..
}
然后,每当你打电话时......传递你需要的CarrierID
:
EmpData.GetData(5);
我假设您已经拥有所需的CarrierID
并且在调用此方法之前设置..(因此您可以将其传入)。我还大写了该方法的第一个字符..因为这更符合C#风格。
答案 1 :(得分:1)
阿。谢谢你加入全班。您尝试将CarrierID用于两个目的 - 一次为查询设定种子,一次为EmpData实例存储CarrierID。它不可能两者兼而有之。我认为你想要做的事情最好用一个参数完成:
public static List<EmpData> getData(int carrierID)
^^^^^^^^^^^^^
{
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);
^^^^^^^^^
答案 2 :(得分:0)
问题是它是一个实例变量,你就像静态变量一样使用它。所以有三个选项,第一个是使它成为一个静态变量(请记住,如果是这种情况,所有实例都具有相同的值)。选项选项是从一个实例访问它,所以说它属于一个名为Carrier
的类,那么你需要类似的东西;
Carrier c = new Carrier();
// anywhere within the same scope as the line above
cmd.Parameters.AddWithValue("CarrierID", c.CarrierID);
最后,您可以这样做,因此该方法是一个实例方法,在这种情况下,访问实例变量时不会出现此错误。
答案 3 :(得分:-5)
参数应以@符号开头。
试 cmd.Parameters.AddWithValue(“@ CarrierID”,CarrierID);