2016-08-08 8 views
0

Итак, у меня есть форма входа в систему, в которой пользователю необходимо войти в основную форму. У меня есть база данных с таблицей, созданной для хранения имен пользователей и паролей, для входа в приложение.C# - Несколько пользователей из базы данных SQL для формы входа

Если пользователь вводит правильное имя пользователя и пароль и заходит на логин, он должен взять его/ее в основную форму. Это я знаю, как это сделать, но как я могу получить имена пользователей и пароли из базы данных SQL и проверить, существуют ли они, и если они существуют, правильно ли это имя пользователя для правильного пароля или наоборот?

Как я уже сказал, я создал базу данных SQL для хранения имен пользователей и паролей. Затем я сохранил пользователя с именем пользователя и паролем как «admin», только для целей тестирования.

Я пробовал этот следующий код, но он не позволяет мне войти в систему, даже если я набрал правильное имя пользователя и пароль.

string username; 
string password; 

private void btnLogin_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     SqlCeConnection con = new SqlCeConnection(@"connectionString"); 
     SqlCeCommand com = new SqlCeCommand("SELECT username, password FROM UsersPass WHERE username = '" + txtUsername.Text + "' AND password = '" + txtPassword.Text + "'", con); 
     con.Open(); 

    if (con.State == ConnectionState.Open) 
    { 
     SqlCeDataReader dtr = com.ExecuteReader(); 

     while (dtr.Read()) 
     { 
      username = dtr["username"].ToString(); 
      password = dtr["password"].ToString(); 
      if (username == txtUsername.Text && password == txtPassword.Text) 
      { 
       Mainform frm = new Mainform(); 
       frm.Show(); 
       this.Hide();  
      } 
      else 
      { 
       MessageBox.Show("Invalid credentials!\nPlease enter a valid username and password to continue.", "Login Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
     } 
    } 
    } 
    catch (Exception) 
    { 
     MessageBox.Show("Erorr", "Error"); 
    } 
} 

Простите меня, если мне не хватает чего-то совершенно очевидного, я довольно новичок в C#. Спасибо заранее.

+0

Используйте SQL-параметры, а не конкатенацию строки для SQL. И никогда, никогда не храните пароли как открытый текст. И если есть исключение, поделитесь полным сообщением об ошибке. – Plutonix

+0

Во-первых, ознакомьтесь с Sql Injection. Во-вторых, прочтите шифрование. В-третьих, прочитайте ключевое слово 'using' C#. – mxmissile

+0

Вам не нужно 'if (con.State == ConnectionState.Open)' Если соединение не открыто, будет выбрано исключение. –

ответ

1

Вы говорите, что вы получаете сообщение об ошибке. Начните с предоставления дополнительной информации об этом. Либо поставить точку останова в

catch (Exception) 
{ 
    MessageBox.Show("Erorr", "Error"); 
} 

так что вы можете увидеть некоторые детали, за исключением или изменить его на

catch (Exception ex) 
{ 
    MessageBox.Show("Erorr", ex.Message + Environment.NewLine + ex.StackTrace); 
} 

Это даст вам информацию о точно, почему приложение не удается и установить вас на пути чтобы заставить все работать так, как вы хотите.

Я подозреваю, что у вас плохая строка подключения.

Редактировать: Эта особая проблема была вызвана заменой компактных версий sql-сервера вместо стандартных ссылок на издание. См. Комментарии.

+0

Итак, код, который я сейчас использую, верен? Тот, который я упомянул в своем посте изначально. Я думал, что мой код был совершенно неправильным. Теперь я переконфигурирую строку подключения. Спасибо, что нашли время ответить. –

+0

Способ узнать, является ли ваш код «правильным» или нет, чтобы увидеть, какую ошибку вы действительно получаете в этом исключении. Я предполагаю, что это связано со строкой подключения, но я могу быть полностью вне базы. Строка подключения может выглядеть корректно, но для вашей библиотеки подключений должна быть неправильная форма. Просто посмотрите, что говорит об исключении. –

+0

[Это] (http://i.imgur.com/zuWm9PE.png) является исключением, которое я получаю. Я использую следующую строку подключения. '" Источник данных = DELL \ SQLEXPRESS; Начальный каталог = Пользователи; Integrated Security = True "' –

0

Просто еще один способ, что:

  private void btnLogin_Click(object sender, EventArgs e) 
        { 
         string currentUserID=string.Empty; 
         SqlConnection connection= new SqlConnection(connectionString); 
         connection.Open(); 
         SqlCommand command = new SqlCommand(); 
         command.CommandText = "SELECT UserID From UserPass WHERE username [email protected] AND password [email protected]"; 
         command.Parameters.AddWithValue("@username", txtUsername.Text); 
         command.Parameters.AddWithValue("@password", txtPassword.Text); 
         command.Connection = connection; 
         object obj=command.ExecuteScalar(); 
         if (obj!=null) 
         { 
          currentUserID= obj.ToString(); 
          connection.Close(); 
          Mainform frm = new Mainform(); 
          frm.Show(); 
          this.Hide();   
         } 
         else 
         { 
         connection.Close(); 
         MessageBox.Show("Invalid credentials!\nPlease enter a valid username and password to continue.", "Login Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
         } 

        } 
+0

Он все еще не позволяет мне войти в систему, даже если я набрал правильное имя пользователя и пароль. –

+0

Я пробовал этот код. Работает. Пожалуйста, проверьте название своей колонки. @ Akeel.F – daylight