2016-08-08 3 views
0

그래서, 사용자가 mainform에 들어가기 위해 로그인해야하는 loginform이 있습니다. 응용 프로그램에 로그인하기 위해 사용자 이름과 암호를 저장하기 위해 만든 테이블이있는 데이터베이스가 있습니다.로그인 폼에 대한 SQL 데이터베이스의 다중 사용자

사용자가 올바른 사용자 이름과 암호를 입력하고 로그인을 클릭하면 해당 사용자가 메인 폼으로 이동해야합니다. 이 방법을 알고 있지만 SQL 데이터베이스에서 사용자 이름과 암호를 가져와 해당 암호가 존재하는지 확인하고 올바른 암호가 올바른 사용자 이름인지 아니면 올바른 암호인지 확인하십시오.

내가 말했듯이 사용자 이름과 암호를 저장하기 위해 SQL 데이터베이스를 만들었습니다. 그런 다음 테스트 용으로 사용자 이름과 암호가 모두 "admin"인 사용자를 저장했습니다.

나는이 코드를 시도했지만 정확한 사용자 이름과 암호를 입력했지만 로그인을 허용하지 않습니다.

string username; 
string password; 

private void btnLogin_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     SqlCeConnection con = new SqlCeConnection(@"connectionString"); 
     SqlCeCommand com = new SqlCeCommand("SELECT username, password FROM UsersPass WHERE username = '" + txtUsername.Text + "' AND password = '" + txtPassword.Text + "'", con); 
     con.Open(); 

    if (con.State == ConnectionState.Open) 
    { 
     SqlCeDataReader dtr = com.ExecuteReader(); 

     while (dtr.Read()) 
     { 
      username = dtr["username"].ToString(); 
      password = dtr["password"].ToString(); 
      if (username == txtUsername.Text && password == txtPassword.Text) 
      { 
       Mainform frm = new Mainform(); 
       frm.Show(); 
       this.Hide();  
      } 
      else 
      { 
       MessageBox.Show("Invalid credentials!\nPlease enter a valid username and password to continue.", "Login Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
     } 
    } 
    } 
    catch (Exception) 
    { 
     MessageBox.Show("Erorr", "Error"); 
    } 
} 

내가 완전히 분명한 것을 놓치고 있다면 용서해주십시오. 저는 C#을 처음 접했습니다. 미리 감사드립니다. 점에서

+0

SQL에 문자열을 연결하는 대신 SQL 매개 변수를 사용하십시오. 암호를 일반 텍스트로 저장하지 마십시오. 그리고 예외가 있다면 전체 오류 메시지를 공유하십시오. – Plutonix

+0

먼저 Sql Injection을 읽어보십시오. 둘째, 암호화에 대해 읽어보십시오. 셋째, C#의'using' 키워드를 읽습니다. – mxmissile

+0

'if (con.State == ConnectionState.Open)'연결이 열려 있지 않으면 예외가 발생합니다. –

답변

1

당신은 오류 메시지를 받고 있다고 말한다. 자신에 대해 더 많은 정보를 제공함으로써 시작하십시오. 어느 그래서 당신이 예외에 대한 몇 가지 세부 사항을 참조하거나 이유를 정확하게 응용 프로그램이 실패하는 당신에게 정보를 제공하고 경로에 당신을 설정합니다

catch (Exception ex) 
{ 
    MessageBox.Show("Erorr", ex.Message + Environment.NewLine + ex.StackTrace); 
} 

으로 변경할 수 있습니다

catch (Exception) 
{ 
    MessageBox.Show("Erorr", "Error"); 
} 

에 중단 점을 배치 당신이 원하는대로 일하는쪽으로.

잘못된 연결 문자열이 의심됩니다.

편집 :이 특정 문제는 SQL Server Compact Edition 참조가 표준 버전 참조 대신 사용 되었기 때문에 발생했습니다. 의견을보십시오.

+0

그럼 현재 사용하고있는 코드가 맞습니까? 내가 처음에 내 게시물에 언급 한 사람. 나는 내 코드가 완전히 잘못되었다고 생각했다. 지금 연결 문자열을 다시 확인하겠습니다. 답장을 보내 주셔서 감사합니다. –

+0

코드가 "정확하다"는 것을 알아내는 방법은 그 예외에서 실제로 어떤 종류의 오류가 발생하는지 확인하는 것입니다. 연결 문자열과 관련이 있다고 추측하고 있지만 완전히 기반에서 벗어날 수 있습니다. 연결 문자열은 올바르지 만 연결 라이브러리의 형식이 잘못되었을 수 있습니다. 예외가 당신에게 무엇을 말하고 있는지보십시오. –

+0

[This] (http://i.imgur.com/zuWm9PE.png)는 제가 얻는 예외입니다. 다음 연결 문자열을 사용하고 있습니다. 데이터 원본 = DELL \ SQLEXPRESS; 초기 카탈로그 = 사용자; 통합 보안 = True "' –

0

간단하게하는 또 다른 방법 :

  private void btnLogin_Click(object sender, EventArgs e) 
        { 
         string currentUserID=string.Empty; 
         SqlConnection connection= new SqlConnection(connectionString); 
         connection.Open(); 
         SqlCommand command = new SqlCommand(); 
         command.CommandText = "SELECT UserID From UserPass WHERE username [email protected] AND password [email protected]"; 
         command.Parameters.AddWithValue("@username", txtUsername.Text); 
         command.Parameters.AddWithValue("@password", txtPassword.Text); 
         command.Connection = connection; 
         object obj=command.ExecuteScalar(); 
         if (obj!=null) 
         { 
          currentUserID= obj.ToString(); 
          connection.Close(); 
          Mainform frm = new Mainform(); 
          frm.Show(); 
          this.Hide();   
         } 
         else 
         { 
         connection.Close(); 
         MessageBox.Show("Invalid credentials!\nPlease enter a valid username and password to continue.", "Login Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
         } 

        } 
+0

올바른 사용자 이름과 암호를 입력 했는데도 여전히 로그인을 허용하지 않습니다. –

+0

이 코드를 시도했습니다. 효과가 있습니다. @ Akeel.F – daylight