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();
....
我假设您在变量密码中有要搜索的值,请将其更改为您的实际情况。
还要考虑,在数据库中以明文形式存储密码是另一个需要避免的安全风险。问题 在数据库中存储密码的最佳方法 非常详细地解释了原因和正确的方法