我用您的标准智能控件制成了一个ListBox,并将其连接到数据库。它通过查询生成器获取我已经在其中预先生成的数据,所以当我这样做时:

this.calibrate_swipesTableAdapter.Fill(this.xperdex_crandallDataSet.calibrate_swipes);


我得到一个包含数据的列表框。

然后,当我通过它向其中添加数据块时:

toadd["card_number"] = card_number;
this.xperdex_crandallDataSet.Tables["calibrate_swipes"].Rows.Add(toadd);


它也可以。效果很好。现在,当我关闭时,我会丢失所有信息。更新我的适配器和AcceptChanges,对吗?

没那么快。当我打电话

this.calibrate_swipesTableAdapter.Update(this.xperdex_crandallDataSet.calibrate_swipes);


我得到“不包含“更新”的定义”。

是什么赋予了?我看不出任何原因来进行填充的同一件事没有更新方法。

最佳答案

您可能要看一下TableAdapter Overview,其中指出:


如果主查询中有足够的信息,则在生成TableAdapter时默认情况下会创建InsertCommand,UpdateCommand和DeleteCommand命令。如果TableAdapter的主查询超过一个表的SELECT语句,则设计者可能无法生成InsertCommand,UpdateCommand和DeleteCommand。如果未生成这些命令,则在执行TableAdapter.Update方法时可能会收到错误消息。


您有两种选择:


更改您的主要查询
更改UpdateCommand。


要更改UpdateCommand,请找出为TableAdapter生成的类的名称是什么。该代码应类似于以下内容:


SqlCommand yourUpdateCommand = new SqlCommand("UPDATE...", connection);
this.calibrate_swipesTableAdapter.Adapter.UpdateCommand = yourUpdateCommand;




更新:

正如评论员所说,在其他条件下,可能不会生成命令。查看评论。

关于c# - TableAdapter.update方法,它去哪了?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1396675/

10-10 16:19