繁体   English   中英

c#登录注册表单仅注册用户详细信息1次

[英]c# login registration form registers user details only 1 time

我已经创建了使用md5加密的ac#用户注册表格...但是我的问题是我只想一次在“管理员级别”下注册用户详细信息。

我想要的是当我选择管理员级别并尝试重新注册为另一个用户时,系统可能未授予注册另一个管理员的权限。并显示一个消息框,“抱歉管理员已在系统中注册”。 。

我的代码是.....

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时,也可以使用using块或try / catch / finally。 可能会发生异常,在这种情况下,您的连接将保持打开状态。

您也可以编写单独的模块来连接数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM