2017-01-08 3 views
0

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

Что может сделать этот нижеприведенный код, ТОЛЬКО выбрать имя пользователя.

Мне нужна помощь в изменении оператора select, чтобы выбрать имя пользователя и пароль.

public override int SelectUser(string username, ref User user) 
{ 
    int rc = 0; 

    try 
    { 
     _sqlCon = new SQLiteConnection(_conStr); 
     bool bRead = false; 
     user = new User(); 

     _sqlCon.Open(); 

// Эта строка выбора - это то место, где я борюсь.

 string selectQuery = "SELECT * FROM Users WHERE [uUsername] = ' " + username + " ' "; 

     SQLiteCommand sqlCmd = new SQLiteCommand(selectQuery, _sqlCon); 
     SQLiteDataReader dataReader = sqlCmd.ExecuteReader(); 
     bRead = dataReader.Read(); 
     if(bRead == true) 
     { 
      user.Username = Convert.ToString(dataReader["uUsername"]); 
      user.Password = Convert.ToString(dataReader["uPW"]); 
      rc = 0; 
     }// end if 
     else 
     { 
      rc = -1; 
     }// end else 
     dataReader.Close(); 
    }// end try 
    catch(Exception ex) 
    { 
     throw ex; 
    }// end catch 
    finally 
    { 
     _sqlCon.Close(); 
    }// end finally 
    return rc; 
}// end method 
+1

... И пароль = .... но весь этот подход неправильный. Не используйте конкатенации строк для создания команды sql. Использовать параметры – Steve

+0

Что еще я должен делать? Единственное, что я знаю, это конкатенация строк. –

+0

Вы читали мой ответ ниже? – Steve

ответ

2

Вы добавляете AND logical operator в первое условие, чтобы получить двойное условие. Однако весь этот подход с использованием конкатенаций строк неверен.
Это хорошо известный источник ошибок и большой риск безопасности под названием Sql Injection

Вместо использовать параметризованный запрос, как этот

string selectQuery = @"SELECT * FROM Users 
         WHERE [uUsername] = @name AND 
          [uPw] = @pass"; 

SQLiteCommand sqlCmd = new SQLiteCommand(selectQuery, _sqlCon); 
sqlCmd.Parameters.Add("@name", DBType.String).Value = username; 
sqlCmd.Parameters.Add("@pass", DBType.String).Value = password; 
SQLiteDataReader dataReader = sqlCmd.ExecuteReader(); 
bRead = dataReader.Read(); 
.... 

Я предполагаю, что у вас есть в переменных пароле величины для найдите, измените его на свою реальную ситуацию.

Учитывайте также, что сохранение паролей в открытом тексте внутри базы данных - еще один риск безопасности, которого следует избегать. Вопрос Best way to store password in a database объясняет в деталях причины и правильный способ сделать это

+0

Спасибо. Я воспользуюсь этим. –

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