gpt4 book ai didi

c# - INSERT 语句的外键冲突

转载 作者:太空宇宙 更新时间:2023-11-03 19:43:36 27 4
gpt4 key购买 nike

我正在开发一个 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:

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_tbCongedo_tbTipologia". The conflict occurred in database "Scadenziario_ver4_TEST", table "dbo.tbTipologia", column '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, ...)

否则,VALUES 可能不会像您希望的那样应用。变量名称不会自动与名称相似的列匹配。

像这样:

... 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
)
...

关于c# - INSERT 语句的外键冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49322004/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com