我正在与一个顽抗的VS2008 DataSet设计师作战。我一直在尝试做一个简单的2表数据集解决方案,其中一个表只是存储在另一个表中的整数值的文本含义。基本数据设计101。
Table1
CharField1
CharField2
IntForeignKeyField1
etc
Table2
IntPrimaryKey1
ValueForKeyField
这并不会影响我遇到的问题,我不相信,因为我不想做任何事情,只是从第二个表中读取值,所以我可以在客户端的DataGridViewComboBoxColumn中选择它们 - - 我永远不会在客户端编辑它们。但是,我离题了。
由于它存在于Web服务中,并且我希望将一个强类型数据集传递给此Web服务的客户端,因此我决定使用DataSet Designer来构建TableAdapter和所有管道,认为它可能不那么有效并且更容易维护。
因此,我创建了漂亮的盒子并编辑了select语句,指示设计者为表适配器创建所有Insert,Update和Delete命令。它很高兴地告诉我,一切都按照我的要求完成了。
但是,当我尝试使用Update语句时,我收到一条错误消息,指出没有有效的Update语句!在对网络上有类似问题的人进行一些徒劳无功的搜索之后,我挖掘了数据集的XML。果然,没有Update语句,也没有Delete语句。
我尝试从项目中完全删除并重新创建DataSet,结果相同。未创建更新或删除语句,即使报告已完成。
我最终通过检查另一个项目中的另一个设计数据集来手动构建Update语句XML,因此Web服务现在正在运行。但是,我没有任何信心,我的更改将持续通过设计师发起的编辑,我很难过为什么它不起作用。有什么想法吗?
感谢您的任何反馈, 戴夫
答案 0 :(得分:13)
可能是没有为表定义唯一的主键吗?
答案 1 :(得分:0)
我遇到了同样的问题。使用多个表中的字段时,TableAdapter无法正常工作。我能够从以下文章重新创建解决方案:“更新TableAdapter以使用连接”。
http://www.asp.net/learn/data-access/tutorial-69-vb.aspx
解决方案涉及创建自己的选择/更新/插入/删除过程。不幸的是,虽然我能够遵循sqlserver数据库的解决方案,但我仍然无法让它为我的本地Access数据库工作。所有存储过程选项都显示为灰色。
祝你好运!
答案 2 :(得分:0)
我想我找到了解决方案。 1)仅为主表创建TableAdapter并复制TableAdapter UPDATE过程(存储在TableAdapter属性窗口中) 2)更改“TableAdapter配置向导查询生成器”中的SELECT查询,以包括来自表和连接的字段。 3)将旧的UPDATE过程粘贴到现在空白的TableAdapter UPDATE过程中。 4)创建DataGridView后,您可以显示两个表中的字段并更新主表。 重复INSERT&的步骤删除命令。
如果您的目标是更新两个表,请尝试在Web上查看TableAdapter父/子更新信息。 这是一个很好的链接: http://blogs.msdn.com/bethmassi/archive/2009/05/14/using-tableadapters-to-insert-related-data-into-an-ms-access-database.aspx
答案 3 :(得分:0)
刚遇到同样的基本问题。我告诉数据设计者创建所有insert,update,delete语句。当我去更新其中一个表时,没有可用的更新。我终于进入了数据设计者创建的.xsd文件(只需双击即可在IDE中打开它)。然后我右键单击出现问题的表的标题栏并选择了configure选项。从那里我单击“高级选项”按钮,然后选择“生成插入,更新,删除语句”选项。按下Okay后,我检查了我的项目,并且更新可用于表适配器。
答案 4 :(得分:0)
乔治建议的很棒。我们需要启用“生成插入,更新,删除语句”选项。
但是在VS2013中,在selete语句中使用不必要的表限定符可能会扰乱IDE并导致仅生成SELECT和INSERT语句。只需删除此限定符,它应该没问题。确保你也有一个独特的PK。
如果您需要使用复杂填充(如应用过滤器)来仅返回表的某些行,则可以使用表单加载事件中的特定select语句填充数据表。这样,生成的INSERT,UPDATE和DELETE语句仍然有效,因为DELETE和UPDATE在PK上工作。