[英]Foreign Key conflict on INSERT statement
我正在開發一個WinForm桌面應用程序,供用戶使用SQL Server 2008作為數據庫輸入員工退休數據。
獲取用戶數據一部分的一個表具有對另一個表的引用,該表的記錄是在設計時定義的,添加了外鍵約束以保持一致性。
CREATE TABLE tbCongedo (
ID int IDENTITY(0,1) PRIMARY KEY,
ID_ANAGRAFICA int NOT NULL,
ID_TIPOLOGIA int NOT NULL,
DECORRENZA datetime NOT NULL,
PROT_NUM nvarchar(7) NOT NULL,
PROT_DATA datetime NOT NULL
);
CREATE TABLE tbTipologia (
ID int IDENTITY(0,1) PRIMARY KEY,
TIPOLOGIA nvarchar(20)
);
INSERT INTO tbTipologia VALUES ('CONGEDO'), ('POSTICIPO'), ('ANTICIPO'), ('REVOCA'), ('DECESSO')
ALTER TABLE tbCongedo
ADD CONSTRAINT FK_tbCongedo_tbTipologia
FOREIGN KEY (ID_TIPOLOGIA) REFERENCES tbTipologia(ID)
然后,我有這段代碼應執行INSERT
語句
public int Insert(SqlConnection Connessione)
{
using (SqlCommand Comando = new SqlCommand("INSERT INTO tbCongedo VALUES (@ID_ANAGRAFICA, @PROT_NUM, @PROT_DATA, @DECORRENZA, @ID_TIPOLOGIA); SELECT SCOPE_IDENTITY()", Connessione))
{
Comando.Parameters.AddWithValue("@ID_ANAGRAFICA", ID_ANAGRAFICA);
Comando.Parameters.AddWithValue("@PROT_NUM", PROT_NUM);
Comando.Parameters.AddWithValue("@PROT_DATA", PROT_DATA);
Comando.Parameters.AddWithValue("@DECORRENZA", DECORRENZA);
Comando.Parameters.AddWithValue("@ID_TIPOLOGIA", ID_TIPOLOGIA);
ID = Int32.Parse(Comando.ExecuteScalar().ToString());
}
return ID;
}
但是我得到了這個SqlException:
INSERT語句與FOREIGN KEY約束“ FK_tbCongedo_tbTipologia”沖突。 數據庫“ Scadenziario_ver4_TEST”的表“ dbo.tbTipologia”的“ ID”列中發生了沖突
這些是我試圖插入表中的數據:
ID_ANAGRAFICA = 2
ID_TIPOLOGIA = 0
PROT_DATA = {16/03/2018 00:00:00}
DECORRENZA = {16/03/2018 00:00:00}
PROT_NUM = 123456
有趣的是,當我嘗試通過SQL Server Management Studio手動插入那些相同的數據時,根本沒有出現錯誤。
謝謝。-
嘗試指定字段: (col_name1, col_name2, ...)
。
否則,可能無法像您希望的那樣應用值。 變量名不會自動與相似名稱的列匹配。
像這樣:
... new SqlCommand
(
"INSERT INTO tbCongedo " +
" (ID_ANAGRAFICA, PROT_NUM, PROT_DATA, DECORRENZA, ID_TIPOLOGIA) "
"VALUES (@ID_ANAGRAFICA, @PROT_NUM, @PROT_DATA, @DECORRENZA, @ID_TIPOLOGIA); " +
"SELECT SCOPE_IDENTITY()", Connessione
)
...
我認為問題不在於數據,而在於INSERT
語句本身。 您試圖使用錯誤的順序將值插入錯誤的列。 要解決此問題,您應該在INSERT
語句中指定列或更正值的順序。 在你的情況下,查詢將嘗試插入值@PROT_NUM
在ID_TIPOLOGIA
代替。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.