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)
你的方法是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#风格.