2012-02-18 66 views
2

所以我有这个从C#的SQL插入购买信息到一个表(SQL Server 2005),并购买项目(多)到另一个表。从SQLConnection对象或从SqlCommand对象调用BeginTransaction是否有区别?

我想通过调用BeginTransaction在事务中运行2个插入语句。

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

我对不对?

一般情况下两者有差别吗?

+1

我不知道我理解你的建议中SqlCommand开始交易。你能给出一个代码示例吗? – 2012-02-18 08:43:10

+0

请看看:[http://www.codeproject.com/Articles/10223/Using-Transactions-in-ADO-NET](http://www.codeproject.com/Articles/10223/Using-Transactions- in-ADO-NET) – Sean 2012-02-18 08:43:19

回答

3

从连接(BeginTransaction)创建一个SqlTransaction,然后将其传递给每个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(); 
} 
+0

变量tran在catch中不可用,你应该把它放在try之外。 – Vado 2015-11-13 05:43:33

+0

@Vado :)谢谢,显然未经测试 – sambomartin 2015-11-16 22:07:27

相关问题