我正在开发一个WinForm桌面应用程序,供用户使用SQL Server 2008作为DB输入员工退休数据。
其中一个获取用户数据的表有一个对另一个表的引用,该表的记录是在设计时定义的,为了一致性添加了一个外键约束。
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",table" 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手动插入相同的数据时,我没有给出任何错误。
感谢.-
答案 0 :(得分:3)
尝试指定字段:(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
)
...
答案 1 :(得分:2)
我认为问题不是在数据中,而是在INSERT
语句本身。您正尝试使用错误的顺序将值插入错误的列。要解决此问题,您应该在INSERT
语句中指定列或更正值的顺序。在您的情况下,查询会尝试在@PROT_NUM
中插入ID_TIPOLOGIA
的值。