2014-09-28 32 views
-1

這是我的代碼。我正在嘗試創建一個登錄頁面。代碼的問題在於'count'值不會增加。 是的,我的表中有足夠的數據。 每次它轉到else條件的一部分,說明無效的登錄憑證。 我的連接建立發生在不同的類,所以在這裏我只是調用對象。 這到底是什麼地方出了問題? 請幫忙!查詢用戶表時「登錄」不成功

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using MySql.Data.MySqlClient; 

namespace WindowsFormsApplication1 
{ 
public partial class login : Form 
{ 
    public login() 
    { 
     InitializeComponent(); 
    } 

    public void login_Load(object sender, EventArgs e) 
    { 

     //to show tip on mouseover on text fields 
     System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip(); 
     ToolTip1.SetToolTip(this.username_combobox, "username cannot be more that 20 characters   long"); 
     ToolTip1.SetToolTip(this.password_txt, "Not more than 10 characters"); 

     //mysql connection 
     Connection con = new Connection(); 
     MySqlConnection conn = con.GetConnection(); 

     //filling the combo box with data from project.userdetails.username 
     string query = "select username from project.user_details;"; 
     MySqlDataAdapter da = new MySqlDataAdapter(query, conn); 
     DataTable dt = new DataTable(); 
     da.Fill(dt); 
     username_combobox.DataSource = dt; 
     username_combobox.DisplayMember = "username"; 
     conn.Close(); 
    } 

    private void forgotpassword_label_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 
    { 
     forgot_password fp = new forgot_password(); 
     fp.Show(); 
    } 

    private void newuser_linklable_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 
    { 
     newuser nu = new newuser(); 
     nu.Show(); 

    } 

    private void submit_btn_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      Connection con = new Connection(); 
      MySqlConnection conn = con.GetConnection(); 
      MySqlCommand selectCommand = new MySqlCommand("select * from project.user_details  where username =' " + this.username_combobox.Text + " ' and password = ' " + this.password_txt.Text + " '; ", conn); 


      MySqlDataReader myreader; 

      myreader = selectCommand.ExecuteReader(); 
      int counter = 1; 

      while (myreader.Read()) 
      { 
       counter = counter + 1; 
      } 
      if (counter == 2) 
      { 
       MessageBox.Show("Login successfull"); 
       Dashboard_form db = new Dashboard_form(); 
       db.Show(); //open dashboard 
       Hide(); 
      } 
      else if (counter > 1) 
      { 
       MessageBox.Show("Access denied. more than 1 account present"); 
      } 
      else 
      { 
       MessageBox.Show("Invalid login credentials"); 
      } 
      conn.Close(); 
     } 
     catch(Exception x) 
     { MessageBox.Show(x.Message); } 
    } 

    private void username_combobox_SelectedIndexChanged(object sender, EventArgs e) 
    { 

    } 

    private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e) 
    { 


    } 
} 
} 
+0

在您的查詢文本中,您連接了字符串(一個非常糟糕的舉動),但是這樣做會在用戶名前後添加空格。我敢打賭,這個查詢不返回任何東西(也是在密碼周圍) – Steve 2014-09-28 08:23:05

回答

2

一個問題是,選擇語句正試圖以匹配空間包圍的用戶名,如' Jimbox '' Susanblinkz '。儘管可以簡單地刪除額外的空白區域,但請花些時間到修復破碎的SQL(和潛在注入)並使用佔位符,這也會使問題更加明顯。

MySqlCommand selectCommand = new MySqlCommand(
    @"select * from project.user_details 
     where [email protected] and [email protected]", 
    conn); 

selectCommand.Parameters 
      .Add("@username", SqlDbType.NVarChar) 
      .Value = username_combobox.Text; 
selectCommand.Parameters 
      .Add("@password", SqlDbType.NVarChar) 
      .Value = password_txt.Text; 

聲明:我不使用MySqlCommand,所以上面可能需要對SQL文本或參數進行一些修改。

當然,存儲純文本密碼的整個方法是hogwash,但是......已經很晚了,我要睡覺了。

+0

@Steve哎呀!感謝您的更正。疲憊的手指,眼睛和大腦。 – user2864740 2014-09-28 08:31:30

0

更換線路,

MySqlCommand selectCommand = new MySqlCommand("select * from project.user_details  where username =' " + this.username_combobox.Text + " ' and password = ' " + this.password_txt.Text + " '; ", conn); 

通過,

var strQuery = "select * from project.user_details where username ='" + this.username_combobox.Text + "' and password = '" + this.password_txt.Text + "'; "; 
MySqlCommand selectCommand = new MySqlCommand(strQuery, conn); 

你應該使調試代碼的習慣。 看看strQuery在那個時候返回什麼,並嘗試在sqlserver中執行查詢。 我們可以簡單地跟蹤問題。

+0

非常感謝! @mrsrizan什麼事情出錯了? – 2014-09-28 10:18:34

+0

問題是您在用戶名和密碼的開頭和結尾添加了空格。如@ user2864740所述。 – mrsrizan 2014-09-28 15:00:40