2014-04-30 3 views
0

Hie, C# 클래스에서 SQL 쿼리를 실행하려는 위기가 있습니다. 이전에 로그인 페이지에서 제대로 작동하고 있었고 이동했을 때 거의 변경되지 않았습니다. 클래스클래스에서 MySQL 쿼리를 실행하는 중에 예외가 발생했습니다.

SQL 쿼리 :

namespace Masca 
    { 
    public class loginc 
     { 
     // Telling the class that the page 'Login' exists. 
     public Login login; 

는 .... login.cs에서

public void Login() 
    { 
     // connection parameters 
     string sqlcon = "datasource=localhost;port=3306;username = root; password = root"; 
     //Command to carry out -This is what the exception highlights when it's thrown. 
     string query = "SELECT * FROM logon.login where username = '" + login.username.Text + "' and password = '" + login.password.Password + "';"; 

     MySqlConnection con = new MySqlConnection(sqlcon); 

     MySqlCommand cmd = new MySqlCommand (query,con); 

     MySqlDataReader rdr; 
     con.Open(); 
     rdr = cmd.ExecuteReader(); 
     int count = 0; 
     while (rdr.Read()) 
     { 
      count = count + 1; 
     } 

     if (count == 1) 
     { 
      //If the username and password match those in the database table, run the method 'login' in the login page cs. 
      login.login(); 
     } 

     else 
     { 
      // if they don't match, run the method 'failLogin' in the login page cs. 
      login.failLogin(); 
     } 

    } 

나는 두 개의 텍스트 상자와 버튼이 있습니다. 하나는 사용자 이름 용이고 다른 하나는 암호 용입니다. 버튼이 위의 코드를 실행한다고 가정합니다.

public void Logon_Click(object sender, RoutedEventArgs e) 
    { 
     loginc.Login(); 
    } 

그러나 고전적인 "개체 참조가 개체의 인스턴스로 설정되지"쿼리에 throw 된 예외가 발생합니다. '+ login.username.Text +'및 '+ login.password.Password +'대신 실제 자격 증명을 입력하면 'login.Login()'에 예외가 발생합니다.

loginc.cs 클래스가 login.cs와의 관계를 거부하지만 login.cs가 클래스에서 같은 방식으로 메소드를 트리거하는 데 문제가 없다는 것을 이해하지 못합니다. 누구 내가 잘못 가고 있는지 알아?

+4

일반 텍스트로 암호를 저장하고 SQL 주입 취약점이 있습니까? 감미로운 아기 예수 [자신을 교육하십시오] (http://www.troyhunt.com/2013/07/everything-you-wanted-to-know-about-sql.html) – DGibbs

답변

1

Login login을 인스턴스화하는 코드는 없습니다. 당신은 정말로 그렇게해야합니다.

Login login = new Login(); 

또는 이와 유사한 것.

+0

좋습니다. 분명히 나는 ​​그것을 놓쳤습니다. 지금 당장. – Offer

+0

@Offer : 행운을 빕니다? –

+0

@ Patrick Hofman - 일종의. 메서드의 연결 매개 변수 바로 앞에 넣습니다. 나는 예외를 더 이상 얻지 못합니다 ... 그리고 코드에 'login.username.Text'대신 실제 사용자 이름과 암호를 입력하면 로그인됩니다. 필자가 텍스트 상자에 암호를 입력하면 MySQL이 암호가 틀렸다는 것을 항상 어떻게 알 수 있습니까? – Offer

관련 문제