2014-11-25 62 views
2

我与C#(的Visual Studio 2012专业)和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 Login_Menu : Form 
     { 
      private MySqlConnection connection = new MySqlConnection(); 
      public Login_Menu() 
      { 
       InitializeComponent(); 
       TextPassword.PasswordChar = '*'; 
      } 

      private void Form1_Load(object sender, EventArgs e) 
      { 

      } 

      private void btn_Login_Click(object sender, EventArgs e) 
      { 
       try 
       { 
       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) 
         {     
          this.Hide(); 
          Menu mn = new Menu(); 
          mn.ShowDialog(); 
         } 
        else if (count > 1) 
         { 
          MessageBox.Show("Duplication of Username and Password... Access Denied"); 
         } 
        else 
         { 
          MessageBox.Show("Incorrect Username and/or Password"); 
         } 
        } 


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

       } 
      } 
     } 

我没有得到任何语法错误,但是当我运行这段代码我收到此错误:

MySql.Data.MySqlClient.MySqlException(0x80004005): 
Only MySqlParameter objects may be stored at MySql.Data.MySqlClient.MySqlParameterCollection.Add(Object value) 
at Dark_Heresy.Login_Menu.btn_Login_Click(Object sender, EventArgs e) 

我知道的安全原因是使用mysql.user表而不是dark_heresy.users表进行用户检查是更好的主意,但现在是用于测试目的。 代码有什么问题? 它说是39行

回答

1

一个错误,我认为你的参数的语法是错误的。

= operator返回的只是分配右边的值代替也。这就是为什么;

new MySqlParameter("User", MySqlDbType.VarChar).Value = TextUserName.Text; 

表达式返回TextUserName.Text作为值和您的参数部分就会像;

selectCommand.Parameters.Add(TextUserName.Text); 

正确的语法似乎;

selectCommand.Parameters.Add("@User", MySqlDbType.VarChar).Value = TextUserName.Text; 
selectCommand.Parameters.Add("@Password", MySqlDbType.VarChar).Value = TextPassword.Text; 

并请不要将您的密码保存为纯文本

阅读:Best way to store password in database

+0

谢谢soooo多!!!你只是保存了一天 – 2014-11-25 11:10:18

+0

正如我前面所描述的那样,我将会研究这只是为了测试目的,之后我会处理安全 – 2014-11-25 11:17:45

+0

@DanielS。乐意效劳。 – 2014-11-25 11:41:33