C# 在继续执行下一行代码之前,需要在ExecuteOnQuery完成时进行检查

C# 在继续执行下一行代码之前,需要在ExecuteOnQuery完成时进行检查,c#,ms-access,C#,Ms Access,我找了又查,但没有看到我需要什么。我正在使用数据适配器的UpdateCommand和ExecuteOnQuery更新本地Access数据库。当我运行代码时,ExecuteOnQuery在执行下一行代码之前似乎不会完成,因此,更新的数据库不会反映在我的网格或文本框中。如果我在ExecuteOnQuery后面放一个messagbox,那么当我在messagebox中点击ok时,其余的代码将被执行,更新的数据库将反映在我的网格和文本框中。或者,如果我在调试中单步执行代码而不使用messagebox来拖

我找了又查,但没有看到我需要什么。我正在使用数据适配器的UpdateCommand和ExecuteOnQuery更新本地Access数据库。当我运行代码时,ExecuteOnQuery在执行下一行代码之前似乎不会完成,因此,更新的数据库不会反映在我的网格或文本框中。如果我在ExecuteOnQuery后面放一个messagbox,那么当我在messagebox中点击ok时,其余的代码将被执行,更新的数据库将反映在我的网格和文本框中。或者,如果我在调试中单步执行代码而不使用messagebox来拖拽执行,那么对数据库的更新会反映在我的表单上。但是,如果我只是在查询之后运行代码而没有执行任何操作来减慢或停止它,那么更新不会显示在我的控件中

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



昨晚10月28日,我在dAdapter.UpdateCommand.ExecuteOnQuery()之后添加了dAdapter.UpdateCommand.ExecuteOnQuery();然后一切顺利。我不确定这是否只是花了足够的时间来完成查询,从而导致显示更新,或者这只是某种侥幸的“band aide”起作用。然后我将其替换为connection.Close();这也起了作用。再一次…我不知道关闭连接是否会导致查询完成,并在移动到下一行代码之前关闭连接,或者这是否只是“捏造”它来工作。在我搜索答案的过程中,我看到其他人也有类似的问题,但我没有看到任何人解释问题是什么以及为什么会发生这种情况或最合适的解决方案。

您应该使用
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();
}

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

请查看:谢谢Greg。我正在尝试探索/学习操作数据库的所有不同方法。我会尝试你的建议,但我仍然想知道如何修复我必须学习如何使用它,以及这种方法的优缺点。。。它更新了数据库,但似乎是一个时间问题。令人恼火的是,当您使用消息框单步查看代码或拖拽代码时,它会起作用。这似乎是有一种方法来使用这个,我一定是错过了什么…我只是补充了以下对不起。。。我刚刚补充了以下内容: