C# MySQL使用2个外键插入到表中

C# MySQL使用2个外键插入到表中,c#,mysql,database,C#,Mysql,Database,我正在开发一个使用MySQL数据库的C#应用程序。我试图用两个外键插入一个表,但出现错误: 无法添加或更新子行:外键约束失败(thedatabasetblC,约束tblC\u ibfk\u 1外键(ID)引用tblA(ID)在删除时不执行更新级联操作) 表结构是 tblA-ID,col2,col3,col4 tblB-ID,col2,col3,col4 tblC-tblA.ID,tblB.ID,col3,col4,col5 我一直在浏览论坛,在我的一生中,我找不到使它工作的语法 这是我用来连接的

我正在开发一个使用MySQL数据库的C#应用程序。我试图用两个外键插入一个表,但出现错误:

无法添加或更新子行:外键约束失败(
thedatabase
tblC
,约束
tblC\u ibfk\u 1
外键(
ID
)引用
tblA
ID
)在删除时不执行更新级联操作)

表结构是

tblA-ID,col2,col3,col4

tblB-ID,col2,col3,col4

tblC-tblA.ID,tblB.ID,col3,col4,col5

我一直在浏览论坛,在我的一生中,我找不到使它工作的语法

这是我用来连接的。我已确认父表中存在该ID

//Connect to the database
MySqlConnection connection = new MySqlConnection(connectionString);
MySqlCommand cmd;
connection.Open(); 

//Insert new record into database
cmd = connection.CreateCommand();
cmd.CommandText = "INSERT INTO tblC(tblA_ID, tblB_ID, col3, col4, col5) VALUES(@tblA_ID, @tblB_ID, @col3, @col4, @col5);";
cmd.Parameters.AddWithValue("@tblA_ID", tblA_ID);
cmd.Parameters.AddWithValue("@tblB_ID", tblB_ID);
cmd.Parameters.AddWithValue("@col3", col3);
cmd.Parameters.AddWithValue("@col4", col4);
cmd.Parameters.AddWithValue("@col5", col5);

cmd.ExecuteNonQuery();
connection.Close();

您的语法很好,但外键错误表明存在数据问题

发生错误是因为tblA中不存在引用的ID

因此,如果您正在执行以下操作:

插入tblC集合tblA_id=100,tblB_id=101


tblA必须有ID=100的记录,tblB必须有ID=101的记录,否则会发生外键错误。

必须先添加外键记录;在所有插入中使用事务以确保一致性

这是因为MySQL,但SQL Server也不是

与一般的MySQL一样,在插入、删除或更新许多行的SQL语句中,InnoDB逐行检查唯一和外键约束。在执行外键检查时,InnoDB会对其必须查看的子记录或父记录设置共享行级锁InnoDB立即检查外键约束;检查不会延迟到事务提交

(此外,对于代理/自动增量PKs,如何访问尚不存在的ID?)

插入这种关系可以用和以下SQL进行说明:

开始交易;
声明一个_id INT默认值0,
b_id INT默认值为0;
插入tblA(..)值(..)
设置一个_id=LAST_INSERT_id();
插入tblA(..)值(..)
设置b_id=LAST_INSERT_id();
插入tblC(…)值(@a_id,@b_id,…)
犯罪
从客户端执行插入时,必须遵循完全相同的方法。创建外来记录;获取ID,使用依赖记录中的ID

对于“通用”ADO.NET解决方案,可以将ExecuteScalar的结果用于插入(因数据库而异)。如果从MySqlConnector使用
MySqlCommand
,则会显示此命令


使用其他框架和/或ORM时,请遵循其中用于构建对象图和/或确定插入ID的规则。

尝试发布一些代码和错误消息。您正在使用实体框架吗?它是一个web应用程序吗?不是web应用程序,只是一个普通的C#应用程序。该数据库将在以后与本地web应用程序共享(mysql的原因)。您是否尝试手动运行sql?