gpt4 book ai didi

c# - 一次性在多个表中添加数据,并在它们之间设置外键约束

转载 作者:行者123 更新时间:2023-11-29 12:27:47 27 4
gpt4 key购买 nike

我有一个问题,我想在一个事务中对不同的表进行插入操作。这样,如果事务失败,任何表都不会受到不一致数据的污染。

这个问题还有另一个约束。表2与表1的主键(auto_increment)有外键关系。因此,当我在 Table-1 和 Table-2 中添加新条目时,我需要在新的 Table-2 条目中添加 Table-1 的新主键,该条目是同一事务的一部分。

我正在使用 MYSQLDataAdaptor 来填充 SB。

问题陈述有点棘手,如果我们需要更多说明,请告诉我。

提前致谢!!

最佳答案

我已经使用事务概念解决了这个问题。

 MySqlDataAdapter [] all_adapters = new MySqlDataAdapter[2];
DataTable [] data_tables = new DataTable[2];

for (int i = 0; i < 2; i++ )
{
all_adapters[i] = new MySqlDataAdapter(query[i], connection);
MySqlCommandBuilder cb = new MySqlCommandBuilder(all_adapters[i]);
all_adapters[i].InsertCommand = cb.GetInsertCommand();

data_tables[i] = new DataTable();
all_adapters[i].Fill(data_tables[i]);
}

MySqlTransaction transaction = connection.BeginTransaction();

try
{
for (int i = 0; i < 2; i++ )
{
all_adapters[i].InsertCommand.Transaction = transaction;

if (i == 0)
{
... Add entry in table-1

// Fetch new auto_increment primary key of table-1
string new_query = "SELECT LAST_INSERT_ID();";
MySqlCommand cmd = new MySqlCommand(new_query, connection);
int primary_id_table1 = Convert.ToInt32(cmd.ExecuteScalar());
}
else
{
... Add entry in table-2.
Use primary_id_table1 to populate the foreign key in table-2
}
}

transaction.Commit();
}
catch (Exception e)
{
transaction.Rollback();
}

这将确保数据库中的两个表同时更新,或者随着事务效果回滚,任何表都不会更新。这将有助于维护数据库的一致性。因此,维护给定事务中的 ACID 属性。

关于c# - 一次性在多个表中添加数据,并在它们之间设置外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28043728/

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