gpt4 book ai didi

c# - 如何在这个 GridView 中删除员工及其培训记录?

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:26 25 4
gpt4 key购买 nike

我是一名新的 ASP.NET 开发人员,正在尝试使用 GridView 控件来显示数据库中员工表中的所有员工。我现在正在删除 GridView 中任何员工的全部信息。我面临以下问题,我不知道为什么:

仅供引用,我有以下数据库设计:

Employee Table: Username, Name, JobTitle, BadgeNo, IsActive, DivisionCode
Divisions Table: SapCode, DivisionShortcut
Groups Table: GroupID, GroupName
Courses Table: CourseID, CourseName, GroupID
Employee_Courses Table: EmployeeID, CourseID

(IsActive 就像一个标志(位数据类型),用于指示员工是否在分配中)

现在,我希望管理员能够删除员工,并删除 Employee_Courses 表中存在的所有培训信息。 怎么做?

我的删除查询:

DELETE employee where dbo.employee.Username = @Username

删除一条记录的后台代码如下:

protected void DeleteRecord(object sender, GridViewDeleteEventArgs e) 
{
string networkID = GridView1.DataKeys[e.RowIndex].Value.ToString();

string connString = ConfigurationManager.ConnectionStrings["UsersInfoDBConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(connString);
string deleteCommand = "DELETE employee where dbo.employee.Username = " + networkID;
SqlCommand cmd = new SqlCommand(deleteCommand, conn);
cmd.Parameters.AddWithValue("@username", networkID);
try
{
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
catch (SqlException se)
{
throw se;
}
finally
{
cmd.Dispose();
conn.Close();
conn.Dispose();
}
GridView1.DataBind();
}

它适用于没有培训记录的员工,但它不适用于任何有培训记录的员工,它会给我以下错误:

The DELETE statement conflicted with the REFERENCE constraint "FK_employee_courses_employee". The conflict occurred in database "UsersInfoDB", table "dbo.employee_courses", column 'employeeId'. The statement has been terminated.

那么如何解决这个问题呢?

更新:

仅供引用,Username 是 Employee 表中的主键,而 EmployeeID 是该主键的外键。那么,如何从 Employee 表中删除该员工及其所有其他表中的所有信息。

最佳答案

您的删除查询中有一个错误,您缺少表名 Employee_Courses你的查询应该是这样的

从 Employee_Courses 中删除员工,其中 dbo.employee.Username = @Username

错误出现是因为你有一个外键关系。先删除子表的数据,再删除父表的数据。 UsersInfoDB与Employee_Courses表有关系,先删除UsersInfoDB中的记录,然后SQL SErver会允许你从父表中删除一条记录。

可能的解决方案。转到您的表格设计,右键单击表格,将出现一个菜单,选择Relationships,将打开一个名为Foreign Key RelationShips的弹出窗口,从左侧选择所需的键 Pane ,然后从右侧选择更新和删除规范并指定删除规则。对于 DELETE,您应该将其设置为 CASCADE。设置删除规则后,您无需手动从子表中删除记录,现在您的代码将起作用,每当您从 Employee_Courses 表中删除记录时,它也会自动从子表 (UserInfoDB) 中删除。

关于c# - 如何在这个 GridView 中删除员工及其培训记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11407777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com