我正在开发一个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
的值。