2013-12-18 4 views
0

Я создал проверку входа в систему для подключения к приложению, но теперь у меня проблема, что во время подключения к приложению скажут мне, что ошибки с отключенными подключениями.Подтверждение входа для подключения к приложению C#

Мой сценарий для проверки:

SQL:

CREATE TABLE [Login] 
(
    username varchar(30) CHECK (username is not null AND username <> ''), 
    email varchar(30), 
    [password] varchar(50), 
    UNIQUE (username) 
) 

INSERT INTO dbo.Login values('admin', '[email protected]', HASHBYTES('md5',convert(varchar(50),'root'))) 

C#:

class LoginValidation : Login 
{ 
    public string connection = "Data Source=RADEK-PC\\SQLEXPRESS;Initial Catalog=Evidence;Integrated Security=True;"; 
    public string loginVal, passwordVal; 

    public LoginValidation(string login, string password) 
    { 
     try 
     { 
      using (SqlConnection sql = new SqlConnection(connection)) 
      { 
       sql.Open(); 


       using (SqlCommand selectLogin = new SqlCommand("SELECT * FROM dbo.Login WHERE username = @login", sql)) 
       { 
        selectLogin.Parameters.Clear(); 
        SqlParameter subjektParam = new SqlParameter("@login", SqlDbType.VarChar, 30); 
        subjektParam.Value = login; 
        selectLogin.Parameters.Add(subjektParam); 
        selectLogin.Prepare(); 

        using (SqlDataReader readerLogin = selectLogin.ExecuteReader()) 
        { 
         while (readerLogin.Read()) 
         { 
          if (readerLogin.IsDBNull(0) || readerLogin.IsDBNull(2)) 
           continue; 


          loginVal = readerLogin.GetString(0); 
          passwordVal = readerLogin.GetString(2); 
         } 
        } 
        sql.Close(); 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      MessageBox.Show("Chyba: " + e); 
     } 

     if (login == loginVal && password == passwordVal) 
     { 
      Main main = new Main(); 
      main.Show(); 
     } 
     else 
      MessageBox.Show("Přihlašovací jméno nebo heslo neni správné"); 
    } 
} 

ошибки Выход:

e {"A fatal internal error connection."} System.Exception {System.InvalidOperationException} 

Входные данные:

login - > admin 
password - > root 

Пожалуйста, помогите мне с этой проблемой?

ответ

1

Задача 1: Вы вызываете ExecuteNonQuery(), который не требуется при вызове команды select.

Удалить это:

selectLogin.ExecuteNonQuery(); 

Задача 2: использование || для логической OR операции.

Попробуйте:

if (readerLogin.IsDBNull(0) || readerLogin.IsDBNull(2)) 
continue; 

Решение 2:Hashbytes не может быть decrypted как они в одном направлении. Единственный способ разрешить проблему - хэш значение user password и сравнить его с существующим password value в базе данных.

+0

корректная Теперь СРЮ, теперь у меня есть хэш пароля в БД. Как я могу разобрать этот пароль для подтверждения для входа в приложение. Потому что теперь login == loginVal правильный, но пароль == passwordVal неверен, потому что passwordVal возвращает мне хеш-пароль. –

+0

@RadekTarant: извините, я действительно не знаю, как шифровать и расшифровывать, это зависит от того, какой механизм вы использовали для шифрования. –

+0

Я использую только это: HASHBYTES ('md5', convert (varchar (50), 'root' –

0

изменить ваши заявления блока попробовать с этим

try 
    { 
     using (SqlConnection sql = new SqlConnection(connection)) 
     { 
      sql.Open(); 
      string query = "SELECT * FROM dbo.Login WHERE username = @login"; 
      SqlCommand selectLogin = new SqlCommand(query , sql); 
      selectLogin.Parameters.Add(new SqlParameter("@login",login)); 
      SqlDataReader readerLogin = selectLogin.ExecuteReader())      
      while (readerLogin.Read()) 
      { 
       if (readerLogin.IsDBNull(0) || readerLogin.IsDBNull(2)) 
        continue; 
       loginVal = readerLogin.GetString(0); 
       passwordVal = readerLogin.GetString(2); 
      } 
     } 
    } 
+0

Действительно thx для справки, но моя проблема была исправлена, я использовал help от @Sudhakar. Но теперь мне нужна помощь с unhash password. Формат для хэш-пароля - HASHBYTES ('md5', convert (varchar (50), 'корень'. –

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