mysql transaction (commit and rollback)

前端 未结 2 1200
感情败类
感情败类 2021-01-01 06:29

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

相关标签:
2条回答
  • 2021-01-01 07:24

    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();
            }
        }
    }
    
    0 讨论(0)
  • 2021-01-01 07:25

    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.

    0 讨论(0)
提交回复
热议问题