需要在执行下一行代码之前完成ExecuteNonQuery

时间:2014-10-27 22:14:10

标签: c# ms-access

我搜索并检查但没看到我需要的东西。我正在使用数据适配器的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();

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

谢谢!

VH


10/28/14昨晚我在dAdapter.UpdateCommand.ExecuteNonQuery()之后立即添加了dAdapter.UpdateCommand.ExecuteNonQuery();一切顺利。我不确定这是否只是花了足够的时间来完成查询并因此导致更新显示,或者是否只是一些侥幸"乐队助手"有效。然后我用connection.Close()替换它;这也很有效。再次......我不知道关闭连接是否导致查询完成并且连接关闭然后转移到下一行代码,或者如果这只是"捏造"它工作。我在寻找答案时看到其他人有类似的问题,但我没有看到任何人解释问题是什么以及为什么会发生这种情况或最合适的解决方案。

1 个答案:

答案 0 :(得分:0)

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

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