在单个调用中执行的sql命令集被视为在事务下

时间:2016-02-09 21:50:23

标签: c# sql sql-server transactions transactionscope

如果我在单extern int i;内执行一组sql命令,我可以在默认情况下将它们视为交易,或者我应该明确表达交易吗?

SqlCommand.ExecuteReader()模式.NET是否足以使其成为事务性的,以防它不是?

命令批处理的第一部分是基于第二部分中更新的表的值声明表变量。

using(var scope = new TransactionScope) {...}

第二部分是应该更新或插入的项目集

DECLARE @tempTable TABLE (ID int,...)
INSERT INTO @tempTable (ID,...)
SELECT [ID],.. FROM [Table] WHERE ... 

在他们重新连接后,我通过单个电话IF EXISTS(SELECT 1 FROM @tempTable WHERE ID=@id{0}) BEGIN UPDATE [Table] SET ... WHERE ... END ELSE BEGIN INSERT INTO [Table] ([ID], ...) VALUES (@id{0}, ...) END

执行这些操作

进行批处理的原因是我希望尽量减少SQL Server和我的应用程序之间的重复参数传输,因为它们在该批处理范围内是常量。

要求的理由是防止冗余代码并了解SqlCommand.ExecuteQuery()[Table]的来源)中的原始数据是否可能在批量的上次更新/插入片段完成之前发生变化

1 个答案:

答案 0 :(得分:1)

执行SqlCommand不会开始任何交易。

您有两种选择:

  1. 使用" BeginTransaction"从连接并将事务对象传递给SqlCommand
  2. 使用TransactionScope,它使用DTC并允许您管理跨多个dbs的交易
  3. 我会用第二个。