Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在两个选项卡中插入数据?_C#_Mysql_Sql - Fatal编程技术网

C# 如何在两个选项卡中插入数据?

C# 如何在两个选项卡中插入数据?,c#,mysql,sql,C#,Mysql,Sql,我有两个表FILMId,Title,Director,Year,Category和RecordId,Film_id 胶片表中的Id用作记录表中胶片Id的外键 我想在两个表中同时插入数据。如何使用INSERT构造sql查询 using (var connection = new MySqlConnection(constring)) { connection.Open(); using (var cmdDataBase = connection.CreateCommand())

我有两个表FILMId,Title,Director,Year,Category和RecordId,Film_id

胶片表中的Id用作记录表中胶片Id的外键

我想在两个表中同时插入数据。如何使用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();
    }
}

你需要按顺序做。首先,将记录添加到主表胶片,然后添加其他表记录。检查以下内容:

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'));
此外,可以使用最后一个插入ID:

INSERT INTO Film
...

INSERT INTO Record
...
film_id = LAST_INSERT_ID()

Ref:

如果您正在使用MySQL,请尝试添加;返回最后一个插入ID;在最后查询并添加返回参数,如下所示

var returnVal=cmdDataBase.Parameters。Add@ReturnVal,SqlDbType.Int; returnVal.Direction=参数Direction.ReturnValue; 在cmdDataBase.ExecuteNonQuery之后;从returnVal中提取id

var id=returnParameter.Value;
之后,您可以使用id执行第二次插入。

您将使用last_insert_id获得最后一个自动生成的id。然后,您将使用事务,因为如果您不能插入子记录,或者我理解为您不想插入父记录

差不多就是这样。您应该添加错误处理,当然是尝试、捕获

// Start transaction
MySqlTransaction transaction = connection.BeginTransaction();

MySqlCommand command = new MySqlCommand();
command.Connection = connection;
command.Transaction = transaction;

// Parent record
command.CommandText = "INSERT INTO film(Title, Director, Year, Category) VALUES (@Title, @Director, @Year, @Category) ";
command.Parameters.Add(new MySqlParameter("@Title", fm.Title));
command.Parameters.Add(new MySqlParameter("@Director", fm.Director));
command.Parameters.Add(new MySqlParameter("@Year", fm.Year));
command.Parameters.Add(new MySqlParameter("@Category",n));
command.ExecuteNonQuery();

// Child record        
command.CommandText = "INSERT INTO record (Film_id) VALUES (LAST_INSERT_ID())";
command.ExecuteNonQuery();

// Commit inserts
transaction.Commit();

我不明白你的目的是什么。哪两种标签?我在记录表中只看到ID和Film_ID。为什么在两个不同的表中保持相同的值?@ErayBalkanli-似乎他想用外键关系同时填充Film和Record这两个表。因此,他的问题基本上是如何插入与外交关系有关的记录至少我是这样理解的:只需在记录表中添加第二个insert即可。@jdweng但外键如何,那么他如何将表film的id填充到相关表记录的film列中呢?出于好奇,为什么不执行calar;而不是ExecuteOnQuery@我不确定,只是我的喜好。也有细微的差别。ExecuteScalar返回第一行的第一列。因此,我希望用户“选择LAST_INSERT_ID”,而不是返回LAST_INSERT_ID;。我已经很久没有真正自己写SQL了,所以我不太了解自己我的SQL知识比我想承认的要快