数据集更改没有被保存到数据库中
我有一个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。
你还为数据源保存了些什么?其次,确保你的表适配器有有效的更新,插入和删除命令。即使向导说已经完成了,我也遇到了问题,他们没有填写。
它使用System.Data.SQLite组件保存到SQLite数据库。所有TableAdapter都有有效的命令。 – Rezzie 2010-08-22 21:38:25
你有文件作为你的项目的一部分吗?如果是这样,它是否设置为复制到输出目录?我相信我遇到了与Access类似的问题。问题是,当我重新启动应用程序时,它吹走了我的更改,因为它一直在拷贝干净版本的数据库到我修改的数据库上。只是一个想法。 – Wade73 2010-08-23 00:27:14
是的,数据库正常,因为对其他表的更改已正确保存。只有客户表不会保存:/ – Rezzie 2010-08-23 00:53:30
看看myTableAdapter.UpdateCmd.CommandText并在需要时将其发布到此处。 – 2010-08-19 11:16:32
TableAdapter。Update()返回一个整数结果,其中包含已更改行数的计数...如果它返回0,那么您的EndEdit()可能不会应用于正确的(即当前活动的编辑中)项目。 – ewall 2010-08-19 13:29:51
@ewall:听起来像是它;我有多个TableAdapters和BindingSources用于表单上的主 - 细节视图。如何设置当前活动的编辑源? – Rezzie 2010-08-19 14:38:40