从SQLConnection对象调用BeginTransaction和从SqlCommand对象调用BeginTransaction有什么区别吗?

3

我有一个来自C#的SQL语句,用于将购买信息插入一个表(SQL Server 2005),并将购买商品(多个)插入另一个表中。

我想通过调用BeginTransaction来运行这两个插入语句以进行事务处理。

我注意到可以从SqlConnection对象或SqlCommand对象中执行。我的直觉告诉我应该通过连接对象执行,因为我将为每个插入使用1个命令对象,但它们共享同一个连接。

我是正确的吗?

总的来说,这两者之间有什么区别吗?


1
我不确定我理解你如何建议在SqlCommand上启动事务。你能给一个代码示例吗? - Joachim Isaksson
请看:http://www.codeproject.com/Articles/10223/Using-Transactions-in-ADO-NET - Sean
1个回答

7
从连接中创建一个 SqlTransaction(BeginTransaction),然后将其传递到每个 SqlCommand 对象中。有一个构造函数以 SqlTransaction 作为参数或者只需设置 SqlCommand.Transaction 属性即可。
类似于:(抱歉,iPad 上的格式很难处理)
var tran = db.BeginTransaction();
try {

  SqlCommand com = new SqlCommand(...., tran);
  // or.  
  com.Transaction=tran;

  // do the work, eg execute SQL 

  // finally commit the changes
  tran.Commit();
}
catch
{
  tran.Rollback();
}

变量tran在catch中不可用,应将其放在try之外。 - Vado

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接