我刚刚使用SQL在C#中完成了一个数据库。在我的数据库中,我在为一个人创建帐户时添加数据。我添加了用户名,密码,名字和姓氏以及类型(客户端或管理员)。
当我登录时,我所做的就是检查用户名和密码是否正确。这是代码。
private void button1_Click(object sender, EventArgs e)
{
con = new SqlConnection(@"Data Source=MARIA-PC;Initial Catalog=Account;Integrated Security=True");
SqlCommand cmd1 = new SqlCommand("SELECT * FROM [dbo].[Cont] WHERE Username = @Username and Password = @Password;", con);
cmd1.Parameters.AddWithValue("@Username", this.Username.Text);
cmd1.Parameters.AddWithValue("@Password", this.Password.Text);
cmd1.Connection = con;
con.Open();
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd1);
da.Fill(ds);
con.Close();
bool loginSuccessful = ((ds.Tables.Count > 0) && (ds.Tables[0].Rows.Count > 0));
if (loginSuccessful )
{
MessageBox.Show("You logged in successfully!","Success!");
this.Visible = false;
f3.ShowDialog();
this.Visible = true;
}
else
{
MessageBox.Show("Invalid username or password!", "Error!");
}
}
接下来我要做的是检查此用户名和密码是否适用于客户端或管理员。如果管理员要在表单中输入,或者是否要客户以另一种形式输入。
我该怎么办?我需要一些想法。
答案 0 :(得分:1)
您正在从数据库表中检索完整行,因此您还检索了包含usertype的列。您只需在验证登录后进行检查
这里有一个假设a" 1"值意味着管理员," 2"表示普通用户(当然您可以将这些常量更改为实际值)
if (loginSuccessful )
{
string userType = ds.Tables[0].Rows[0]["Type"].ToString();
if(userType == "1")
{
// User is an administrator, go to admin form
}
else if(userType == "2")
{
// User is a normal user, go to user form
}
else
{
// Unexpected value, error message?
}
}
附注,在使用参数时,数据库/代码逻辑中仍存在安全问题。您似乎将密码存储为纯文本。这可以让任何查看数据库表的人知道您的用户密码。密码绝不应以纯文本格式存储。该网站包含许多关于如何在数据库中正确存储密码的答案
从这里开始: