2014-11-25 2 views
2

Я работаю с C# (visual studio 2012 professional) и 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

спасибо тааак много !!! вы только что сохранили день –

+0

. Я рассмотрю, как я описал ранее, это только для целей тестирования, после чего я буду обрабатывать безопасность –

+0

@ DanielS. Рад помочь. –