-4

Studentname: ユーザーがIDまたは名前を入力してボタンをクリックすると、詳細が表示されます....どのように?

ここで、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();
    }
}

誰でもこの問題について助けてください!!

少し早いですがお礼を!!

4

2 に答える 2

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

多くの人が指摘しているように、クエリをパラメータ化する必要があり、エンド ユーザーから提供されたテキストを挿入しないでください。

于 2013-06-20T16:26:19.843 に答える
0

あなたの質問に答えるために、ブール演算を正しくグループ化していないため、期待した結果が得られませX AND Y OR ZX AND (Y OR Z). 前者の場合、式全体が true と評価されるためには、Z または X と Y の組み合わせのみが true である必要があります。

別の注意として、ここにあるコードはSQL インジェクション攻撃に対して広く開かれています。これは本当に悪いことです。これをパラメーター化されたクエリポストヘイストに切り替える必要があります。

于 2013-06-20T16:32:56.967 に答える