在我的应用程序中,我有一个表单,我只需单击一下按钮就可以执行多个数据库事务 即 当我点击按钮
查询1>>>将指定值插入指定表
查询2.>>选择查询以获取上次输入的指定的主键....即上述插入查询插入的自动编号
查询3>>使用上面的主键recvd将数据插入到另一个表中
查询4。>>使用主键
更新另一个表如果任何查询失败或发生任何异常,则其他查询不起作用
现在我尝试使用try catch并在发生异常时删除prevoius插入...
有什么好主意,因为我是sql server 2008的新手
答案 0 :(得分:1)
正如其他人所评论的那样,将所有这些操作包装到一个事务中,而不是为每个事务使用单独的事务。事务ACID属性的“原子性”部分将确保所有操作都不会成功,也不会有任何部分结果。
如果您使用的是ADO.NET,那么您将使用BeginTransaction和Commit。
顺便说一句,您不应该执行第2步 - 如果并发客户端在步骤1之后但在您有机会执行第2步之前插入行(并提交),该怎么办?你会得到错误的PK。最好directly get在步骤1中生成的PK。