无法在c#/SqlDataReader问题中创建此登录表单

无法在c#/SqlDataReader问题中创建此登录表单,c#,sql,windows-forms-designer,sqldatareader,C#,Sql,Windows Forms Designer,Sqldatareader,我正在尝试制作一个带有登录屏幕的windows窗体应用程序,如果用户名和密码正确,Form3将打开Form1 代码链接到数据库 代码如下: private void button1_Click(object sender, EventArgs e) { string u_id = textBox1.Text; string u_pwd = textBox2.Text; SqlConnection conn = new

我正在尝试制作一个带有登录屏幕的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
表有3列,Id、User、Password

感谢回答问题的“Alfred Sanz”,现在的问题是没有错误,但没有显示数据,就好像按钮1_单击没有方法一样,当前代码是:

    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 !";
            }

    }

您已经将用户的
值设置为
“+textBox1.Text+”“
,但是您也设置了一个值
cmd.Parameters.AddWithValue(“un”,u_id);
,如果它确实不存在,请将代码更改为

            cmd.CommandText = "SELECT * FROM UsersData WHERE User = @un";
            cmd.Parameters.AddWithValue("@un", u_id);
您还可以将读卡器部分更改为:

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

您期望发生什么,以及实际发生了什么?从您的代码来看,您所做的只是显示一个表单,除了在显示表单之前对返回的数据进行快速密码测试之外,您没有做任何事情。