下面提到的代码可以做的只是选择用户名。
我需要帮助来修改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
答案 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详细解释了原因和正确的方法