C# Mysql中多个查询之间是否可以回滚事务,一个更新查询可以回滚0行?
我想在C#windows应用程序的回滚事务中更新并插入多个Mysql查询。我希望在至少一个查询由于其条件变为false而无法更新行时回滚 我听说回滚只有在事务由于突然错误而失败时才会发生C# Mysql中多个查询之间是否可以回滚事务,一个更新查询可以回滚0行?,c#,mysql,C#,Mysql,我想在C#windows应用程序的回滚事务中更新并插入多个Mysql查询。我希望在至少一个查询由于其条件变为false而无法更新行时回滚 我听说回滚只有在事务由于突然错误而失败时才会发生 private void btnCheckin_Click(object sender, EventArgs e) { Dictionary<int, string> queryList = new Dictionary<int, string>();
private void btnCheckin_Click(object sender, EventArgs e)
{
Dictionary<int, string> queryList = new Dictionary<int, string>();
queryList.Add(0, "INSERT INTO `booked_room`(`bok_id`, `cat_id`, `rom_no`) VALUES (1,2,3)");
queryList.Add(1, "UPDATE `room` SET `rom_stat`=1 WHERE `rom_stat`=0 AND `rom_no`=3");
if (rollbkUpdate(queryList))MessageBox.Show("Success");
else MessageBox.Show("Failed");
}
public bool rollbkUpdate(Dictionary<int,string> query)
{
MySqlConnection conn= ConnString();
conn.Open();
MySqlCommand comm = conn.CreateCommand();
MySqlTransaction startTrans = conn.BeginTransaction();
comm.Connection = conn;
comm.Transaction = startTrans;
int i = 0;
try
{
for (i = 0; i < query.Count; i++)
{
if (query.ContainsKey(i))
{
comm.CommandText = query[i];
comm.ExecuteNonQuery();
}
}
startTrans.Commit();
if (i == query.Count) return true;
else return false;
}
catch (Exception)
{
try
{
startTrans.Rollback();
return false;
}
catch (Exception)
{
return false;
}
}
finally
{
conn.Close();
}
}
private void btnCheckin\u单击(对象发送者,事件参数e)
{
Dictionary queryList=new Dictionary();
添加(0,“插入到`预订房间'(`bok\U id`、`cat\U id`、`rom\U no`)值(1,2,3)”;
添加(1,“更新`room`SET`rom_stat`=1,其中`rom_stat`=0和`rom_no`=3”);
if(rollbkUpdate(queryList))MessageBox.Show(“Success”);
else MessageBox.Show(“失败”);
}
公共bool更新(字典查询)
{
MySqlConnection conn=ConnString();
conn.Open();
MySqlCommand comm=conn.CreateCommand();
MySqlTransaction startTrans=conn.BeginTransaction();
通信连接=连接;
通信事务=启动事务;
int i=0;
尝试
{
对于(i=0;i
你可以发布一些代码吗?是的,你可以。。。您需要依赖于comm.ExecuteNonQuery()
结果-读取文档返回的内容您的意思是我必须检查(comm.ExecuteNonQuery()<1){startTrans.Rollback();}