如何修复插入方法中的此错误,将不在数据库中的用户插入到其中
本文关键字:插入 数据库 用户 错误 方法 何修复 | 更新日期: 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表中,否则外键约束将失效。