c#DataSet未更新回数据库

本文关键字:数据库 更新 c#DataSet | 更新日期: 2023-09-27 18:25:44

我正试图通过OleDb使用Access数据库。我需要:

  • 将数据从数据库获取到数据集
  • 更改数据集中的数据
  • 将此数据集更新回数据库

前两项任务已完成。但我无法将更改后的数据集更新回数据库。我没有看到任何错误,也没有例外。数据集中的数据已正确更改(fruits.WriteXml写入正确的结果),但数据库中的数据未更改。

为什么数据库中的数据没有更改?

谢谢。

要复制它:(数据库文件:https://drive.google.com/open?id=0ByImDaWMXaHAUGRIbTNLT0dHU0k&authuser=0)

private void button1_Click(object sender, EventArgs e)
{
        updateDb();
}
private void updateDb()
{
    String connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:''local_workspaces''visualstudio10''FruitShop''Database2.accdb;User Id=;Password=;";
    DataSet fruits = new DataSet();
    OleDbConnection connection = new OleDbConnection(connectionString);
    OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM fruits", connection);
    adapter.Fill(fruits);
    MessageBox.Show("Current value: " +fruits.Tables[0].Rows[0]["quantity"].ToString());
    //setting new value
    fruits.Tables[0].Rows[0]["quantity"] = 1111;
    fruits.AcceptChanges();
    OleDbCommandBuilder commandBuilder = new OleDbCommandBuilder(adapter);
    adapter.UpdateCommand = commandBuilder.GetUpdateCommand();
    adapter.Update(fruits);
    MessageBox.Show("New value: " + fruits.Tables[0].Rows[0]["quantity"].ToString());
    connection.Close();
}

编辑:

代码是根据这个例子改编的:http://msdn.microsoft.com/en-us/library/at8a576f(v=vs.110).aspx?cs save lang=1&cs-lang=csharp#code-snippet-2最初的例子对我来说效果不太好。

可能是因为Access数据库?(我现在无法尝试其他数据库)

解决方案:

谢谢你的帮助。为了让它发挥作用,需要在数据集中进行更改,并只更新这些更改,否则它就不起作用(对我来说)。

DataSet changes = fruits.GetChanges();
if (changes != null)
{
    SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
    adapter.UpdateCommand = builder.GetUpdateCommand();
    adapter.Update(changes);
    fruits.AcceptChanges();
}

c#DataSet未更新回数据库

从外观上看,您还没有指定用于适配器的更新命令(这将是一条sql更新语句)。如果您想使用oledb方法,您需要执行以下操作:https://stackoverflow.com/questions/26235498/c-sharp-dataset-not-updated-back-to-the-database

或者,您应该能够生成一个数据集,为您创建所有必要的表适配器。这应该有助于:http://msdn.microsoft.com/en-us/library/ms171919.aspx

好吧,有一个愚蠢的小错误。。

您必须设置。。。

水果。AcceptChanges()

之前。。。

水果。表格[0]。行[0]["数量"]=1111

然后剩下的代码将是…

        fruits.AcceptChanges();
        fruits.Tables[0].Rows[0]["quantity"] =1111;
        MessageBox.Show(ds.Tables[0].Rows[0]["quantity"].ToString());
        DataSet changes = ds.GetChanges();
        if (changes != null)
        {
            OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
            adapter.UpdateCommand = builder.GetUpdateCommand();
            adapter.Update(changes);
            fruits.AcceptChanges();
            MessageBox.Show("New value: " + ds.Tables[0].Rows[0]["quantity"]);
        }
        connection.Close();