2013-03-09 90 views
1

我试图让一个登录屏幕Windows窗体应用程序,Form3将打开Form如果用户名和密码是否正确。无法使该日志表格在C#/ SqlDataReader的问题

的代码链接到数据库

的代码如下:

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); 

例外是:

Invali d当没有数据存在时尝试读取。

UsersData表有3列,ID,用户,密码

由于去“阿尔弗雷德·桑斯”谁回答了这个问题,现在的问题是没有错误的,但没有数据显示,作为如果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 !"; 
      } 

    } 
+0

什么是你期待发生的,什么是真正发生?从你的代码中,你所做的只是显示一个表单,除了在显示表单之前进行快速密码测试之外,你没有对返回的数据做任何事情。 – 2013-03-09 14:50:31

回答

0

你已经设置用户的value'" + 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 !"; 
     } 
}