con.Open();
String query = "SELECT * FROM loginTable WHERE (email = @usernameOrEmail OR username = @usernameOrEmail) AND password = @password";
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.Add("@usernameOrEmail", SqlDbType.NVarChar).Value = usernameOrEmail;
cmd.Parameters.Add("@password", SqlDbType.NVarChar).Value = user_password;
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataTable dtable = new DataTable();
sda.Fill(dtable);
参数化查询以防止SQL注入,因此您可以在查询中看到更新。我将这些参数添加到指定的变量中(您声明了)。OR的优先级低于AND,后者使您试图构建的预期查询失败->
(email = 'inputValue') OR (username = 'inputValue' AND password = 'inputPassword')
要正确检查电子邮件或用户名是否匹配,以及密码是否匹配,您需要将or条件与括号组合在一起:
SELECT *
FROM loginTable
WHERE (email = 'inputValue' OR username = 'inputValue')
AND password = 'inputPassword'