ログイン画面で 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 !";
}
}