1

我使用C#visual studio從本地MySQL數據庫創建登錄表單。然而,每次我輸入信息時,都會告訴我用戶名和/或密碼不正確,我知道這是錯誤的。 這裏是代碼:C#MySQL無法識別輸入

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 Dark_Heresy 
{ 
    public partial class Form1 : Form 
    { 
     private MySqlConnection connection = new MySqlConnection(); 
     public Form1() 
     { 
      InitializeComponent(); 

     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 

     private void btn_Login_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       String MyConnection = "datasource = localhost; port = 3306; username = root; password = Mypass;"; 
       MySqlConnection MyConn = new MySqlConnection(MyConnection); 
       MySqlCommand SelectCommand = new MySqlCommand("SELECT * FROM dark_heresy.users WHERE users_='"+ this.TextUserName.Text + "' and password_='"+ this.TextPassword.Text + "';", MyConn); 

       MySqlDataReader MyReader; 
       MyConn.Open(); 
       MyReader = SelectCommand.ExecuteReader(); 
       int count = 0; 
       while (MyReader.Read()) 
       { 
        count = count++; 
       } 
       if (count == 1) 
       { 
        MessageBox.Show("Connection Successful"); 
       } 
       else if (count > 1) 
       { 
        MessageBox.Show("Duplication of Username and Password... Access Denied"); 
       } 
       else 

        MessageBox.Show("Incorrect Username and/or Password"); 
       MyConn.Close(); 


      } 
      catch (Exception exp) 
      { 
       MessageBox.Show("Error: \r\n" + exp); 
      } 


     } 


     } 
    } 

在MySQL工作臺它的工作,它讓我看到「用戶」與它的「密碼」時進行此查詢:

SELECT * FROM dark_heresy.users WHERE users_='admin' and password_='adminpass'; 

的連接工作正常,它有已經過測試,但總是得到結果「不正確的用戶名和/或密碼」。

+2

要解決的第一件事就是停止像這樣創建SQL - 使用參數化SQL。有關原因,請參閱http://www.bobby-tables.com。接下來,停止在數據庫中以明文形式輸入密碼。理想情況下,使用其他人編寫的認證系統......實際上沒有理由把自己放在一起,而且會讓用戶的安全處於危險之中。 – 2014-11-21 17:13:47

+1

噢,對於需要計算記錄數的類似情況,請在查詢中使用COUNT並使用ExecuteScalar來執行它。 – 2014-11-21 17:14:47

+0

並且你不需要計數,只要檢查一行的存在,使用'EXISTS'。 – HABO 2014-11-21 17:19:13

回答

3

隨着更多的問題在你的代碼的問題是

count = count++; 

後綴增量遞增count而是返回其先前的值。

string connectionString = "datasource = localhost; port = 3306; username = root; password = Mypass;"; 
using(MySqlConnection myConn = new MySqlConnection(connectionString)) 
using(MySqlCommand selectCommand = new MySqlCommand()) 
{ 
    selectCommand.CommandText = "SELECT COUNT(1) FROM dark_heresy.users WHERE [email protected] and [email protected]"; 
    selectCommand.Connection = myConn; 
    selectCommand.Parameters.Add(new MySqlParameter("User", MySqlDbType.VarChar).Value = TextUserName.Text); 
    selectCommand.Parameters.Add(new MySqlParameter("Password", MySqlDbType.VarChar).Value = TextPassword.Text); 
    myConn.Open(); 
    var ret = selectCommand.ExecuteScalar(); 
    var count = Convert.ToInt32(ret); 
    if (count == 1) 
    { 
     MessageBox.Show("Connection Successful"); 
    } 
    else if (count > 1) 
    { 
     MessageBox.Show("Duplication of Username and Password... Access Denied"); 
    } 
    else 
    { 
      MessageBox.Show("Incorrect Username and/or Password"); 
    } 
} 
+0

當我嘗試你發佈的代碼我得到18錯誤 – 2014-11-22 13:46:17

+0

我喜歡: 當我嘗試你發佈的代碼我得到18錯誤,如: 名稱'計數'不存在於當前上下文 和行選擇命令錯誤.Text =「SELECT COUNT(1)FROM dark_heresy.users WHERE users _ = @ User and password _ = @ Password;」); 也在當前上下文中不存在名稱'MysqlType' – 2014-11-22 13:54:06

+0

我已經清理並重建該項目 – 2014-11-22 14:08:41