1

ログイン画面で Windows フォーム アプリケーションを作成しようとしています。ユーザー名とパスワードが正しい場合、Form3 は Form1 を開きます。

コードはデータベースにリンクされています

コードは次のとおりです。

 private void button1_Click(object sender, EventArgs e)
 {
            string u_id = textBox1.Text;
            string u_pwd = textBox2.Text;

            SqlConnection conn = new SqlConnection("Data Source=mmtsql.XXX.XXXXX.ac.uk;Initial Catalog=mmt12-186;User ID=XXXXXX;Password=XXXXXX");
            conn.Open();

            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = ("SELECT * FROM UsersData WHERE User = '" + textBox1.Text + "'");
            cmd.Parameters.AddWithValue("un", u_id);

            SqlDataReader reader = cmd.ExecuteReader();

            if (reader.Read() == false)
            { 
                    label3.Text = "Invalid Username or Password !";
                    return;
            }

            string realpwd = reader.GetString(0);

            if (u_pwd == realpwd)
            {
                    Form1 formload = new Form1();
                    formload.Show();
            }
}

このコードを実行するたびに、次の行で例外が発生します。

string realpwd = reader.GetString(0);

例外は次のとおりです。

データが存在しない場合の読み取りの試みは無効です。

UsersDataテーブルには、ID、ユーザー、パスワードの 3 つの列があります。

質問に答えてくれた「Alfred Sanz」に感謝します。問題は、エラーは存在しないがデータが表示されないことです。button1_click にメソッドがないかのように、現在のコードは次のとおりです。

    private void button1_Click(object sender, EventArgs e)
    {
        string u_id = textBox1.Text;
        string u_pwd = textBox2.Text;
        SqlConnection conn = new SqlConnection("Data Source=mmtsql.XX.XXX.ac.uk;Initial Catalog=XXXXXXX ;User ID=XXXX;Password=XXXXX");
        conn.Open();
        SqlCommand cmd = conn.CreateCommand();
        cmd.CommandText = ("SELECT * FROM UsersData WHERE User = @un");
        cmd.Parameters.AddWithValue("@un", u_id);
        SqlDataReader reader = cmd.ExecuteReader();

        while (reader.Read())
            if (reader["Password"].ToString() == u_pwd)
            {
                Form1 formload = new Form1();
                formload.Show();
            }
            else
            {
                label3.Text = "Invalid Username or Password !";
            }

    }
4

1 に答える 1