2011-08-25 183 views
1

我想使用MySQL事务回滚更改,如果任何方法失败。我在StackOverflow中提到了这个例子:MySql and inserting last ID problem remains,但是我的问题有点不同。处理MySQL transcations的两种方法

我有如下代码:

private void btnSave_Click(object sender, EventArgs e) 
{ 
    btnSave.Enabled = false; 
    int result1 = SaveBillDetails(); 
    int result2 = SaveBillItems(); 

    if ((result1 == 1) && (result2 == 1)) 
    { 
     //Update old stock 
     UpdateStock.ReduceStock(Convert.ToInt32(txtBillNo.Text), Convert.ToDateTime(dtpBillDate.Text)); 
     MessageBox.Show("Saved", "StockApp", MessageBoxButtons.OK, MessageBoxIcon.Information); 

    } 
    btnSave.Enabled = true; 
} 

我想打电话给类似的BeginTransaction之前SaveBillDetailsSaveBillItems被调用。这两种方法都不使用事务。我只想添加交易到上面的代码。

+0

有什么问题? wana代码风格的问题? – Reniuz

+0

问题是两种方法都使用独立的数据访问类。合并所有三种方法,即。 SaveBillDetails,SaveBillItems和ReduceStock是一项耗时的任务。如果我将BeginTransaction添加到上面的代码中,我假设我不启动事务,除非我使用类似我的问题中发布的链接中显示的代码。 – RKh

回答

1

它可能会使用System.TransactionScope与MySQL,这取决于净的verison你的目标和你所使用的MySQL连接器的版本 - 看到这个post

另见本question讨论

+0

我正在使用.NET 3.5 SP1和MySQL ConnectorNet 6.4.3。 – RKh

1

这是一个常见问题,假设您完全控制了您的数据访问层的设计和实现,您应该有一个创建连接或事务并将其返回的方法,然后您将两个Save方法修改为接受一个事务作为参数并在命令执行中使用它。

对于使用连接和事务来使用连接和事务非常重要,所以正确处理这些对象。