2012-06-15 39 views
0

當我運行程序.exception通過。即使我使用斷點「必須聲明scalare變量@ password12」
檢查此參數variable.it的價值爲
correct.but我不知道問題出在哪裏?如何處理必須聲明scalare變量例外

code: 
     public DataSet showoption1(seter set) 
      { 


       string sql = "SELECT menue.menuename,roleid, [right].rightname, 
     role.rolename, employee.employeename, employee.password FROM [right] INNER JOIN 
     permission ON [right].rightid = permission.rightid INNER JOIN role ON  
    permission.roleid = role.roleid INNER JOIN emp_men INNER JOIN employee ON 

    emp_men.employeeid = employee.employeeid ON role.roleid = employee.roleid INNER JOIN 
    menue ON emp_men.menueid = menue.menueid where [email protected] AND  
    [email protected] "; 


       SqlCommand cmd = new SqlCommand(sql, con); 
       cmd.Parameters.AddWithValue("@username",set.Username); 
       cmd.Parameters.AddWithValue("@pasword12",set.Password); 
       SqlDataAdapter adptr = new SqlDataAdapter(cmd); 

       DataSet ds = new DataSet(); 
       adptr.Fill(ds); 
       int id= Convert.ToInt32(ds.Tables[2].Rows[0]["rooleid"]); 

      st.Username= Convert.ToString(ds.Tables[2].Rows[id]["roolename"]); 

       adptr.Dispose(); 

       return ds; 

      } 

回答

3

錯字:

cmd.Parameters.AddWithValue("@pasword12",set.Password); 

應該

cmd.Parameters.AddWithValue("@password12",set.Password); 

下一個工作:去替換哈希密碼,按帳戶鹹。不完全是。存儲實際的密碼是一個非常糟糕的主意。

+0

對不起,Iam不能確定你的觀點,應該更換哪個密碼? – user1405508

+0

@ user1405508如果你的意思是第一位:添加一個「s」,你只是拼錯了。如果你的意思是第二位,那麼:存儲密碼就是*做錯了*。很少有真正的需要存儲實際的密碼。您應該*做的是存儲密碼的醃製密碼散列,並對用戶提供的值執行相同的散列操作。它仍然是一個簡單的平等測試,但它意味着不可能獲得所有密碼的列表。 「醃製」是爲了阻止彩虹表成爲可行的哈希密碼策略。 –