在.NET中爲MySQL使用ADO.Net驅動程序時,是否需要將事務分配給MySqlCommand
對象(例如,使用oCmd.Transaction = oTran
)還是足以使MySqlConnection
對象具有開放事務?在下面的代碼中,我在連接上開始一個事務,在不分配事務的情況下運行兩個帶有單獨MySqlCommand
對象的查詢,然後回滾事務。在這個例子中,UPDATE
都沒有被提交給數據庫。.NET MySqlCommand.Transaction - 它的用途是什麼?
MySqlConnection oConn = new MySqlConnection("Server=spet-il-cent-02;Port=3306;Database=test;Uid=test;Pwd=test123;CharSet=utf8;");
oConn.Open();
MySqlTransaction oTran = oConn.BeginTransaction();
MySqlCommand oCmd = oConn.CreateCommand();
oCmd.CommandText = "UPDATE testing SET testBalance = testBalance + 10 WHERE testID = 1";
oCmd.ExecuteNonQuery();
oCmd = oConn.CreateCommand();
oCmd.CommandText = "UPDATE testing SET testBalance = testBalance - 10 WHERE testID = 2";
oCmd.ExecuteNonQuery();
oTran.Rollback();
oConn.Close();
當檢查oCmd
在運行時Transaction
財產,我看到它是null
。
很明顯,如果我打電話給oTran.Commit()
,那麼兩個UPDATE
陳述都被提交。那麼MySqlCommand
對象的Transaction
屬性的目的是什麼?是否允許在單個連接上使用多個併發事務(其中不同的命令將綁定到不同的事務,並且可以回滾或提交而不考慮彼此)?