如何修复插入方法中的此错误,将不在数据库中的用户插入到其中

本文关键字:插入 数据库 用户 错误 方法 何修复 | 更新日期: 2023-09-27 18:17:04

我正在使用ASP。NET向导控件,用于在显示用户的角色信息后编辑用户的角色。该向导包括三个步骤:

大家好,

  • 第一步:包含一个文本框,管理员将在其中放置用户的用户名
  • 第二步:显示用户的信息
  • 第三步:用于编辑用户角色

因为我正在为公司开发一个内部网web应用程序,管理员不需要知道用户是否在数据库上。所以我想让系统在后台自动检查用户是否在数据库中。如果他在数据库中,将立即为他编辑角色。如果他不在数据库中,他的信息将被添加到系统中,并赋予他一个角色。

protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e)
{
        //If one of the items is selected AND a username exists in the Username session object update the user role
        string username = TextBox1.Text;
        if (!String.IsNullOrEmpty(radio1.SelectedValue) && !String.IsNullOrEmpty(username))
        {
            string connString = "Data Source=localhost''sqlexpress;Initial Catalog=psspdb;Integrated Security=True";
            string insertUserCommand = "INSERT INTO employee (Name, Username, JobTitle, BadgeNo, EmpOrgType, DivisionCode) values (@Name, @Username, @JobTitle, @BadgeNo, @EmpOrgType, @DivisionCode)";
            string cmdText = "SELECT Count(*) FROM employee WHERE Username = '" + username + "'";
            using (SqlConnection conn = new SqlConnection(connString))
            {
                conn.Open();
                // Open DB connection.
                using (SqlCommand cmd = new SqlCommand(cmdText, conn))
                {
                    if ((int)cmd.ExecuteScalar() == 0){
                        //An object from ObjectUser class to get the user information from the secure system and insert them to the database
                        ObjectUser user = new ObjectUser(username,true);
                        SqlCommand cmd2 = new SqlCommand(insertUserCommand, conn);
                        cmd2.Parameters.AddWithValue("@Name", user.Name);
                        cmd2.Parameters.AddWithValue("@Username", username);
                        cmd2.Parameters.AddWithValue("@JobTitle", user.GetProperty("EMP_TITLE"));
                        cmd2.Parameters.AddWithValue("@BadgeNo", user.GetProperty("EMP_BADGE_NUMBER"));
                        cmd2.Parameters.AddWithValue("@EmpOrgType", user.GetProperty("EMP_EMPTYPE"));
                        cmd2.Parameters.AddWithValue("@DivisionCode", user.Org.Division.SapCode);
                    }
                }
            }
            string deleteCommand = "DELETE FROM UserRole where Username=@Username";
            string insertCommand = "INSERT INTO UserRole (RoleID,Username) values(@RoleID,@Username)";
            using (SqlConnection conn = new SqlConnection(connString))
            {
                conn.Open();
                //using (SqlCommand cmd = new SqlCommand(cmdText, conn))
                using (SqlCommand cmd = new SqlCommand(deleteCommand, conn))
                {
                    cmd.Parameters.AddWithValue("@Username", username);
                    cmd.ExecuteNonQuery();
                    //Now the insert
                    cmd.CommandText = insertCommand;
                    cmd.Parameters.Clear(); //need this because still has params from del comm
                    cmd.Parameters.AddWithValue("@RoleID", radio1.SelectedValue);
                    cmd.Parameters.AddWithValue("@Username", username);
                    cmd.ExecuteNonQuery();
                    //infoSpan.InnerText = String.Format("The users role has been updated to - {0}", radio1.SelectedValue);
                    //cmd.ExecuteScalar();
                    //infoSpan.InnerText = String.Format("The users role has been updated to - {0}", radio1.SelectedValue);
                }
            }
            Wizard1.Visible = false;
            wizard.InnerHtml = @"The task has been done successfully. <br /> <a href='UserManagement.aspx'>Edit Another User</a>";
        }

    }

现在对于不在数据库中的用户,当我为他选择一个角色并单击完成按钮时,它应该被添加到数据库中,但在我的情况下,我在浏览器底部得到一个错误,上面写着(页面上的错误),当我点击它时,我得到了以下详细信息:

Sys.WebForms。pagerequestmangerservererroreexception: INSERT语句与FOREIGN KEY约束冲突"FK_UserRole_employee"。冲突发生在数据库"psspdb"中。dbo表"。employee",列"Username"。声明是终止。

我不知道如何修理它。请帮忙好吗?

供参考,数据库的设计如下:

employee table:

Username, Name, JobTitle...

UserRole table:

UserRoleID, Useranme, RoleID

Roles table:

RoleID, RoleName

第一个属性是每个表的主键。

顺便说一句,正如你在上面的问题中看到的,我使用了一个叫做insertUserCommand的东西。这个命令应该足以将用户信息添加到数据库中。所以我不应该有这个冲突。抱歉问了很多,但我是初学者在这个领域。你能告诉我应该怎么处理代码吗?

如何修复插入方法中的此错误,将不在数据库中的用户插入到其中

You are not executing insertUserCommand.After adding parameter that means after
cmd2.Parameters.AddWithValue("@DivisionCode", user.Org.Division.SapCode);
write cmd2.ExecuteNonQuery().
As you are not executing it this entry will not add to table

错误,因为您正在用户角色表中添加用户名,而该用户名不存在于员工表中。在向Userrole表中添加用户名之前,请确保该记录必须在employee表中,否则外键约束将失效。