2011-05-12 68 views
0

现状:WPF应用程序,.NET4,与设计师创建数据源(MS SQL Server 2008中)不能DataSet中保存回数据库

问题:读取数据运行良好:

adapter.Fill(ds); 

的DataSet中填充数据,绑定到DataGrids的表。当我然后编辑任何DataGrid(例如添加一行)并在WPF的DataGrid中按下“Enter”时,新行将被成功添加。

然后我打电话:

ds.AcceptChanges(); 
adapter.Update(ds); 

没有变化就是底层的MS SQL Server 2008数据库制作。这是疯了,有人知道问题在哪里吗?

+1

你在表格中创建了PRIMARY KEY吗? – jams 2011-05-12 12:27:53

+0

在数据库中它是自动增量,所以没有我没有。有关系吗? – Cartesius00 2011-05-12 13:44:09

回答

3

你应该在更新后调用acceptchanges,或者实际上根本没有。

http://msdn.microsoft.com/en-us/library/system.data.dataset.acceptchanges.aspx

AcceptChanges的标记在数据集作为不变的所有行,所以更新认为没有改变,也不会更新数据库。

+1

为什么?更新应该更新SQL数据库,不应该吗?更新是无声的,没有任何反应。 – Cartesius00 2011-05-12 13:46:14

+0

对不起。意外地提出了答复,并且无法解决这个问题。更新将所有数据传回到数据集中**被标记为已修改**的数据库。 AcceptChanges将所有数据标记为未修改。 AcceptChanges()后没有更多的数据标记,因此没有更新 – k3b 2011-05-12 16:00:58

0

您是否指定了更新并在数据适配器中插入了sql语句/存储过程?

另一个需要注意的是dataAdapter(int)的返回值,它是成功更新的行数。这是否带有价值?

你可以发布你的数据适配器初始化代码吗?

0

这仍然没有解决,我有同样的问题。
在tableadapter上,您可以执行tableadaptername.Update(dataset.NameofDataset)。
但是,这不会写入数据库。
命名的DataSet只知道AcceptChanges,但不知道Dot操作符后的更新。

所以,这是未解四年......还有其他的帖子这个样子,太...
只是不回答这个问题,如果它不作任何区别 - 这里的AcceptChanges是不相关的。
真诚,
安迪

0

我发现了同样的使用形式使用时,一个DataGrid是真(下Server 2012的操作系统不同的机器上使用VS 2013 Express,用于Windows桌面的Windows窗体应用程序)。
我加了一个按钮,该按钮的单击事件调用更新方法:

this.customersTableAdapter.Update(this.database1DataSet); 
MessageBox.Show("Save was done."); 

我加在MessageBox只看到某事物发生了,因为我不再相信这个IDE。
数据网格中所做的更改反映在表单中。没有来自VS或Windows的投诉。我再次运行它:数据未保存到数据库。
它只是一个错误的东西,不值得所有的关注。
可能是所有的设计。
Sooo long,
Andi