确保插入多个表

时间:2016-07-05 04:29:45

标签: c# sql-server transactions

我在SqlServer中有两个表“EnrolledSubjects”和“StudentAccounts”。显然,登记的科目应该转到前者,而他们的费用应该转到后者。我对两个表使用简单的Insert语句,但问题是,如何确保当其中一个表在插入时失败时,另一个表也不能插入任何内容。我可以像这样使用try-catch:

try
{
  insert statement to EnrolledSubjects table;
  insert statement to StudentAccounts table;
} catch(Exception ex) {
  get the error here
}

但是,如果插入到EnrolledSubjects时没有错误,但插入StudentAccounts时出错?那意味着我需要删除插入到EnrolledSubjects表中的任何内容 您能告诉我如何根据我的规范实现这一权利。恩。你。

2 个答案:

答案 0 :(得分:4)

正如@TimBiegeleisen在评论中提到的那样,您需要TransactionScope

try
{
    using (var scope = new TransactionScope())
    {
        // insert statement to EnrolledSubjects table;
        // insert statement to StudentAccounts table;
        scope.Complete(); // don't forget this!
    }
}
catch(Exception ex)
{
    // get error here
}

如果尚未调用scope.Complete(),则事务将回滚。如果您的项目尚未提供System.Transactions,则需要添加对NSString *imgUrl1 = @"http://i.stack.imgur.com/SWblQ.png"; NSString *imgUrl2 = @"http://i.stack.imgur.com/fcdTa.png"; UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(0, 0,100, 100)]; btn.center = self.view.center; [btn sd_setBackgroundImageWithURL:[NSURL URLWithString:imgUrl1] forState:UIControlStateNormal]; [btn sd_setBackgroundImageWithURL:[NSURL URLWithString:imgUrl2] forState:UIControlStateSelected]; [btn addTarget:self action:@selector(btnSelect:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:btn]; - (void)btnSelect:(UIButton *)select{ select.selected = !select.selected; } 的引用。

答案 1 :(得分:0)

首先检查第一个插入语句是否成功插入 如果它成功,那么如果第二个插入则进行另一次插入 也成功插入,而不是为两者提交。

如果他们提出错误而不是回滚交易。