2014-10-07 60 views
0

我在那裏根據用戶類型的它會打開一個不同的菜單,但我不知道如何使它識別的類型沒有具體說明登錄,這是我得到的代碼:如何讓我的登錄識別用戶是管理員還是普通用戶?

私人無效btnaceptar_Click(對象發件人,EventArgs e) 如果(txtusuario.Text ==「」||txtcontraseña.Text==「」) { MessageBox.Show(「TODOS LOS CAMPOS DEBEN ESTAR LLENOS。」,「ERROR」,MessageBoxButtons。 OK,MessageBoxIcon.Error); txtusuario.Clear(); txtusuario.Focus(); }

 n = n - 1; 
     if (n <= 3 && n >= 0) 
     { 

      if (n == 1) 
      { 
       MessageBox.Show("Solo le quedan 1 intento, porfavor asegurese de poner los datos correctos!", "AVISO!", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
       MessageBox.Show("Usuario y/o contraseña incorrectos, verifique porfavor", "Error al ingresar datos.", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       this.txtusuario.Clear(); 
       this.txtcontraseña.Clear(); 
       this.txtusuario.Focus(); 
      } 

      else 
      { 
       SqlConnection miconexion = new SqlConnection(@"Data Source=USER-PC;Initial Catalog=dbpuntodeventa;Integrated Security=True"); 
       miconexion.Open(); 
       SqlCommand comando1 = new SqlCommand("select * from usuarios where usuario='" + txtusuario.Text + "'and contraseña='" + txtcontraseña.Text + "'", miconexion); 
       SqlDataReader Ejecuta = comando1.ExecuteReader(); 

       if (Ejecuta.Read() == true) 
       { 
        MessageBox.Show("Bienvenido Administrador , Ingreso de datos correctos", "Ingreso exitoso!", MessageBoxButtons.OK, MessageBoxIcon.Information); 
        this.Hide(); 
        frmmenuadmin frmprincipal = new frmmenuadmin(); 
        frmprincipal.Show(); 
        frmprincipal.lblid.Text = txtusuario.Text; 
       } 


       else 
       { 
        SqlConnection miconexion2 = new SqlConnection(@"Data Source=USER-PC;Initial Catalog=dbpuntodeventa;Integrated Security=True"); 
        miconexion2.Open(); 
        SqlCommand comando = new SqlCommand("select * from usuarios where usuario='" + txtusuario.Text + "'and contraseña='" + txtcontraseña.Text + "'", miconexion2); 
        SqlDataReader ejecutar1 = comando.ExecuteReader(); 


        if (ejecutar1.Read() == true) 
        { 

         MessageBox.Show("Bienvenido Empleado , Ingreso de datos correctos", "Ingreso exitoso!", MessageBoxButtons.OK, MessageBoxIcon.Information); 
         this.Hide(); 
         frmmenu frm2 = new frmmenu(); 
         frm2.Show(); 
         frm2.lblnombre.Text = txtusuario.Text; 

        } 
        else 
        { 
         if (n == 0) 
         { 
          MessageBox.Show("Error,se han agotado los intentos", "AVISO!", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
          Application.Exit(); 
         } 
         MessageBox.Show("Usuario y/o contraseña incorrectos, verifique porfavor", "Error al ingresar datos.", MessageBoxButtons.OK, MessageBoxIcon.Error);       
         this.txtusuario.Clear(); 
         this.txtcontraseña.Clear(); 
         this.txtusuario.Focus(); 
        } 

       } 
      } 
     } 

    } 
    } 

}

對於那些誰不speack西班牙語,usuario意味着用戶和contraseña意味着密碼,現在我需要實現TIPO這意味着鍵入

回答

0

在DB名稱做一個額外的列它像UserType或其他東西。然後,在選擇*之後,只需檢查字段值。

P.S.如果你想要好的設計模式,然後創建另一個ID和TypeName的UserType表,並進行內部連接。但對於初學者來說,這是沒有必要的。

+0

我得到的領域我只是不知道如何實現它的代碼,如果你能告訴我如何將它添加到查詢我會apreciate它 – user36379 2014-10-07 19:01:02

+0

@ user36379 IDK你表的定義是什麼。但是你可以填充一個DataTable,然後在table.Rows上執行foreach,如果(row [UserType] ==「Admin」)//管理員 – Steve 2014-10-07 19:23:51

1
public static bool IsAdministrator() 
{ 
    WindowsIdentity identity = WindowsIdentity.GetCurrent(); 
    WindowsPrincipal principal = new WindowsPrincipal(identity); 
    return principal.IsInRole(WindowsBuiltInRole.Administrator); 
} 

試試這個,如果你談論的是Windows用戶,如果你在你的應用程序在談論管理員用戶,你應該在你的數據庫中有列:IsAdmin或類似的東西。

編輯:

您應該來自於數據庫的當前用戶名和密碼在DataTable獲取數據,並檢查標誌字段IsAdmin = 0或IsAdmin = 1。根據結果​​顯示正確的菜單。您還需要使用SqlParameters來防止SqlInjection

下面簡單的代碼如何在DataTable檢索數據:

string connectionString = "Your connection"; 

SqlConnection conn = new SqlConnection(connectionString); 

conn.Open(); 

SqlCommand cmd = new SqlCommand(@"Select * from [User] WHERE [email protected] AND [email protected] AND Deleted=0", connectionString); 

cmd.Parameters.AddWithValue("@UserName", userName.Text); 
cmd.Parameters.AddWithValue("@Password", password.Text); 

DataSet dst = new DataSet(); 
string tableName = "Your table Name"; 

using(SqlDataAdapter adapter = new SqlDataAdapter(cmd)) 
{ 
    adapter.Fill(dst, tableName); 
} 

conn.Close(); 

if(dst.Tables[0].Rows.Count == 0) 
//show error 

if(dst.Tables[0].Rows.Count > 0) 
{ 
    if(Convert.ToInt32(dst.Tables[0].Rows[0]["IsAdmin"]) == 1) 
     //load admin menu 
    else 
     // load normal user menu 
} 

刪除的另一個標誌是件好事,在你的代碼。這將表示當前用戶是否被刪除。從數據庫中物理刪除數據是一種很好的做法。

在這種情況下,您將不會在每次SQL連接時寫入數據,而只能查詢SqlCommands。我會留下這個來自己計算。

+0

我有一個名爲type的列,裏面有管理員和員工,但我不知道如何包括沒有使用任何對象的列與文本框的用戶 – user36379 2014-10-07 19:07:41

+0

@ user36379檢查更新我不能更具體。 – mybirthname 2014-10-07 19:20:10

相關問題