在Select语句中组合'AND,'OR'

时间:2013-06-20 16:21:57

标签: asp.net sql-server

学生名:当用户输入身份证或姓名并点击按钮时,应该显示详细信息....如何?

这里我的OR子句在select语句中不起作用:

public partial class StudentView : System.Web.UI.Page
{
    SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["DBCS"].ConnectionString);

    protected void Button1_Click(object sender, EventArgs e)
    {

        string str = "SELECT Registration.UsrFLname, Registration.UsrAddress, Students.STUID, Materials.BookID, Materials.BookName, Courses.CourseName, Courses.CourseFee FROM Courses INNER JOIN Materials ON Courses.BookID = Materials.BookID INNER JOIN Students ON Courses.STUID = Students.STUID AND Materials.STUID = Students.STUID INNER JOIN Registration ON Students.STUID = Registration.STUID AND Registration.UsrFLname = '" + TextBox1.Text + "' OR Students.STUID = '" + TextBox1.Text + "'";

        con.Open();
        SqlCommand cmd = new SqlCommand(str, con);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds, str);
        GDStudents.DataSource = ds;
        GDStudents.DataBind();
    }
}

任何人都可以帮忙解决这个问题!!

提前感谢!!

2 个答案:

答案 0 :(得分:0)

AND的优先级高于OR

在布尔逻辑中AND就像乘法,OR就像求和,因此,当你想在求和之前发生求和时,你应该使用括号()

2*3+1 = 7
2*(3+1) = 8

我想在你的情况下,条件应该是

Students.STUID = Registration.STUID 
   AND 
( -- note this paren
    Registration.UsrFLname = '" + TextBox1.Text + "' 
        OR
    Students.STUID = '" + TextBox1.Text + "'"
) -- note this paren

正如很多人所说,你应该参数化你的查询,不要注入最终用户提供的文本。

答案 1 :(得分:0)

要回答你的问题,你没有得到你期望的结果,因为你没有正确地对你的布尔运算进行分组,你的意思是X AND Y OR Z X AND (Y OR Z)。在前者的情况下,只有Z或X和Y的组合需要为真,以便整个表达式评估为真。

另外,您在这里的代码全开SQL injection攻击,real bad。您应该将其切换为parameterized query posthaste。