C#如何根据用户的角色将用户引导到不同的表单

时间:2015-11-10 23:36:24

标签: c# sql-server forms login

我已将名为Data的SQL数据库连接到visual studio C#中的Windows窗体应用程序,该数据库包含一个名为Login的表。

表格显示如下:

Link to image of my table

以下是数据在我的表格中的显示方式的图像链接,所以基本上我将拥有用户名,密码和角色(我有两种类型的角色,这意味着用户是管理员或客户端):

Image link to the data in my table

我已经创建了一个名为Login的登录表单,用户可以从数据库输入用户名和密码,这些用户名和密码将被带到我称为AdminMenu的表单中。我还制作了一个名为MenuForm的表单,我希望用户在登录时可以将其角色定位为客户端。

问题是我只进行了登录,以便所有用户在登录时都会被定向到AdminMenu,即使他们的角色不是管理员。有人可以调整我的代码,以便具有Client角色的用户在登录时将被定向到MenuForm,而具有Admin角色的用户将被定向到AdminMenu表单。

这是我的登录表单代码:

    private void button2_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void button3_Click(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|Data.mdf;Integrated Security=True");
        SqlDataAdapter sda = new SqlDataAdapter("Select Role from Login Where UserName='" + textBox1.Text + "' and Password='" + textBox2.Text + "'   ",con);
        DataTable dt = new System.Data.DataTable();
        sda.Fill(dt);
        if(dt.Rows.Count == 1)
        {
            this.Hide();
            AdminMenu ss = new AdminMenu();
            ss.Show();

        }

    }

    private void Login_Load(object sender, EventArgs e)
    {

    }
}

}

1 个答案:

答案 0 :(得分:1)

可以说这里没有充分的理由在这里使用DataAdapter,你应该更好地防止注入攻击,你可能想要考虑密码腌制,并且可能需要考虑表格育儿,但根据你的代码,以下内容应该有效:

// ...
if(dt.Rows.Count == 1)
{
    switch (dt.Rows[0]["Role"] as string)
    {
        case "Admin":
        {
            this.Hide();
            AdminMenu ss = new AdminMenu();
            ss.Show();
            break;
        }

        case "Client":
        {
            this.Hide();
            MenuForm mf = new MenuForm();
            mf.Show();
            break;
        }

        default:
        {
            // ... handle unexpected roles here...
            break;
        }
    }
}

否则你可以在没有适配器的情况下执行命令:

var cmd = conn.CreateCommand();
cmd.CommandText = "Select Role from Login Where UserName=@user and Password=@password";
var up = cmd.CreateParameter();
up.ParameterName="@user";
up.Value = textBox1.Text;
cmd.Parameters.Add(up);
var pp = cmd.CreateParameter();
pp.ParameterName="@password";
pp.Value = textBox2.Text;
cmd.Parameters.Add(pp);

var role = cmd.ExecuteScalar() as string;
// further processing... - role will be null if user not found