数据集更改没有被保存到数据库中

数据集更改没有被保存到数据库中

问题描述:

我有一个windows窗体,其中包含一些与客户端相关的数据绑定字段。此外,我有一个DataGridView显示当前显示的客户端的订单。这是通过使用设计时Visual Studio控件实现的(例如项目DataSet,BindingSources TableAdapters和TableAdapterManager。数据集更改没有被保存到数据库中

当加载表单以编辑现有客户端时,它使用ClientsTableAdapter上的(自定义)FillByID方法填充到将DataSet过滤到单个相关的客户端,将它们的详细信息加载到客户端字段中,并正确填充订单DataGridView。但是,没有一个客户端的详细信息字段是可以编辑的,并且在加载时显示正确的细节,但是当表单关闭时没有保存所做的任何更改。我尝试了两种不同的方式来保存它们,第一个是线上的顺序保存:

this.Validate(); 
this.clientordersBindingSource.EndEdit(); 
this.clientsBindingSource.EndEdit(); 
this.clientordersTableAdapter.Update(projectDataSet.clientorders); 
this.clientsTableAdapter.Update(projectDataSet.clients); 

...和第二使用MSDN上的multiple table example。可悲的是,这些方法都不适用于客户详细信息 - 尽管客户订单的更改为在两种情况下均保留。

我的客户表的结构如下:

refnumber, title, forename, surname, gender, dob, contactnumber 

的clientsTableAdapter先后为的DeleteCommand,将InsertCommand,SelectCommand中和更新命令下面的CommandText字符串分别为:

DELETE FROM clients WHERE (refnumber = @Original_refnumber) 
INSERT INTO clients (refnumber, title, forename, surname, gender, dob, contactnumber) VALUES (@refnumber, @title, @forename, @surname, @gender, @dob, @contactnumber) 
SELECT refnumber, title, forename, surname, gender, dob, contactnumber FROM clients 
UPDATE clients SET refnumber = @refnumber, title = @title, forename = @forename, surname = @surname, gender = @gender, dob = @dob, contactnumber = @contactnumber WHERE (refnumber = @Original_refnumber) 

当保存,如果我添加捕获此行结果的变量:

var res = this.clientsTableAdapter.Update(projectDataSet.clients); 
  • projectDataSet.clients.Count == 1
  • projectDataSet.clients.Rows[0].ItemArray显示修改的字段。
  • projectDataSet.clients.Rows[0].RowState == Unchanged
  • res == 0

请任何人能提供任何线索?这让我疯狂了好几天!


UPDATE

我重新使用Visual Studio设计从无到有的形式,然后复制粘贴&所有代码从原来的形式。现在起作用了。我猜想在Designer.cs文件中有一个datasources/databinding字段是错误的。

感谢您提供有用的调试提示,ewall和Ladislav Mrnka。

+0

看看myTableAdapter.UpdateCmd.CommandText并在需要时将其发布到此处。 – 2010-08-19 11:16:32

+0

TableAdapter。Update()返回一个整数结果,其中包含已更改行数的计数...如果它返回0,那么您的EndEdit()可能不会应用于正确的(即当前活动的编辑中)项目。 – ewall 2010-08-19 13:29:51

+0

@ewall:听起来像是它;我有多个TableAdapters和BindingSources用于表单上的主 - 细节视图。如何设置当前活动的编辑源? – Rezzie 2010-08-19 14:38:40

你还为数据源保存了些什么?其次,确保你的表适配器有有效的更新,插入和删除命令。即使向导说已经完成了,我也遇到了问题,他们没有填写。

+0

它使用System.Data.SQLite组件保存到SQLite数据库。所有TableAdapter都有有效的命令。 – Rezzie 2010-08-22 21:38:25

+0

你有文件作为你的项目的一部分吗?如果是这样,它是否设置为复制到输出目录?我相信我遇到了与Access类似的问题。问题是,当我重新启动应用程序时,它吹走了我的更改,因为它一直在拷贝干净版本的数据库到我修改的数据库上。只是一个想法。 – Wade73 2010-08-23 00:27:14

+0

是的,数据库正常,因为对其他表的更改已正确保存。只有客户表不会保存:/ – Rezzie 2010-08-23 00:53:30