我正在开发一个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手动插入那些相同的数据时,根本没有出现错误。

谢谢。-

最佳答案

我认为问题不在于数据,而在于INSERT语句本身。您试图使用错误的顺序将值插入错误的列。要解决此问题,您应该在INSERT语句中指定列或更正值的顺序。在您的情况下,查询将尝试在@PROT_NUM中插入ID_TIPOLOGIA的值。

08-05 09:59