2013-02-20 2 views
3

저는 C#을 처음 사용하므로 로그인 양식에 문제가 있습니다.로그인시 상태 당 정지?

제출 버튼을 누를 때마다 내 사용자 클래스가 "admin"이 아닌 경우 로그인 양식으로 다시 나타납니다. 그래서 조건이 사실이 아닐 때 제 진술이 멈 춥니 다. 여기 내 코드가있다. 내 초보자 제한 여기에 대한 죄송합니다

-------- 편집 내가 무엇을 가지고 : 가 사용자가 가지고있는 역할에 따라 사용자 이름과 역할 와 SQL 테이블이 다른 양식을로드

// Compare strings 
private bool CompareStrings(string string1, string string2) 
    { 
     return String.Compare(string1, string2, true, System.Globalization.CultureInfo.InvariantCulture) == 0 ? true : false; 
    } 




// button on Login form  
public void button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      SqlConnection UGIcon = new SqlConnection(); 
      UGIcon.ConnectionString = "Data Source=BVSQL; Initial Catalog=BV1;user id=jose; password=jones6;"; 

      UGIcon.Open(); 
      SqlCommand cmd = new SqlCommand("SELECT ISNULL(bvuser, '') AS stUsername, ISNULL(bvpassword,'') AS stPassword, ISNULL(bvclass, '') AS stRole FROM BVusertable WHERE bvuser='" + textBox1.Text + "' and bvpassword='" + textBox2.Text + "'", UGIcon); 
      SqlDataReader dr = cmd.ExecuteReader(); 

      string userText = textBox1.Text; 
      string passText = textBox2.Text; 
      //string stRole = "admin"; 

      dr.Read(); 
      { 
       if 
        (this.CompareStrings(dr["stUsername"].ToString(), userText) && 
        this.CompareStrings(dr["stPassword"].ToString(), passText) 
        ) 
       { 
        if (this.CompareStrings(dr["stRole"].ToString(), "admin")) 
        { 
         this.DialogResult = DialogResult.OK; 
        } 
        else if (this.CompareStrings(dr["stRole"].ToString(), "user")) 
        { 
         this.DialogResult = DialogResult.No; 
        } 
       } 
       else 
       { 
        //MessageBox.Show("Error"); 
       } 
      } 
      dr.Close(); 
      UGIcon.Close(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Login Falied"); 
     } 
    } 

여기 Programs.cs

using System; 
using System.Collections.Generic; 
using System.Windows.Forms; 

namespace BV_SOFT 
{ 
static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Loginf fLogin = new Loginf(); 
     if (fLogin.ShowDialog() == DialogResult.OK) 
     { 
      Application.Run(new Home2()); 
     } 
     else 
     if (fLogin.ShowDialog() == DialogResult.No) 
     { 
      Application.Run(new Home3()); 
     } 
     else 
     { 
      Application.Exit(); 
     } 
+0

'this.CompareStrings' 메소드에는 무엇이 있습니까? 왜 그 메소드를 호출하는 대신에'=='를할까요? – sparky68967

+0

@ sparky68967 - 대소 문자를 구분하지 않는 비교를 수행 할 수 있습니다 (예 :). – ChrisF

+0

@ChrisF 사용자 이름은 괜찮을 지 모르지만 비밀번호는 권하지 않습니다. – sparky68967

답변

1

에만 설정되어있는 DialogResultOK에 사용자가 "관리자"역할이있는 경우.

역할이 "사용자"인 경우를 제외하고는 모두 결과가 설정되지 않습니다. 이것은 양식이 기각되지 않음을 의미합니다.

당신의 논리가 무엇인지 알지 못하면 나는 그것이 무엇을해야하는지 제안 할 수 없다.

2

ShowDialog를 두 번 호출합니다. 이것을 시도하십시오 :

Loginf fLogin = new Loginf(); 
DialogResult result = fLogin.ShowDialog(); 
if (result == DialogResult.OK) 
{ 
    Application.Run(new Home2()); 
} 
else if (result == DialogResult.No) 
{ 
    Application.Run(new Home3()); 
} 
else 
{ 
    Application.Exit(); 
} 

ShowDialog을 두 번 호출하면 양식이 두 번 표시됩니다. 이것을 사용하면 한 번만 표시됩니다. 귀하의 코드에서 역할이 "admin"이 아닌 경우 else 블록이 실행되고 을 다시 으로 호출합니다.이 번호는이며 원하는 것은 아닙니다. 양식을 한 번 표시하고 결과를 저장하고 저장된 결과를 확인하십시오.

+0

고마워요, 선생님. – user2093455