2017-02-04 83 views
0

我對項目的登錄功能很陌生,並且正在嘗試爲我的小組執行登錄,該小組由3名用戶組成,即Nurse,Patient和Pharmacist。我想我即將完成腰部過程,但是我的一個方法getPosition()在我的LoginDAO.cs中存在問題。到目前爲止,我還沒有爲病人和藥劑師做過任何登錄代碼,因爲我需要我的團隊夥伴的部件才能工作,但下面顯示的是我所做的。不知何故,登錄(字符串nric,字符串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 Server數據庫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( 「裏身份證= @paraNRIC」);

爲了此

sqlStr.AppendLine( 「其中NRIC = '」 + NRIC + 「'」);

並完全避免參數。

+0

嗯......只是去嘗試的方法,但錯誤日誌顯示「異常:無效的列名稱'S123455A'。其中S123455A是我輸入的nric –

相關問題