在继续执行下一行代码之前,需要在ExecuteNonQuery完成时执行

本文关键字:执行 完成时 ExecuteNonQuery 一行 继续 代码 | 更新日期: 2023-09-27 18:27:59

我搜索并检查了一下,但没有发现我需要什么。我正在使用数据适配器的UpdateCommand的ExecuteNonQuery来更新本地Access数据库。当我运行代码时,ExecuteNonQuery似乎不会在执行下一行代码之前完成,因此,更新后的数据库不会反映在我的网格或文本框中。如果我在ExecuteNonQuery后面放了一个消息框,那么当我在消息框中点击ok时,其余的代码就会被执行,更新后的数据库会反映在我的网格和文本框中。或者,如果我在调试中逐步执行代码,而不使用消息框来执行,则对数据库的更新会反映在我的窗体上。但是,如果我只是在查询后运行代码,而没有进行任何操作来减慢或停止它,则更新不会显示在我的控件中。

OleDbConnection connection = new OleDbConnection(connString);
string sql = "Update Table1 set Country = '" + txtNewText.Text + "' where SomeNum =   
1111";           
connection.Open();
dAdapter.UpdateCommand = connection.CreateCommand();
dAdapter.UpdateCommand.CommandText = sql;             
dAdapter.UpdateCommand.ExecuteNonQuery(); 
//MessageBox.Show("Pause");
dTable.Clear(); //Clear or it will add everything to what was there.
dAdapter.Fill(dTable);
row = dTable.Rows[0];
txtCompany.Text = row["Name"].ToString();
txtGenre.Text = row["Job"].ToString();
txtId.Text = row["Id"].ToString();
txtSomeNum.Text = row["SomeNum"].ToString();
txtCountry.Text = row["Country"].ToString();

我假设在重新填充数据表之前,更新查询尚未完成。有人能帮我做这个吗。我想找一些东西来显示更新查询的状态,但没有看到我需要什么。我在这里错过了什么???

谢谢!

VH-


2014年10月28日昨天晚上,我在dAdapter.UpdateCommand.ExecuteNonQuery()之后添加了dAdapter.UpdateCommand.ExecuteNonQuery[()];然后一切都成功了。我不确定这是否只是花了足够的时间来完成查询并因此显示更新,或者这是否只是一些侥幸的"乐队助手"起了作用。然后我用连接代替了它。Close();这也起到了作用。再一次我不知道关闭连接是否会导致查询完成,连接在移动到下一行代码之前关闭,或者这只是"篡改"它以使其工作。在我寻找答案的过程中,我看到其他人也有类似的问题,但我没有看到任何人解释问题是什么,为什么会发生这种情况,或者最合适的解决方案。

在继续执行下一行代码之前,需要在ExecuteNonQuery完成时执行

您应该使用OleDbDataReader,因为您没有使用SQL

提供一种从数据源读取仅向前数据行流的方法。

一个例子:

using (OleDbConnection connection = new OleDbConnection(connectionString))
{
    OleDbCommand command = new OleDbCommand(queryString, connection);
    connection.Open();
    OleDbDataReader reader = command.ExecuteReader();
    while (reader.Read())
    {
        Console.WriteLine(reader[0].ToString());
    }
    reader.Close();
}

这将遍历每个指定的列,允许您填充数据。文档可在此处找到。