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);
        }

c#登录注册表单只注册用户详细信息一次

您需要检查数据库中是否已经存在级别为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。有可能出现异常,在这种情况下,您的连接将保持打开。