2013-03-09 57 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 !"; 
     } 
}