在带有事务的c#中,将记录插入相互依赖的多个表中

本文关键字:依赖 插入 事务 记录 | 更新日期: 2023-09-27 18:28:01

我是C#的新手

我有两张桌子:员工表(E_id(PK)、first_name、Last_name、地址、DOB、电子邮件)BankDetail表(Id(PK)、bank_name、Acc_no、E_Id(FK))

两个PK都是自动递增的。

现在的问题是,我需要同时插入这两个表的数据。但如果员工Id(E-Id)在递增期间生成,那么我将如何在同一操作中将该值输入BankDetails E_Id。为了数据库的完整性,我还需要在这里使用Transaction。

有人能简单地解释一下吗?提前谢谢。

在带有事务的c#中,将记录插入相互依赖的多个表中

我认为实现这一点的最佳方法是将操作封装在存储过程中。您可以使用SCOPE_IDENTITY获取先前添加的记录的ID,并使用TRY-CATCH确保执行两个插入查询或根本不执行。

BEGIN TRANSACTION;
BEGIN TRY
   INSERT INTO Employee (first_name, Last_name, Address, DOB, Email)
   VALUES (@fname, @lame, ... etc)
   -- Get the last identity value inserted into an identity column in the same scope
   SET @E_Id = SCOPE_IDENTITY();
   INSERT INTO BankDetail(bank_name, Acc_no, E_id)
   VALUES (@bname, @ano, @E_id)
END TRY
BEGIN CATCH
   IF @@TRANCOUNT > 0
      ROLLBACK TRANSACTION;            
END CATCH;
IF @@TRANCOUNT > 0
    COMMIT TRANSACTION;