我搜索并检查但没有看到我需要的东西。我正在使用数据适配器的 UpdateCommand 的 ExecuteNonQuery 来更新本地 Access 数据库。当我运行代码时,在执行下一行代码之前,ExecuteNonQuery 似乎并未完成,因此更新的数据库不会反映在我的网格或文本框中。如果我在 ExecuteNonQuery 之后放置一个消息框,那么当我在消息框中单击“确定”时,其余代码将被执行,更新的数据库将反映在我的网格和文本框中。或者,如果我在调试中单步执行代码而没有消息框来拖拽执行,则对数据库的更新会反映在我的表单上。但是,如果我只是在查询后运行代码而没有执行任何操作来减慢或停止它,则更新不会显示在我的控件中。
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();
我假设在重新填充数据表之前更新查询尚未完成。有人可以帮我解决这个问题吗?我寻找一些东西来显示更新查询的状态,但没有看到我需要的东西。我在这里缺少什么?
10/28/14 昨晚我在 dAdapter.UpdateCommand.ExecuteNonQuery() 之后添加了 dAdapter.UpdateCommand.ExecuteNonQuery();然后一切正常了。我不确定这是否只是需要足够的时间来完成查询并因此导致显示更新,或者是否只是一些侥幸的“创可贴”起作用了。然后我将其替换为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();
}
这将遍历每个指定的列,以便您填充数据。可以在此处找到文档。