Search code examples
c#mysqloledb

Second query failed to update because first query still in insert progress


private void btnSave_Click(object sender, EventArgs e)
{
    using (OleDbConnection con = new OleDbConnection(cs))
    {
        con.Open();
        cmd = new OleDbCommand(“INSERT INTO table1 ([name], [gender], [age]) VALUES ('Jeff', 'Male', 51), con);
        cmd.ExecuteNonQuery();

        //System.Threading.Thread.Sleep(1000); // it's working if i add a delay here

        //int success = cmd.ExecuteNonQuery(); // also working if check number of query affected
        //if (success > 0)
        //{
        //    updateLastModified();
        //}

        updateLastModified();
    }
}

public void updateLastModified()
{
    using (OleDbConnection con = new OleDbConnection(cs))
    {
        con.Open();
        cmd = new OleDbCommand("UPDATE TABLE1 SET LastModifiedTime='" + DateTime.Now.ToString() + "' WHERE name='Jeff'", con);
        cmd.ExecuteNonQuery();

        // this was not updated because "Jeff" cannot be found in table1 (first insert query still running)
    }
}

My problem was second query not updated because first query still running.

Any better solution other than "adding a delay" or "check first query was successful" before perform second query?

This is just an example scenario, I'm not going to do in one query.

Update: Suggestion from @a.rlx was using OleDbTransaction.Commit method. Can i do by this way without using try catch?

using (OleDbConnection con = new OleDbConnection(cs))
{
    OleDbTransaction transaction = null;
    con.Open();
    transaction = con.BeginTransaction();
    cmd = new OleDbCommand(“INSERT INTO table1 ([name], [gender], [age]) VALUES ('Jeff', 'Male', 51), con, transaction);
    cmd.ExecuteNonQuery();
    transaction.Commit();
    updateLastModified();
}

Solution

  • Have you tried to start a transaction, run both SQL statements, and then commit the transaction?

    https://dev.mysql.com/doc/dev/connector-net/6.10/html/M_MySql_Data_MySqlClient_MySqlConnection_BeginTransaction.htm