我正在使用Access db。我需要验证其管理员或用户是否因为我想为他们打开不同的表单。但我找不到办法做到这一点。我使用了一个复选框来注册员工是否是管理员:
private void button2_Click(object sender, EventArgs e)
{
string strincon = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\flavi\Desktop\Pet&Shop.2\PetShop\TelaAbertura\bin\Debug\DatabasePS.mdb;Persist Security Info=True";
string comando = "INSERT INTO Funcionario (Nome, Login, Senha, Email, Cargo, Admin) Values (@Nome, @Login, @Senha, @Email, @Cargo, @Admin) ";
OleDbConnection con = new OleDbConnection(strincon);
OleDbCommand com = new OleDbCommand(comando, con);
com.Parameters.Add("@Nome", OleDbType.VarChar).Value = txtNome.Text;
com.Parameters.Add("@Login", OleDbType.VarChar).Value = txtLogin.Text;
com.Parameters.Add("@Senha", OleDbType.VarChar).Value = txtSenha.Text;
com.Parameters.Add("@Email", OleDbType.VarChar).Value = txtEmail.Text;
com.Parameters.Add("@Cargo", OleDbType.VarChar).Value = txtCargo.Text;
com.Parameters.Add("@Admin", OleDbType.Boolean).Value = checkBox1.Checked;
这工作正常,但在登录表单中没有区别,因为我不知道如何使用登录名和密码验证复选框,所以就像这样。
OleDbDataAdapter da;
DataTable dt = new DataTable();
da = new OleDbDataAdapter("Select * from Funcionario where Login='" + txtLogin.Text + "'and Senha= '" + txtSenha.Text + "'", con); //Senha = Password
da.Fill(dt);
if (dt.Rows.Count > 0)
{
FrmPrincipal frm = new FrmPrincipal();
frm.Show();
this.Visible = false;
}
else
{
MessageBox.Show("Login ou Senha Inválidos", "Ocorreu um Erro de Autenticação", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtLogin.Clear();
txtSenha.Clear();
}
答案 0 :(得分:0)
if (dt.Rows.Count > 0)
{
// you should have one row in the table. check for admin.
if(dt.Rows[0]["Admin"] == true)
{
etc.
如评论中所述,将参数添加到适配器的查询中。 始终使用参数。如果有人试图破解您的数据库,它们将用于“清理”用户输入。