c#登录注册表单只注册用户详细信息一次
本文关键字:注册 一次 详细信息 用户 登录 注册表 表单 | 更新日期: 2023-09-27 18:14:22
我创建了一个使用md5加密的c#用户注册表单…但是我的问题是我想在"Admin级别"下注册一个用户详细信息,只有一次。
我想要的是当我选择管理员级别并尝试重新注册为另一个用户时,系统可能不允许注册另一个管理员,并显示一个消息框"对不起,管理员已在系统中注册"…
我的代码是........if (textBox1.Text != "" && textBox2.Text != "" && comboBox1.Text != "" && (comboBox1.Text == "Administrator" || comboBox1.Text == "Employee" || comboBox1.Text == "Developer"))
{
connection.Open();
string TypeUser;
int level = Convert.ToInt32(0);
TypeUser = comboBox1.Text;
if (TypeUser == "Administrator")
{
level = 1;
}
else if (TypeUser == "Employee")
{
level = 2;
}
else if (TypeUser == "Developer")
{
level = 3;
}
MySqlDataReader dr;
MySqlCommand cmd;
string sql = "INSERT INTO users(name,password,level) VALUES('" + textBox1.Text + "',MD5('" + textBox2.Text + "'),'" + level + "')";
cmd = new MySqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.Connection = connection;
dr = cmd.ExecuteReader();
MessageBox.Show("Registration Success !","Success",MessageBoxButtons.OK,MessageBoxIcon.Information);
connection.Close();
cmd.Dispose();
}
else
{
MessageBox.Show("All Fields must be required / something is wrong", "error", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
}
您需要检查数据库中是否已经存在级别为1的记录。你可以写一个这样的方法你应该在插入用户之前调用它。
public bool CheckForExistingAdmin(int level)
{
if(level != 1)
return false;
int count = 0;
using(MySqlConnection conn = new MySqlConnection ("ConnectionString")
{
conn.Open();
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandText = @"SELECT Count(ID) FROM Users WHERE Level = 1";
count = (int)cmd.ExecuteScalar();
}
return count > 0 ? true : false;
}
之后的代码:
if(CheckForExistingAdmin)
{
//show error message;
return; //exit from the method;
}
MySqlDataReader dr;
MySqlCommand cmd;
//other stuff.
你的代码有一些基本的问题。首先,您对sql注入是开放的。您应该使用参数化查询来进行保护。就像我在我的例子中显示的,当你写连接到db时,也使用使用块或try/catch/finally。有可能出现异常,在这种情况下,您的连接将保持打开。