SQL一次选择多个列

时间:2017-01-08 14:23:43

标签: c# asp.net sqlite

你好,我在这个游戏中还是新手。我很难从数据库中选择用户名和密码来验证它。

下面提到的代码可以做的只是选择用户名。

我需要帮助来修改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 个答案:

答案 0 :(得分:2)

AND logical operator添加到WHERE第一个条件以获得双重条件。但是,使用字符串连接的整个方法是错误的 它是一个众所周知的漏洞来源和一个名为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详细解释了原因和正确的方法