2017-02-04 4 views
0

Я как бы новичок для входа в систему для проектов и пытаюсь сделать логины для своей группы, которая состоит из 3 пользователей, а именно: медсестра, пациент и фармацевт. Я думаю, что я собираюсь завершить loin-процесс, но у меня проблема с одним из моих методов getPosition() в моем LoginDAO.cs. До сих пор я не делал никаких кодов регистрации для пациента и фармацевта, так как мне понадобятся части моих товарищей по группе, чтобы они работали, но ниже показано, что я сделал. Так или иначе, login (string nric, string pw) работает, но не getPosition (строка nric). Это ошибка, которую я получаю из своего журнала ошибок: Исключение: должно объявить скалярную переменную «@paraNRIC». Источник: LoginDAO.getPosition Заранее спасибо: DВойти для пользователей разных должностей

protected void btnLogin_Click(object sender, EventArgs e) 
{ 
    login login = new login(); 
    login.nric = tbLoginID.Text; 
    login.pw = tbPassword.Text; 
    if (login.userLogin(login.nric, login.pw)) 
    { 
     if (login.getPosition(login.nric) == "Nurse") 
     { 
      Response.Redirect("Nurse.aspx"); 
     } 
     else if (login.getPosition(login.nric) == "Patient") 
     { 
      Response.Redirect("Patient.aspx"); 
     } 
     else if (login.getPosition(login.nric) == "Pharmacist") 
     { 
      Response.Redirect("PharmacistDisplay.aspx"); 
     } 
    } 
    else 
    { 
     lblErr.Text = "Invalid account."; 
    } 
} 

public bool login(string nric, string pw) 
{ 
    bool flag = false; 
    SqlCommand cmd = new SqlCommand(); 
    StringBuilder sqlStr = new StringBuilder(); 

    sqlStr.AppendLine("SELECT Password from Position"); 
    sqlStr.AppendLine("Where NRIC = @paraNRIC"); 
    try 
    { 
     SqlConnection myconn = new SqlConnection(DBConnect); 
     cmd = new SqlCommand(sqlStr.ToString(), myconn); 

     cmd.Parameters.AddWithValue("@paraNRIC", nric); 

     DataTable dt = new DataTable(); 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     da.Fill(dt); 
     if (dt == null) 
     { 
      flag = false; 
     } 
     else 
     { 
      string dbhashedpw = dt.Rows[0]["Password"].ToString(); 
      flag = Helper.VerifyHash(pw, "SHA512", dbhashedpw); 
     } 
    } 
    catch (Exception exc) 
    { 
     logManager log = new logManager(); 
     log.addLog("NurseDAO.login", sqlStr.ToString(), exc); 
    } 


    return flag; 
} 

public string getPosition(string nric) 
{ 
    string dbPosition = ""; 
    int result = 0; 
    SqlCommand cmd = new SqlCommand(); 

    StringBuilder sqlStr = new StringBuilder(); 
    sqlStr.AppendLine("SELECT Position from Position "); 
    sqlStr.AppendLine("where NRIC = @paraNRIC"); 

    cmd.Parameters.AddWithValue("@paraNRIC", nric); 
    try 
    { 
     SqlConnection myconn = new SqlConnection(DBConnect); 
     cmd = new SqlCommand(sqlStr.ToString(), myconn); 
     DataTable dt = new DataTable(); 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     da.Fill(dt); 

     myconn.Open(); 
     result = cmd.ExecuteNonQuery(); 
     dbPosition = dt.Rows[0]["Position"].ToString(); 
     myconn.Close(); 
    } 
    catch (Exception exc) 
    { 
     logManager log = new logManager(); 
     log.addLog("LoginDAO.getPosition", sqlStr.ToString(), exc); 
    } 


    return dbPosition; 
`} 
+0

Я использую базу данных SQL сервера, предоставленный визуальными студии 2013. @a_horse_with_no_name –

ответ

0

Ваша ошибка здесь:

SqlCommand cmd = new SqlCommand(); 
// lines omitted 
cmd.Parameters.AddWithValue("@paraNRIC", nric); 
try 
{ 
    SqlConnection myconn = new SqlConnection(DBConnect); 
    cmd = new SqlCommand(sqlStr.ToString(), myconn); 
    DataTable dt = new DataTable(); 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    da.Fill(dt); 

Обратите внимание, что вы инстанцировании cmd дважды. Код добавляет параметры к первому экземпляру SqlCommand, но выполняет второй экземпляр.

Чтобы решить, убедитесь, что вы объявить параметры на экземпляре SqlCommand вызове:

public string getPosition(string nric) 
{ 
    string dbPosition = ""; 
    int result = 0; 
    // remove this line: SqlCommand cmd = new SqlCommand(); 

    StringBuilder sqlStr = new StringBuilder(); 
    sqlStr.AppendLine("SELECT Position from Position "); 
    sqlStr.AppendLine("where NRIC = @paraNRIC"); 
    // move parameter declaration until after you declare cmd 
    try 
    { 
     SqlConnection myconn = new SqlConnection(DBConnect); 
     SqlCommand cmd = new SqlCommand(sqlStr.ToString(), myconn); 
     // add the parameters here: 
     cmd.Parameters.AddWithValue("@paraNRIC", nric); 
     // code continues 
+0

. О, хорошо, я вижу, спасибо за помощь, это сработало –

0

Вы можете изменить эту линию

sqlStr.AppendLine ("где NRIC = @paraNRIC");

на это

sqlStr.AppendLine ("где NRIC = '" + NRIC +' ");

и вообще избегать параметров.

+0

Хм ... просто попытался этот метод , но появился журнал ошибок, в котором говорилось: «Исключение: неверное имя столбца« S123455A ». где S123455A - это nric, который я ввел –

 Смежные вопросы

  • Нет связанных вопросов^_^