我有两个表FILM(Id, Title, Director, Year, Category)
和Record(Id, Film_id)
Id
表中的 FILM
用作Film_id
表中Record
的外键。
我想同时在两个表中插入数据。如何使用INSERT构造SQL查询?
using (var connection = new MySqlConnection(constring))
{
connection.Open();
using (var cmdDataBase = connection.CreateCommand())
{
cmdDataBase.CommandText = "INSERT INTO film(Title, Director, Year, Category) VALUES (@Title, @Director, @Year, @Category) ";
cmdDataBase.Parameters.Add(new MySqlParameter("@Title", fm.Title));
cmdDataBase.Parameters.Add(new MySqlParameter("@Director", fm.Director));
cmdDataBase.Parameters.Add(new MySqlParameter("@Year", fm.Year));
cmdDataBase.Parameters.Add(new MySqlParameter("@Category",n));
cmdDataBase.ExecuteNonQuery();
}
}
答案 0 :(得分:2)
您将获得带有output: {
filename: "[name].[hash].js"
}
的最后一个自动生成的ID。然后,您将使用事务,因为您不想插入父记录,如果您也不能插入子记录,那么我知道。
或多或少。您当然应该添加错误处理(LAST_INSERT_ID()
,try
)。
catch
答案 1 :(得分:1)
您需要按顺序执行。首先,将记录添加到主表Film中,然后将其他表添加到Record中。检查以下内容:
INSERT INTO Film(Title, Director, Year, Category)
VALUES('Title', 'DirectorName', 1990, 'Action');
--Assuming ID for Record table is AUTO_INCREMENT column
INSERT INTO Record(Film_id)
VALUES ((SELECT id FROM Film WHERE Title='Title' and Director='Director'));
还可以使用LAST_INSERT_ID():
INSERT INTO Film
...
INSERT INTO Record
...
film_id = LAST_INSERT_ID()
参考:Mysql: How to insert values in a table which has a foreign key
答案 2 :(得分:1)
如果您使用的是MySQL,请尝试在查询末尾添加;return LAST_INSERT_ID();
,并按如下所示添加return参数。
var returnVal = cmdDataBase.Parameters.Add("@ReturnVal", SqlDbType.Int);
returnVal.Direction = ParameterDirection.ReturnValue;
从cmdDataBase.ExecuteNonQuery();
提取returnVal
后的ID
var id = returnParameter.Value;
之后,您可以使用id
进行第二次插入。