SQL INSERT用于多个表

时间:2013-11-15 12:51:36

标签: c# sql sql-server

我无法弄清楚要进行正确的Google搜索的措辞。我正在用C#编写一个程序,它在SQL Server中一次(按顺序)写入多个表。我现在设置的方式是我创建了不同的方法,可以为每个表插入。它们都使用sql命令/参数结构。然后当点击提交时,所有这些方法都被调用并做那些事情。我是否应该使用不同的方式插入所有表,如商店程序?我真正的主要问题 - 如果一个失败,如何使所有插入失败。现在它有一个令人遗憾的问题,即继续进行,无法撤消。

3 个答案:

答案 0 :(得分:2)

您应该将INSERT封装到事务中。执行此操作的不好方法是在ADO.NET中使用TransactionScope,最好的方法是在内部编写存储过程并BEGINCOMMIT / 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它会更快,因为开销较小。 交易是可能的