所以我上周有这个工作.至少,我以为我做到了! DataGridView更新
然后我今天再次开始研究这个项目并且正在进行中
在传递带有已修改行的DataRow集合时,Update需要有效的UpdateCommand.
上
scDB.SSIS_Configurations_StagingDataTable table = (scDB.SSIS_Configurations_StagingDataTable)stagingGrid.DataSource; myStagingTableAdapter.Update(table);
在StagingTableAdapter
具有一个附加的查询这需要"过滤器"作为参数.那是用来填补DataGridView
.在创建该查询的向导中,我看到"生成了更新".我发现大多数有此错误的帖子都要求使用命令构建器生成更新语句.我该怎么办?
当您没有在要更新的表上定义主键时,也会显示此消息.
我遇到了和Sam一样的问题.我有工作代码突然不再工作了.我不知道什么时候写它,但它必须自动推断更新命令,然后停止这样做.也许MS之间的服务包在我们从未注意到的版本之间.无论如何,我遇到的解决方案是使用(在我的情况下为oracle)OracleCommandBuilder,它将DataAdapter(在调用fill之后)作为构造函数的参数,然后调用GetUpdateCommand()并将其分配给DataAdapter上的UpdateCommand.
pseudocode: DataAdapter da = new DataAdapter(...) ... da.Fill(); da.UpdateCommand = new OracleCommandBuilder(da).GetUpdateCommand(); ... da.Update();
该错误非常直观:适配器需要有效的SQL Update语句.数据集设计者和CommandBuilders会为你生成这些,但手工制作一些SQL也没有错.
无论如何,您必须验证(调试器)仍然配置了Update语句以及它实际上是什么.它可能更像是SQL而不是C#问题.
编辑:Command Builder工具只处理直接,单表,Select语句.使用加入或任何花哨的东西,你自己.
Dan的解决方法适用于我,但我可以使用SqlCommandBuilder而不是OracleCommandBuilder:
DataAdapter da = new DataAdapter(...) ... da.Fill(); da.UpdateCommand = new SqlCommandBuilder(da).GetUpdateCommand(); ... da.Update();