2013-03-05 133 views
0

INSERT語句與FOREIGN KEY約束FK_Kupovina_Kupac衝突。衝突發生在數據庫OnlineApoteka,表dbo.Kupac,列'ID'。 該聲明已被終止。SqlException INSERT語句與FOREIGN KEY約束衝突

我真的很困惑我不知道爲什麼我們不允許?我在前面報告了一個錯誤; ?

public static void Kupi(long lekID, int kolicina, double cena, long nacinIsporukeID, string korisnickoIme) 
{ 
    SqlConnection con = new SqlConnection(); 
    try 
    { 
     con.ConnectionString = ConfigurationManager.ConnectionStrings["OnlineApotekaConnectionString"].ConnectionString; 
     con.Open(); 

     string updateLager = @" 
     UPDATE Lager 
     SET [email protected] 
     WHERE [email protected]"; 

     SqlCommand cmd = new SqlCommand(updateLager, con); 
     cmd.Parameters.AddWithValue("@LekID", lekID); 
     cmd.Parameters.AddWithValue("@Kolicina", kolicina); 

     cmd.ExecuteNonQuery(); 

     string [email protected]" 
      INSERT INTO Kupovina (KupacID, LekID, Datum, Kolicina, Cena, NacinIsporukeID) 
      VALUES (@KupacID, @LekID, @Datum, @Kolicina, @Cena, @NacinIsporukeID)"; 

     cmd = new SqlCommand(insertIntoKupovina, con); 
     cmd.Parameters.AddWithValue("@KupacID", KupacAdapter.GetID(korisnickoIme)); 
     cmd.Parameters.AddWithValue("@LekID", lekID); 
     cmd.Parameters.AddWithValue("@Datum", DateTime.Now.Date); 
     cmd.Parameters.AddWithValue("@Kolicina", kolicina); 
     cmd.Parameters.AddWithValue("@Cena", cena); 
     cmd.Parameters.AddWithValue("@NacinIsporukeID", nacinIsporukeID); 

     cmd.ExecuteNonQuery(); 

    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
    finally 
    { 
     con.Close(); 
    } 
} 

我有一個按鈕Buy的例行事件。 當您單擊Kupi,應該從表拉格冊中刪除,並放置在Kupac Kupovina

protected void kupiButton_Click(object sender, EventArgs e) 
{ 
    KupovinaAdapter.Kupi(Convert.ToInt64(kupovinaGreedView.SelectedDataKey["LekID"].ToString()), 
     Convert.ToInt32(kolicinaTextBox.Text), 
     Convert.ToInt64(kupovinaGreedView.SelectedDataKey["Cena"].ToString()), 
     Convert.ToInt64(nacinIsporukeDropDownList.SelectedValue), 
     User.Identity.Name); 
} 

protected void kupovinaGreedView_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (!String.IsNullOrEmpty(kupovinaGreedView.SelectedDataKey["Lek"].ToString())) 
    { 
     LekLabel.Text = kupovinaGreedView.SelectedDataKey["Lek"].ToString(); 
    } 

    if (!String.IsNullOrEmpty(kupovinaGreedView.SelectedDataKey["Kolicina"].ToString())) 
    { 
     kolicinaValidator.MaximumValue = kupovinaGreedView.SelectedDataKey["Kolicina"].ToString(); 
    } 
+0

請澄清你的問題。 '我不知道爲什麼我們不允許?我在前面報告了一個錯誤; ?意思?另外,請閱讀「與FOREIGN KEY約束衝突的INSERT語句」的含義,並查看它是否可以解釋代碼中的問題。 – 2013-03-05 16:08:58

+0

我想* OP想知道爲什麼異常仍然被提出,而不是隻是忽略... – 2013-03-05 16:11:20

回答

0

Kupac表中沒有該表中KupacID值,你試圖插入Kupovina

Kupac表中的列KupacID是主鍵,而在Kupovina表中的列KupacID是外鍵指回主鍵

閱讀Foreign Keys

2

您收到錯誤的原因是因爲如何定義數據庫模式。特別地,表Kupac用於與表Kupovina的關係,使得Kupovina中的KupacID必須與Kupac表中的ID字段的值匹配。

因此,您不能使用Kupac表中不存在的KupacID將記錄插入到Kupovina表中 - 這是外鍵約束違規。

你有兩個選擇:

  1. 請務必先插入一條記錄到Kupac表
  2. 從數據庫架構刪除外鍵約束如果讓企業感覺

但是,您應該檢查KupacAdapter.GetID(korisnickoIme)的輸出,該值應該是KupacID的值。如果由於某種原因該方法沒有返回一個有效的ID(Kupovina表中的一個),插入將失敗,如上所述。

如果你想知道爲什麼異常不是開始「處理」比那是因爲你的catch塊中的代碼。你基本上正在拋出異常並重新拋出,這是毫無意義的。你還不如干脆不都有一個catch塊..

try { 
    // ... 
} 
catch (Exception ex) { 
    throw ex; // <--- this just re-throws the same exception that was caught! 
} 
finally { 

} 

是,在大多數情況下,幾乎等同於:

try { 
    // ... 
}  
finally { 

} 

的區別只在如何堆棧跟蹤的多隨着例外而被保留,但是例外仍然冒出來。

+0

這些是表格Kupac和Kupovina行:表Kupac ID JMBG Ime Prezime Adresa KorisnickoIme電話電子郵件表Kupac FK_Kupovina_Kupac和表Kupovina ID KupacID LekID Datum Kolicina Cena NacinIsporukeID – user1798078 2013-03-05 16:30:40

+0

準確地說你的問題是什麼?我的回答對你有幫助嗎? – 2013-03-05 16:43:56

+0

INSERT語句與FOREIGN KEY約束「FK_Kupovina_Kupac」衝突。衝突發生在數據庫「OnlineApoteka」,表「dbo.Kupac」,列'ID'。 該聲明已被終止。我檢查了所有來自論壇的答案正確的問題是如何解決問題,當我連接所有不知道我在哪裏錯了? – user1798078 2013-03-05 17:00:52

0

是的,您正在通過catch (Exception ex)發現重要違規行爲 - 但是您會在那裏重新拋出Exception。

在調用例程中是否有錯誤處理程序?

throw ex - 不「處理」的錯誤 - 它只是提出另一項(雖然,同樣的一個在這種情況下 - 這已經陷入了一個)

如果你期待這特定錯誤然後你應該趕上catch (SqlException ex)這個特定的錯誤 - 然後檢查這個特定的錯誤。如果它是而不是這個錯誤然後throw ex;備份調用堆棧...如果它這個錯誤,那麼你可以忽略(但最好避免這種INSERT在第一位... )

+0

我沒有頭常規錯誤。當你點擊窗體上的Kupi按鈕需要發生購買。我有一個常規事件的按鈕Kupi – user1798078 2013-03-05 16:17:52

相關問題