我无法弄清楚要进行正确的Google搜索的措辞。我正在用C#编写一个程序,它在SQL Server中一次(按顺序)写入多个表。我现在设置的方式是我创建了不同的方法,可以为每个表插入。它们都使用sql命令/参数结构。然后当点击提交时,所有这些方法都被调用并做那些事情。我是否应该使用不同的方式插入所有表,如商店程序?我真正的主要问题 - 如果一个失败,如何使所有插入失败。现在它有一个令人遗憾的问题,即继续进行,无法撤消。
答案 0 :(得分:2)
您应该将INSERT封装到事务中。执行此操作的不好方法是在ADO.NET中使用TransactionScope
,最好的方法是在内部编写存储过程并BEGIN
和COMMIT
/ ROLLBACK
你处理。您不希望在维护事务时从客户端到服务器来回转换,因为您将损害concurreny和性能(在事务结束之前插入的资源会保留独占锁定。)
以下是T-SQL事务管理的伪代码示例:
BEGIN TRAN
BEGIN TRY
INSERT
INSERT
COMMIT TRAN
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE() -- you can use THROW in SQL Server 2012 to retrhrow the error
ROLLBACK
END CATCH
答案 1 :(得分:1)
您正在寻找数据库交易。 它们可以在SQL或C#中完成。
仔细查看this问题!
答案 2 :(得分:0)
例如,您可以使用Transactions查找IDbTransaction或TransactionScope。 在Stored Procs中,让服务器决定是否需要回滚会更容易。(FailureCode) 是的,使用storedprocs它会更快,因为开销较小。 交易是可能的