below is the code i am using for MySqlTransaction and it is running perfectly.... but problem is as i am using single instance of mysqlcommand i have to use unique PARAMETER
You can use Using keyword for auto dispose objects. i don't know VB but I know C#. Please convert the code into VB.
using(MySqlConnection con= new MySqlConnection("connectionString"))
{
con.Open();
using(MysqlTransaction trans=con.BeginTransaction())
{
try
{
//command to executive query
using(MysqlCommand cmd= new MySqlCommand("query", con, trans))
{
cmd.Parameters.AddWithValue("@parameter1", parametervalue1);
cmd.Parameters.AddWithValue("@parameter2", parametervalue2);
cmd.ExecutenonQuery();
cmd.Parameters.Clear();
}
//command to execute query
using(MysqlCommand cmd= new MySqlCommand("query", con, trans))
{
cmd.Parameters.AddWithValue("@parameter1", parametervalue1);
cmd.Parameters.AddWithValue("@parameter2", parametervalue2);
cmd.ExecutenonQuery();
cmd.Parameters.Clear();
}
//command to execute query
using(MysqlCommand cmd= new MySqlCommand("query", con, trans))
{
cmd.Parameters.AddWithValue("@parameter1", parametervalue1);
cmd.Parameters.AddWithValue("@parameter2", parametervalue2);
cmd.ExecutenonQuery();
cmd.Parameters.Clear();
}
trans.Commit();
}
catch(Exception ex)
{
trans.Rollback();
}
}
}
To execute multiple commands within the same transaction, ensure that you assign the transaction object to each command individually:
Dim selectCmd As MySqlCommand = con.CreateCommand()
Dim insertCmd As MySqlCommand = con.CreateCommand()
selectCmd.CommandText = "SELECT ..."
insertCmd.CommandText = "INSERT ..."
Dim sqlTran As MySqlTransaction = con.BeginTransaction()
Try
selectCmd.Transaction = sqlTran
insertCmd.Transaction = sqlTran
...selectCmd.ExecuteScalar()...
...insertCmd.ExecuteNonQuery()...
sqlTran.Commit()
Catch
sqlTran.Rollback()
End Try
As others have mentioned, it is generally a good idea to Dispose()
objects (that are IDisposable
) as soon as you're done working with them. After disposing objects, they can no longer be used.