2017-02-04 6 views
0

私はプロジェクトのログイン機能に新しく、私のグループのログインをしようとしています.3人のユーザ、つまりナース、患者、薬剤師から構成されています。私はローンプロセスを完了しようとしていると思いますが、私のメソッドであるLoginDAO.csのgetPosition()に問題があります。今のところ、私はグループメイトの作業が必要なので、患者さんと薬剤師のログインコードは一切行っていませんが、以下に私が行ったことがあります。どうにかして、login(string nric、string pw)は動作しますが、getPosition(string 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

私はうーん...ちょうどその方法を試してみました –

答えて

0

あなたのエラーはここにある:あなたが二回cmdをインスタンス化している

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); 

注意。このコードは、最初のSqlCommandインスタンスにパラメータを追加しますが、2番目のインスタンスを実行します。

あなたが呼び出すあなたが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

、視覚スタジオ2013年@a_horse_with_no_nameが提供するSQL Serverデータベースを使用していますエラーログに「例外:無効な列名 'S123455A'」と表示されました。ここでS123455Aは入力した文字列です –

関連する問題