2016-09-29 4 views
0

Итак, я делаю небольшое приложение для своей компании, позволяя пользователям входить в систему и получать доступ к определенным данным, однако на стороне сервера, которая запрашивает базу данных, MySqlDataReader не читает, как я указал в следующий код:MySqlDataReader не читает

public string HandleLogin(string uname, string pwd) 
    { 
     MySqlDataReader READER; 
     int count = 0; 
     int clearance = 0; 
     if (uname == "" || pwd == "") 
      return ""; 
     CONN = new MySqlConnection(); 
     CONN.ConnectionString = Config.CONNSTRING; 
     string query = "select * from members where username='" + uname + "' and password='" + pwd + "'"; 
     try 
     { 
      CONN.Open(); 
      COMMAND = new MySqlCommand(query, CONN); 
      READER = COMMAND.ExecuteReader(); 
      while(READER.Read()) 
      { 
       count = count + 1; //<-- this should happen, but it doesnt 
       if (count == 1) 
        clearance = READER.GetInt32("clearance"); 
       else 
        return ""; 
      } 
      if (count == 1) 
       return Convert.ToString(clearance); 
      else 
       return ""; 
     } 
     catch(Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
      return ""; 
     } 
     finally 
     { 
      CONN.Dispose(); 
     } 
    } 

Я уверен, что он должен прочитать 1 строку, задавая количество строк он нашел, сказал он 0, но я втройне проверил все значения и они совпадают со значениями базы данных точно, но он читает НЕТ строки для запроса. Это может быть очень глупая ошибка, но я не могу найти проблему.

+0

Распечатайте и подтвердите правильность текста в sql. Найдите любые пробелы внутри переменных uname/pwd. – RajN

+0

Вы проверили, открыто ли соединение? – Clock

+0

@RajNagalingam Это правильно, @ devlincarnate Есть, но пароль хеширован в базе данных и до того, как сервер получит его, и @ SomeUser hmmm спасибо, я обязательно посмотрю на него –

ответ

0

Итак, я снова поставил точку останова и перепроверил переменные, переменные хороши с Console.WriteLine, но, в запросе он выглядит следующим образом:

"select * from members where username='matthias' and password='M20UjefsltnFCTDsCL1temvFOtBcnN8gNtGbQevVTkkG8jCXZlbxQ3ykOTx0fV4Ls2VnAzOzx2F5CTY+jEDSzg==\0\0\0\0'" 

Но это должно быть: "select * from members where username='matthias' and password='M20UjefsltnFCTDsCL1temvFOtBcnN8gNtGbQevVTkkG8jCXZlbxQ3ykOTx0fV4Ls2VnAzOzx2F5CTY+jEDSzg=='"

Из-за шифрования данных между клиентом и сервером и дополнением он добавляет \ 0 \ 0 \ 0 \ 0 до конца, я должен был это увидеть раньше, спасибо тем, кто хотел мне помочь, я решил это добавив эту функцию перед запросом:

pwd = pwd.Replace("\0", ""); 
Смежные вопросы