SQL 一次选择多个列



Hallo 我还是这个游戏的新手。我正在努力从数据库中选择用户名和密码进行验证。

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

我需要帮助来修改选择语句以选择用户名和密码。

 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

将 AND 逻辑运算符添加到 WHERE 第一个条件以获得双精度条件。但是,使用字符串连接的整个方法是错误的。
它是众所周知的错误来源和称为SQL注入的巨大安全风险

而是使用如下所示的参数化查询

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();
....

我假设您在变量密码中有要搜索的值,请将其更改为您的实际情况。

还要考虑,在数据库中以明文形式存储密码是另一个需要避免的安全风险。问题 在数据库中存储密码的最佳方法 非常详细地解释了原因和正确的方法

最新更新