2015-04-01 31 views
0

我必須做一個簡單的登錄,當您插入瀏覽器時不會崩潰a(「),所以我需要參數化查詢字符串,但由於某種原因,我得到一個錯誤說:必須聲明標量變量「@ UserName」

必須聲明標量變量 「@用戶」

這裏是代碼

private void DoSqlQuery() 
{ 
    try 
    { 
     SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RolaConnectionString"].ConnectionString); 
     conn.Open(); 
     string checkUser = "select * from UserData where UserName = @UserName"; 
     SqlCommand com = new SqlCommand(checkUser, conn); 
     com.Parameters.AddWithValue("@Username", txtUserName.Text.Trim()); 

     int temp = Convert.ToInt32(com.ExecuteScalar().ToString()); 
     conn.Close(); 
     if (temp == 1) 
     { 
      conn.Open(); 
      string checkPassword = "select Password from UserData where UserName = @UserName"; 
      SqlCommand passConn = new SqlCommand(checkPassword, conn); 
      com.Parameters.AddWithValue("@Username", txtUserName.Text.Trim()); 
      string password = passConn.ExecuteScalar().ToString(); 
      conn.Close(); 
      if (password == txtPassword.Text) 
      { 
       Session["New"] = txtUserName.Text; 
       Response.Write("Password is correct"); 
       Response.Redirect("~/LoggedIn.aspx"); 
      } 
      else 
      { 
       Response.Write("Password is not correct"); 
      } 
     } 
     else 
     { 
      Response.Write("Username is not correct"); 
     } 
    } 
    catch(Exception e) 
    { 
     Response.Write(e.ToString()); 
    } 
} 
+1

檢查拼寫非常密切 - 你犯了一個錯字。 – 2015-04-01 16:51:29

+1

具體來講,要注意每個角色的情況。 – Servy 2015-04-01 16:52:04

+0

'@ Username''不等於''UserName'' – 2015-04-01 16:52:18

回答

0

您在內引用了錯誤的命令if聲明:

string checkPassword = "select Password from UserData where UserName = @UserName"; 
SqlCommand passConn = new SqlCommand(checkPassword, conn); 
com.Parameters.AddWithValue("@Username", txtUserName.Text.Trim()); 
^^^-- should be passConn 

其結果是,你的第二個命令從來沒有得到補充,所以你得到你提到的錯誤參數。區分大小寫可能也是一個問題,但它取決於數據庫的排序規則 - 默認情況下,SQL Server不區分大小寫。

不相關的問題,其他一些建議:

  • 裹命令,並在using聲明
  • 連接查詢的一個查詢(WHERE UserName = @UserName AND Password = @Password)的用戶名和密碼。黑客將首先搜索有效的用戶名,然後嘗試使用字典攻擊破解密碼。試圖找到匹配的組合太多更難。
  • 請勿以純文本格式存儲您的密碼 - 請使用salted hash
  • 或者只是使用內置安全提供程序而不是自行滾動。
+0

好的,謝謝,我現在開始工作。我會做出這些改變,感謝您的建議和幫助。 – user2740978 2015-04-01 17:20:53