簡體   English   中英

INSERT語句上的外鍵沖突

[英]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_NUMID_TIPOLOGIA代替。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM