2009-06-05 89 views
6

我看起来像一个顽固的VS2008数据集设计师。我一直在试图做一个简单的2表数据集解决方案,其中一个表只是存储在另一个表中的整数值的文本含义。基本数据设计101我的TableAdapter的更新和删除命令发生了什么?

Table1 
CharField1 
CharField2 
IntForeignKeyField1 
etc 

Table2 
IntPrimaryKey1 
ValueForKeyField 

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

因为它住在一个Web服务中,我想要一个强类型的数据集提供给这个Web服务的客户端,我决定使用DataSet设计器来构建TableAdapter和所有的管道,认为它可能更少工作并且更容易维护。

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

但是,当我尝试使用Update语句时,出现错误提示没有有效的Update语句!在网络上遇到类似困境的人员搜索无效后,我挖掘了数据集的XML。果然,没有更新声明,也没有删除声明。

我试着从项目中完全删除并重新创建DataSet,结果相同。即使报告已完成,也不会创建更新或删除语句。

我最终通过检查另一个项目中另一个设计的数据集来手动构建Update语句XML,所以Web服务正在工作。然而,我不相信我的改变会通过设计师发起的修改而持续下去,而且我为什么不能正常工作而不知所措。有任何想法吗?

感谢您的任何反馈, 戴夫

+1

从完全没有评论的角度来看,我认为这不会发生在其他任何人身上,所以我在VS2008实现中遇到了一个真正的错误或故障。大。我还获得了一张frickin的风滚草徽章。 – DaveN59 2009-06-12 16:57:50

回答

13

那也许是因为没有为表没有定义的唯一主键?

+0

Doh!感谢您指出明显的... – DaveN59 2009-07-30 20:32:55

+0

不要觉得蹩脚的,我只是做了同样的事情:(设置数据库中的PK修复了同样的问题对我来说 – sMaN 2011-03-29 01:26:02

0

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

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

该解决方案包括创建您自己的选择/更新/插入/删除程序。不幸的是,虽然我能够遵循sqlserver数据库的解决方案,但我仍然无法使其适用于本地Access数据库。所有存储过程选项都灰显。

祝你好运!

+0

感谢您的文章的链接。问题(也可能是你自己)比这更简单,我只需要在SQL Studio设计器中定义主键和关系,VS很喜欢它,我不知道你的数据是什么样的,但是VS可以从SQL Server获得相当多的信息 - 显然不是。 – DaveN59 2009-07-30 20:31:59

0

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

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

+0

工作太多!:)这基本上就是我所做的工作。但是,当我定义数据库中的主键和关系时,它工作了许多更清晰,更清晰,没有任何手动改变任何东西 - VS2008找出了如何从这些信息中完成需要做的事情,无需人工干预... – DaveN59 2009-07-31 21:23:11

+0

你有这个解决方案为MS Access工作?我有这个确切的问题,我试图让你的方法工作。 – 2010-07-10 02:42:27

0

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

0

乔治所说的很好。我们需要启用'生成插入,更新,删除语句'选项。

但是,在VS2013中,在selete语句中使用不必要的表限定符可能会扰乱IDE并导致仅生成SELECT和INSERT语句。只要删除这个限定符,它应该没问题。确保你有一个独特的PK。

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