2015-04-01 8 views
0

Мне нужно сделать простой логин, который не будет сбой при вставке в браузер a ("), поэтому мне нужно было параметризовать строку запроса, но по какой-то причине im gettin ошибка, говорящая :Должен объявить скалярную переменную «@UserName»

Необходимо объявить скалярную переменную "@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

Проверьте орфографию очень внимательно - вы сделали опечатку. –

+1

В частности, обратите внимание на случай каждого символа. – Servy

+0

'' @ Имя пользователя'' не равно '' @ UserName'' –

ответ

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 не учитывает регистр.

Некоторые другие предложения, не связанные с вашей проблемой:

  • команды Wrap и соединение в using заявления
  • запроса имени пользователя и пароля в одном запросе (WHERE UserName = @UserName AND Password = @Password). Хакеры сначала будут искать действительные имена пользователей, а затем попытаются взломать пароль, используя атаки на словах. Попытка найти подходящую комбинацию - much сложнее.
  • Не храните свои пароли в текстовом формате - используйте salted hash
  • Или просто используйте встроенные службы безопасности, а не сворачивайте свои собственные.
+0

ладно, спасибо, я получил его сейчас. Я сделаю эти изменения благодарю вас за советы и помощь. – user2740978

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