我想在C#中构建登录系统并使用sql Data reader,如Facebook,用户可以使用Email或UserID和Password登录其帐户。我写了这段代码但是没有用到我的问题或者你能推荐。
sql = "select * from Users_tbl WHERE (([Email] = @EmailParam) OR ([UserID] = @UserIDParam) AND ([Password] = @PasswordParam))";
SqlCommand cmd = new SqlCommand(sql, con);
SqlParameter uemail = new SqlParameter("@EmailParam", SqlDbType.NVarChar, 80);
uemail.Value = txtEmailUserID.Text.Trim().ToString();
cmd.Parameters.Add(uemail);
SqlParameter userid = new SqlParameter("@UserIDParam", SqlDbType.NVarChar, 50);
userid.Value = txtEmailUserID.Text.Trim().ToString();
cmd.Parameters.Add(userid);
SqlParameter upass = new SqlParameter("@PasswordParam", SqlDbType.NVarChar, 80);
upass.Value = txtPassword.Text.Trim().ToString();
cmd.Parameters.Add(upass);
SqlDataReader dr = cmd.ExecuteReader();
while(dr.read())
{
// session variables
}
答案 0 :(得分:2)
这似乎太简单了。尝试实验。选择数据库。列出表格。使用SQL管理工作室或LINQ-to-EF创建具有相同输入参数的相同类型的查询。在某些时候,问题将浮出水面。祝你好运。
我还查看了运算符优先级,这似乎不是问题所在:http://technet.microsoft.com/en-us/library/ms190276.aspx
答案 1 :(得分:1)
尝试添加这样的额外支架
var sql = "select * from Users_tbl WHERE ((([Email] = @EmailParam) OR ([UserID] = @UserIDParam)]) AND ([Password] = @PasswordParam))";