1

簡単なログイン ページを作成しようとしています。ユーザーは ID とパスワードを入力し、ドロップダウン リストからロールを選択します: 学生、管理者、またはインストラクター。コードは次のとおりです。

protected void loginButton_Click(object sender, EventArgs e)
{

    SqlConnection con = new SqlConnection();
    con.ConnectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=University;Integrated Security=True;Pooling=False";
    //myConn.Open();
    //string strqry = "Insert into students values (" + TextBox1.Text +
    //",'" + TextBox2.Text + "','" + TextBox3.Text + "')";
    //SqlCommand myCom = new SqlCommand(strqry, myConn);
    //int numrow = myCom.ExecuteNonQuery();
    //myConn.Close();

    Int32 verify;
    string query1 = "Select count(*) from Login where ID='" + idBox.Text + "' and Password='" + passwordBox.Text + "' and Type='"+ LoginAs.Text +"'" ;
    SqlCommand cmd1 = new SqlCommand(query1, con);
    con.Open();
    verify = Convert.ToInt32(cmd1.ExecuteScalar());
    con.Close();
    if (verify > 0)
    {
        Response.Redirect("succesful.aspx");
    }
    else
    {
        Response.Redirect("unsuccesful.aspx",true);
    }

}

問題は、「LoginAs」というドロップダウンリストの値をチェックせずに試してみると、正常に動作し、検証が行われることです。しかし、学生、管理者、またはインストラクターのいずれかであるタイプも確認すると、すべての情報が正しい場合でも、常にログインに失敗します。誰が間違っているかを見つけるのを手伝ってくれますか?

ありがとう

4

3 に答える 3

0

SqlDataReader クラスを試してみてください。読み取りが発生した場合にキャッチできます。ここにリンクがあります。そうではありませんが、データベースでスカラー関数を使用するか、EntityFramework やその他の ORM ツールを使用することをお勧めします。

于 2013-05-17T11:37:34.873 に答える
0

最初にチェックするポイントは次のとおりです。

  1. すべての文字の大文字と小文字が同じである必要があります。
  2. データベースとアプリケーションでロールを切り捨てる必要があります

ただし、テキスト名の代わりに enum/int を使用してユーザーの役割を定義することをお勧めします。

于 2013-05-14T08:05:54.030 に答える
0

パラメータ化されたクエリを使用すると、おそらく解決され、このようなリスクを防ぐことができます

cmd1.Parameters.AddWithValue("@ID", idBox.Text);
于 2013-05-17T19:45:18.450 に答える