2013-08-18 3 views
1

Мне нужно открыть новую форму, если имя пользователя и пароль верны, но я не могу заставить этот код работать, если я ввожу правильное имя пользователя или пароль, он ничего не делает ,C# login с использованием базы данных SQL Server не работает

private void login_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     string connection = @"Data Source=DX-PC;Initial Catalog=login;Integrated Security=True"; 
     SqlConnection cn = new SqlConnection(connection); 

     cn.Open(); 

     string userText = user.Text; 
     string passText = pass.Text; 

     SqlCommand cmd = new SqlCommand("SELECT ISNULL(Username, '') AS Username, ISNULL(Password,'') AS Password FROM log WHERE Username = @username and Password = @password", cn); 
     cmd.Parameters.Add(new SqlParameter("username", userText)); 
     cmd.Parameters.Add(new SqlParameter("password", passText)); 

     SqlDataReader dr = cmd.ExecuteReader(); 

     try 
     { 
      dr.Read(); 
      if (dr["Username"].ToString().Trim() == userText && dr["Password"].ToString().Trim() == passText) 
      { 
       MessageBox.Show("This message won't Display"); 
      } 
     } 
     catch 
     { 
      MessageBox.Show("Invalid Username or Password"); 
     } 

     dr.Close(); 
     cn.Close(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 
+0

Вы получаете какую-либо ошибку? –

+0

Может быть дюжина причин. Вы 'Начальный каталог = login' не существует. Вы делаете опечатки. Вы добавили странные значения в свою базу данных, почему еще вы бы использовали обрезку для строки, которая поступала из базы данных? Скорее всего, использовать текст в тексте, который появился в текстовом поле. –

+1

Не присоединяйся к этому клубу: http://plaintextoffenders.com/ – Tom

ответ

1

Я считаю, что проблема заключается в:

   if (dr["Username"].ToString().Trim() == userText && dr["Password"].ToString().Trim() == passText) 
       { 

        MessageBox.Show("This message won't Display"); 



       } 

часть вашего кода. Попробуйте добавить другое:

   if (dr["Username"].ToString().Trim() == userText && dr["Password"].ToString().Trim() == passText) 
       { 

        MessageBox.Show("This message won't Display"); 



       } else { 
        MessageBox.Show(string.Format("{0}!={1}, {2}!={3}" 
         ,dr["Username"].ToString().Trim(),userText, 
         dr["Password"].ToString().Trim(),passText 
        ); 
       } 

и вы, вероятно, найдете свою проблему.

+0

спасибо! – Adax

0

попробуйте этот код

 cn.open 
     MySqlDataAdapter LoginAdapter = new MySqlDataAdapter(); 
     dynamic CommandQuerry = @"SELECT * From users WHERE Username='" + UsernameField.Text + "'AND Password='" + PasswordField.Text + "';"; 
     MySqlCommand LoginCommand = new MySqlCommand(); //The Login Command 
     MySqlDataReader LoginDataReader = default(MySqlDataReader); //Create a reader variable to check login details. 

     if (cn.State == ConnectionState.Open) 
     { 
       LoginCommand.Connection = SelectedSchoolDB; 
       LoginCommand.CommandText = CommandQuerry; 
       LoginAdapter.SelectCommand = LoginCommand; 

       LoginDataReader = LoginCommand.ExecuteReader(); 

       if (Convert.ToInt32(LoginDataReader.HasRows) == 0) 
       { 
        DialogResult a = MessageBox.Show(@"Invalid username/password, please try again", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       } 
       else 
       { 
        LoginDataReader.Close(); // Close The reader 
        This.FormName.Hide(); //Close the login form 
        Newform.ShowDialog(); //Show the new form 
       } 
cn.close() 
} 

Надежда Этот код помогает :)

+0

Если вам нужно объяснение каждого кода, дайте мне знать. –

+1

предупреждение: sql опасность для инъекций выше – spender

+0

@spender Вы можете объяснить это больше, пожалуйста? как это возможно? и как его предотвратить? плюс я думаю, что SQL-инъекции работают на веб-сайты, а не на C# -приложение –

0

Несмотря на то, что предоставленный вами код уязвим для SQL-инъекции & XSS, но для ответа на ваш вопрос строковое компиляция по критерию фильтра в SQL-запросах не зависит от регистра, где, как и в случае с кодом .NET выше, регистр будет чувствителен к регистру.