Правильность оформления транзакции
Вопрос чисто по синтаксису, как правильно пишется транзакция, написал два варианта, но не уверен в их адекватности. Обязательно ли для транзакции в блоке catch делать RollBack, или это происходит автоматически?
private static async Task TransactAsync()
{
using(MySqlConnection connection =
new MySqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
{
try
{
await connection.OpenAsync();
using (MySqlTransaction transaction = connection.BeginTransaction())
{
using (MySqlCommand cmd = connection.CreateCommand())
{
cmd.CommandText = "INSERT INTO Service VALUES (DEFAULT, 'TEST_TRANSACT', 'Description1', 12.4, 'Location1', 5)";
await cmd.ExecuteNonQueryAsync();
cmd.CommandText = "INSERT INTO Visitor VALUES (DEFAULT, 'TEST_TRANSACT', '325342', 2.5)";
await cmd.ExecuteNonQueryAsync();
transaction.Commit();
}
}
}
catch
{
}
finally
{
await connection.CloseAsync();
}
}
}
private static async Task ReadFromDataBaseAsync()
{
using(MySqlConnection connection =
new MySqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
{
try
{
await connection.OpenAsync();
MySqlTransaction transaction = connection.BeginTransaction();
MySqlCommand cmd = connection.CreateCommand();
cmd.CommandText = "INSERT INTO Service VALUES (DEFAULT, 'TEST_TRANSACT', 'Description1', 12.4, 'Location1', 5)";
await cmd.ExecuteNonQueryAsync();
cmd.CommandText = "INSERT INTO Visitor VALUES (DEFAULT, 'TEST_TRANSACT', '325342', 2.5)";
await cmd.ExecuteNonQueryAsync();
transaction.Commit();
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
await connection.CloseAsync();
}
}
}