6

看来,我正在与一个顽固的 VS2008 DataSet 设计师作斗争。我一直在尝试做一个看似简单的 2 表数据集解决方案,其中一个表只是存储在另一个表中的整数值的文本含义。基础数据设计 101.

Table1
CharField1
CharField2
IntForeignKeyField1
etc

Table2
IntPrimaryKey1
ValueForKeyField

这并没有真正影响我遇到的问题,我不相信,因为我不想做任何事情,只是从第二个表中读取值,所以我可以在客户端的 DataGridViewComboBoxColumn 中选择它们——我会永远不要在客户端上编辑它们。但是,我离题了。

由于它存在于 Web 服务中,并且我希望将强类型数据集交付给该 Web 服务的客户端,因此我决定使用 DataSet Designer 来构建 TableAdapters 和所有管道,认为它可能会减少工作量并且更容易维持。

因此,我创建了漂亮的框并编辑了选择语句,指示设计人员创建所有插入、更新和删除命令以供表适配器使用。它高兴地答应了,告诉我一切都按照我的要求完成了。

但是,当我尝试使用 Update 语句时,我收到一条错误消息,指出没有有效的 Update 语句!在网上搜索有类似问题的人无果后,我深入研究了数据集的 XML。果然,没有 Update 语句,也没有 Delete 语句。

我尝试从项目中完全删除并重新创建 DataSet,结果相同。没有创建更新或删除语句,即使它被报告为已完成。

我最终通过检查来自另一个项目的另一个设计数据集手动构建了更新语句 XML,因此 Web 服务现在可以正常工作。但是,我不相信我的更改会持续通过设计师发起的编辑,我很难理解为什么它不起作用。有任何想法吗?

感谢您的任何反馈,戴夫

4

5 回答 5

14

是不是没有为表定义唯一的主键?

于 2009-07-29T12:03:29.170 回答
0

我有同样的问题。使用多个表中的字段时,TableAdapter 无法正常工作。我能够从以下文章中重新创建解决方案:“更新 TableAdapter 以使用联接”。

http://www.asp.net/learn/data-access/tutorial-69-vb.aspx

该解决方案涉及创建您自己的选择/更新/插入/删除过程。不幸的是,虽然我能够遵循 sqlserver 数据库的解决方案,但我仍然无法让它为我的本地 Access 数据库工作。所有存储过程选项都显示为灰色。

祝你好运!

于 2009-07-29T22:11:39.910 回答
0

我想我找到了解决方案。1) 仅为主表创建一个 TableAdapter 并复制 TableAdapter UPDATE 过程(存储在 TableAdapter 属性窗口中) 2) 更改“TableAdapter 配置向导查询生成器”中的 SELECT 查询以包括来自两个表和连接的字段。3) 将旧的 UPDATE 过程粘贴到现在空白的 TableAdapter UPDATE 过程中。4) 创建DataGridView 后,您可以显示两个表中的字段并更新主表。重复插入和删除命令的步骤。

如果您的目标是更新两个表,请尝试在 Web 上查看 TableAdapter 父/子更新信息。这是一个很好的链接:http: //blogs.msdn.com/bethmassi/archive/2009/05/14/using-tableadapters-to-insert-related-data-into-an-ms-access-database.aspx

于 2009-07-30T15:37:27.293 回答
0

刚刚遇到了同样的基本问题。我告诉数据设计师创建所有插入、更新、删除语句。当我去更新其中一张表时,没有可用的更新。我终于进入了数据设计器创建的 .xsd 文件(只需在 IDE 中双击打开它)。然后我右键单击有问题的表的标题栏并选择配置选项。从那里我单击“高级选项”按钮,然后选择“生成插入、更新、删除语句”选项。按 OK 后,我检查了我的项目,更新可用于表适配器。

于 2009-08-26T21:09:59.370 回答
0

乔治的建议很棒。我们需要启用“生成插入、更新、删除语句”选项。

但是在 VS2013 中,在 selete 语句中使用不必要的表限定符可能会扰乱 IDE 并导致仅生成 SELECT 和 INSERT 语句。只需删除此限定符就可以了。确保你也有一个独特的PK。

如果您需要使用复杂的填充(如应用过滤器)仅返回表格的某些行,您可以在表单加载事件中使用特定的 select 语句填充数据表。这样,生成的 INSERT、UPDATE 和 DELETE 语句仍然可以工作,因为 DELETE 和 UPDATE 在 PK 上工作。

于 2014-07-15T02:05:51.100 回答