2014-01-21 48 views
0

我正在製作一個健身房管理系統,並且在我的表格中使用外鍵。一切都可以正常使用,但在我加入外鍵我收到以下錯誤:添加新記錄時出現外鍵錯誤

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; 
    } 

所有幫助將不勝感激。非常感謝。

+1

只是爲了確保:當您調用'saveBtn_click()'時,您是否已檢查過'instructor_info'中是否存在與'instructor.text'匹配的相應ID。你記錄了分配給'row [14]'的值嗎? – David

+0

@David instructor_info表爲空。我必須填寫它以使其工作嗎? –

+1

是的,外鍵約束檢查並確保您只插入具有相應條目外表的數據。 – David

回答

0

我相信,您的錯誤可能會從14列導致:

row[14] = int.Parse(instructor.Text);

如果我對你的代碼的假設是正確的,教師變量包含VARCHAR(50)教練的名字,不是的INT IDENTITY值instructorID。

+0

指導員是我的表單上的文本框,我已經聲明瞭它的指導員,以便我知道成員的指導者標識進入該表單。 –