我正在製作一個健身房管理系統,並且在我的表格中使用外鍵。一切都可以正常使用,但在我加入外鍵我收到以下錯誤:添加新記錄時出現外鍵錯誤
SQLException was Unhandled
The INSERT statement conflicted with the FOREIGN KEY constraint
"FK_member_info_instructor_info". The conflict occurred in database "D:\GYM MANAGEMENT
SYSTEM\GYM MANAGEMENT SYSTEM\BIN\DEBUG\GMSDATABASE.MDF", table "dbo.instructor_info",
column 'InstructorID'.
The statement has been terminated.
此錯誤指向此代碼:
public void UpdateDatabase(System.Data.DataSet ds)
{
System.Data.SqlClient.SqlCommandBuilder cb = new
System.Data.SqlClient.SqlCommandBuilder(da_1);
cb.DataAdapter.Update(ds.Tables[0]);
}
上面的代碼是在我的數據庫集合類是如下:
class GMSDConnectionClass
{
System.Data.SqlClient.SqlDataAdapter da_1;
System.Data.SqlClient.SqlConnection con;
public string sql_string;
public string strCon;
public string Sql
{
set { sql_string = value; }
}
public string connection_string
{
set { strCon = value; }
}
public System.Data.DataSet GetConnection
{
get { return MyDataSet(); }
}
public System.Data.DataSet MyDataSet()
{
con = new System.Data.SqlClient.SqlConnection(strCon);
con.Open();
da_1 = new System.Data.SqlClient.SqlDataAdapter(sql_string, con);
System.Data.DataSet dat_set = new System.Data.DataSet();
da_1.Fill(dat_set, "Table_data_1");
con.Close();
return dat_set;
}
public void UpdateDatabase(System.Data.DataSet ds)
{
System.Data.SqlClient.SqlCommandBuilder cb = new
System.Data.SqlClient.SqlCommandBuilder(da_1);
cb.DataAdapter.Update(ds.Tables[0]);
}
}
這是我的表正在使用時引發錯誤:
instructor_info表:
CREATE TABLE [dbo].[instructor_info] (
[InstructorID] INT IDENTITY (1, 1) NOT NULL,
[instructor] NVARCHAR (50) NOT NULL,
[father_name] NVARCHAR (50) NULL,
[age] NCHAR (10) NULL,
[address] NVARCHAR (MAX) NULL,
[contact] NVARCHAR (50) NULL,
[height] NCHAR (10) NULL,
[weight] NCHAR (10) NULL,
[chest] NCHAR (10) NULL,
[triceps_biceps] NCHAR (10) NULL,
[waist] NCHAR (10) NULL,
[shoulders] NCHAR (10) NULL,
[thighs] NCHAR (10) NULL,
[calves] NCHAR (10) NULL,
[memberID] INT NULL,
[date_of_admission] DATE NULL,
[photo] IMAGE NULL,
PRIMARY KEY CLUSTERED ([InstructorID] ASC),
CONSTRAINT [FK_instructor_info_member_info] FOREIGN KEY ([memberID]) REFERENCES [dbo].
[member_info] ([memberID])
);
member_info表:
CREATE TABLE [dbo].[member_info] (
[memberID] INT IDENTITY (1, 1) NOT NULL,
[memberName] NVARCHAR (50) NULL,
[father_name] NVARCHAR (50) NULL,
[age] NCHAR (10) NULL,
[address] NVARCHAR (50) NULL,
[contact] NVARCHAR (50) NULL,
[height] NVARCHAR (50) NULL,
[weight] NVARCHAR (50) NULL,
[chest] NVARCHAR (50) NULL,
[triceps_biceps] NVARCHAR (50) NULL,
[waist] NVARCHAR (50) NULL,
[shoulders] NVARCHAR (50) NULL,
[thighs] NVARCHAR (50) NULL,
[calves] NVARCHAR (50) NULL,
[instructorID] INT NULL,
[date_of_admission] DATE NULL,
[photo] IMAGE NULL,
PRIMARY KEY CLUSTERED ([memberID] ASC),
CONSTRAINT [FK_member_info_instructor_info] FOREIGN KEY ([instructorID]) REFERENCES
[dbo].[instructor_info] ([InstructorID])
);
這是我對我的形式保存按鈕代碼:
private void saveBtn_Click(object sender, EventArgs e)
{
DataRow row = memberDataS.Tables[0].NewRow();
row[0] = maxRowsMember + 1;
row[1] = memberName.Text;
row[2] = fatherName.Text;
row[3] = age.Text;
row[4] = address.Text;
row[5] = contact.Text;
row[6] = height.Text;
row[7] = weight.Text;
row[8] = chest.Text;
row[9] = tricepBicep.Text;
row[10] = waist.Text;
row[11] = shoulders.Text;
row[12] = thighs.Text;
row[13] = calves.Text;
row[14] = int.Parse(instructor.Text);
row[15] = dateTimePicker1.Text;
memberDataS.Tables[0].Rows.Add(row);
memberString.UpdateDatabase(memberDataS);
maxRowsMember += 1;
inc = maxRowsMember - 1;
MessageBox.Show("Database updated");
cancelBtn.Enabled = false;
saveBtn.Enabled = false;
addNewMemberBtn.Enabled = true;
}
所有幫助將不勝感激。非常感謝。
只是爲了確保:當您調用'saveBtn_click()'時,您是否已檢查過'instructor_info'中是否存在與'instructor.text'匹配的相應ID。你記錄了分配給'row [14]'的值嗎? – David
@David instructor_info表爲空。我必須填寫它以使其工作嗎? –
是的,外鍵約束檢查並確保您只插入具有相應條目外表的數據。 – David