1

C# Visual Studio에서 로컬 MySQL 데이터베이스의 로그인 양식을 만들고 있습니다. 그러나 나는 정보를 입력 할 때마다 사용자 이름 및/또는 암호가 틀리다고 나에게 거짓임을 알립니다. 메이크업이 쿼리 할 때C# MySQL이 입력을 인식하지 못합니다.

작동 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); 
      } 


     } 


     } 
    } 

, 그것의 "비밀"로 나에게 "사용자"를 보여줍니다 : 연결이 잘 작동

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

, 그것은 가지고 여기 코드입니다 테스트되었지만 항상 "잘못된 사용자 이름 및/또는 암호"결과를 얻습니다. 코드에서 더 문제와 함께

+2

수정해야 할 * * 우선 * 할 일은 SQL 작성을 중단하는 것입니다. 대신 매개 변수화 된 SQL을 사용하십시오. 이유는 http://www.bobby-tables.com을 참조하십시오. 그런 다음 암호를 데이터베이스에 일반 텍스트로 저장하지 마십시오. 이상적으로는 다른 사람이 작성한 인증 시스템을 사용하십시오 ... 자신 만의 정보를 넣을 좋은 이유가 전혀 없으며 사용자의 보안을 위험에 빠뜨리고 있습니다. –

+1

아, 레코드 수를 계산해야하는 유사한 상황의 경우 쿼리에서'COUNT'를 사용하고 ExecuteScalar를 사용하여 실행하십시오. –

+0

그리고 어디에 카운트 할 필요가 없는지, 단지 행의 존재를 확인하기 위해서'EXISTS'를 사용하십시오. – HABO

답변

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 개의 오류가 발생했습니다 –

+0

: 게시 한 코드를 게시 할 때 다음과 같이 18 개의 오류가 표시됩니다. 'count'이름이 현재 컨텍스트에 존재하지 않습니다. 줄에 오류가 있습니다. selectCommand .Text = "SELECT _ COUNT (1) FROM dark_heresy.users 사용자 _ = 사용자 및 암호 _ = @ 암호;"); 또한 'MysqlType'이름이 현재 컨텍스트에 존재하지 않습니다. –

+0

프로젝트를 정리하고 다시 작성했습니다. –

관련 문제