2016-05-06 9 views
1

私はログインTextBoxに入力したものに基づいて2つのテーブルでテストをしようとしているので、LoginNameがテーブル "Redacteur"にある場合はテストします。他のテーブル "Membres"を見る新しいコマンドを作る。 問題:このコマンドは、 "Redacteur"テーブルにあるloginNameを入力したときに機能しますが、Membresのテーブルに属するloginNameを入力すると、コード内で要求しているページにリダイレクトされません。私はそれがElseセクションに入ることさえないと思う。Connectionの2番目のコマンドが機能しないのはなぜですか?

using(SqlConnection connect = new SqlConnection(cs)) 
{ 
    SqlCommand cmd = new SqlCommand("select * from Redacteurs where RedCode= @lg", connect); 
    cmd.Parameters.AddWithValue("@lg", TextLogIn.Text); 
    connect.Open(); 
    //cmd.ExecuteNonQuery(); 
    SqlDataReader rd = cmd.ExecuteReader(); 
    if (rd.HasRows) 
    { 
     rd.Read(); 
     Session["code"] = rd["RedCode"].ToString(); 
     Session["loginname"] = TextLogIn.Text; 
     Session["pass"] = TextPass.Value; 
     Response.Redirect("RedacteurPage.aspx?Redact=" 
      + Session["loginname"].ToString()); 
     rd.Close(); 
    } 
    else 
    { 
     cmd = new SqlCommand("select * from Membres where LoginMembre = @lm", connect); 
     cmd.Parameters.AddWithValue("@lm", TextLogIn.Text); 
     //cmd.ExecuteNonQuery(); 
     SqlDataReader rd2 = cmd.ExecuteReader(); 
     if (rd2.HasRows) 
     { 
      rd2.Read(); 
      Session["code"] = rd2["MembreCode"].ToString(); 
      Session["loginname"] = TextLogIn.Text; 
      Session["pass"] = TextPass.Value; 
      Response.Redirect("ProductCatalogue.aspx?user=" + rd2["FullName"]); 
      rd2.Close(); 
     } 
    } 
} 
+0

ここでSQLインジェクション用のドアを開けています。 – Kramb

+1

'それはElseセクションにも入っていないと思います。デバッガを使って確認してください。 –

+0

' cmd = new SqlCommand(...) '行を' cmd.CommandText = "に変更してみてください。NEW SQL" – Kramb

答えて

1

同じ接続で実行する前に、最初のコマンドを終了/破棄する必要があります。

elseブロックの最初の行には、すばやく汚れている(つまり、推奨されていませんが、解決策はありません)解決策があります。

+0

このコードで許可されている注射はもちろんですが。 – Kramb

+2

@Krambこれはパラメータ化されたクエリです - 正確にはどこにインジェクションの脆弱性がありますか? – RobSiklos

関連する問題