【问题标题】:Second query failed to update because first query still in insert progress第二个查询未能更新,因为第一个查询仍在插入过程中
【发布时间】:2021-10-08 09:06:35
【问题描述】:
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)
    }
}

我的问题是第二个查询未更新,因为第一个查询仍在运行。

在执行第二个查询之前,除了“添加延迟”或“检查第一个查询是否成功”之外还有更好的解决方案吗?

这只是一个示例场景,我不会在一个查询中进行。

更新: @a.rlx 的建议是使用 OleDbTransaction.Commit 方法。我可以不使用 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();
}

【问题讨论】:

    标签: c# mysql oledb


    【解决方案1】:

    您是否尝试过启动事务,运行两条 SQL 语句,然后提交事务?

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

    【讨论】:

    • 感谢您的建议。如果我在运行第二个查询之前提交第一个查询怎么办?这也很好用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 2013-11-01
    • 2012-04-19
    • 2021-09-07
    • 2020-03-09
    • 1970-01-01
    相关资源
    最近更新 更多