私は新しいASP.NET開発者であり、GridViewコントロールを使用して、データベースのemployeeテーブルにあるすべての従業員を表示しようとしています。私は現在、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();
}
トレーニングの記録がない従業員にはうまく機能しますが、トレーニングの記録がある従業員には機能せず、次のエラーが発生します。
DELETEステートメントがREFERENCE制約「FK_employee_courses_employee」と競合していました。データベース「UsersInfoDB」、テーブル「dbo.employee_courses」、列「employeeId」で競合が発生しました。ステートメントは終了されました。
では、この問題を解決するにはどうすればよいですか?
アップデート:
参考までに、UsernameはEmployeeテーブルの主キーであり、EmployeeIDはその主キーの外部キーです。では、他のすべてのテーブルにあるすべての情報とともに、Employeeテーブルから従業員を削除するにはどうすればよいですか。