2014-09-30 23 views
0

我有一個項目中刪除,其中上保存按鈕用戶點擊:如何檢查和如果MySQL插入查詢失敗,則刪除插入的數據在C#

1)將查詢數據插入到MySQL數據庫表1。 2)更新表2中的查詢更新1字段值。

如果步驟1失敗,則步驟2將需要停止並且步驟1需要反轉。這意味着步驟1和步驟2需要一起完成才能完成交易。否則,交易需要失敗。

任何幫助?

+0

你似乎已經知道有關事務。只要使用事務並回滾,而不是在第一個查詢出錯時提交。 – 2014-09-30 20:20:14

+0

請參閱:http://stackoverflow.com/questions/14252560/mysql-transaction-commit-and-rollback – 2014-09-30 20:21:05

+0

我假設你使用'SqlCommand',所以請嘗試使用'SqlCommand.Transaction'屬性。 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.transaction(v=vs.110).aspx – 2014-09-30 20:21:29

回答

0

你可以做這樣的事情

MySqlConnection con = new MySqlConnection(...); 

con.Open(); 

MySqlTransaction tx = con.BeginTransaction(); 

MySqlCommand cmd = new MySqlCommand("", con); 

cmd.Transaction = tx; 

try 
{ 

    cmd.CommandText = "INSERT query insert Data into MySQL DB in Table 1"; 

    cmd.ExecuteNonQuery(); 

    cmd.CommandText = "Update Query update 1 fields value in Table 2"; 

    cmd.ExecuteNonQuery(); 

    tx.Commit(); 

} 
catch(MySqlException e) 
{ 

    // TODO: report error? 

    tx.Rollback(); 

} 

然後,如果第一次插入查詢失敗,你趕上從那裏錯誤並回滾(中止交易) 或者,如果第二次查詢失敗,你又回滾(撤消更改第一個查詢)。 否則提交一切。

只記得在你的表中使用Innodb引擎,否則事務在MyISAM中不起作用。

0

你實際上是讓交易的確切定義:在你需要以這樣的方式,如果報表中的任何一個失敗,則沒有其他的語句將能夠執行兩個或多個SQL命令

使用transations改變數據庫。

欲瞭解更多信息,請參考以下鏈接:http://www.codeproject.com/Articles/10223/Using-Transactions-in-ADO-NET

希望這有助於你