日期:2014-05-20  浏览次数:20731 次

请教提交子查询数据的问题
查询数据时我用了几条SELECT返回一个带N个数据表的数据集,
每个SELECT语句中有一列是通过子查询获得的,
就是说这列数据在数据库里的实际值是个ID,
但是我查询回来的数据是用子查询语句从另外一个表中获取的,
这列数据我绑定了DataGridView上的一个DataGridViewComboBoxColumn,
由用户去手动挑选该列的值,

问题是数据集里面的数据是改了,但是用DA的Update方法更新时数据库里面对应的列的值没改,Update方法也没报错

在2楼我发个实际操作时的问题代码,先谢谢了。。。

------解决方案--------------------
问题是数据集里面的数据是改了,但是用DA的Update方法更新时数据库里面对应的列的值没改,Update方法也没报错

------------------
通过 子查询过来的数据。Dataset更新时,需要遍历一下。
最好 用 ado 的存储过程。
------解决方案--------------------
选择的数据update数据表里是吧,update方法首先是要有改动,不然不会成功。这个问题你在网上搜下,很多解决方法。在同一事务中,同时有查询\新增\更新等操作时,如果查询出来的记录集的结果被改变,系统会自动新增或更新记录集的。
参考http://technet.microsoft.com/zh-cn/z1z2bkx2

------解决方案--------------------
LZ给你个建议 你调试把你得到的sql语句拿到数据库执行 看能不能得到数据
我对mysql不是很了解 但是我发现你的括号好像放错位置了
cmd.CommandText = "SELECT (SELECT Concat(ItemID, ' - ', ItemName)) FROM Items AS '货物名称' Where Items.ItemID = Price.ID , UnitPrice AS '单价' FROM Price WHERE ItemType = 1; SELECT (SELECT ItemName FROM Items Where Items.ItemID = Price.ID) AS '货物名称', UnitPrice AS '单价' FROM Price WHERE ItemType = 2;";

------解决方案--------------------
。。。你既然把2个栏位连接起来了,那Update如何知道Update到哪个栏位去?
修改单个栏位是OK的说明没有问,
建议你把要修改的栏位直接绑到一个column上,
然后在修改后通过规则来改变这个栏位上的值,然后在Update
如果要改2个一样
------解决方案--------------------
好的字,没细看。 简要描述下问题
------解决方案--------------------
更新不到表y 里?

如果你指的是字段冗余时的处理的话 ,那就要一起更新

否则就要关联表 获取最新值
------解决方案--------------------
表y 和表 x 都有 itemname 字段是么
------解决方案--------------------
select (select itemname from x where x.id = y.itemid) as '物品名称' from y
这sql的意思就是得到x表的itemname
等价于select itemname from x where x.id = y.itemid

------解决方案--------------------
那么你更改物品名称 对这句sql语句有什么影响呢?
------解决方案--------------------
如果你要达到你说的意思
那么语句应该是
select itemname from x where x.id = y.itemid and 物品名称='xxxx'
------解决方案--------------------
事实上,如果那个ID是数据库中的一个标记列的话,你是不能改它的.
如果你要改,只能用更新语句将现在指定的所有其他列,update到表中已经存在的那个ID的行上,如果这个ID不存在,那还要去掉ID的标记属性,再向表中插入数据.
一般不这么做的.
------解决方案--------------------
你建一个视图把两个表联起来,itemID做为关联键值

这样的话所有数据集就放在一起了

你试一下看看行不

一半是主表信息一半是子表信息





------解决方案--------------------
选择的数据update数据表里是吧,update方法首先是要有改动,不然不会成功。这个问题你在网上搜下,很多解决方法。在同一事务中,同时有查询\新增\更新等操作时,如果查询出来的记录集的结果被改变,系统会自动新增或更新记录集的。
参考http://technet.microsoft.com/zh-cn/z1z2bkx2
------解决方案--------------------
1.别名不用‘ ’号
2.多表联合查询,datagrid是没法用ADP.Update方法。
------解决方案--------------------
查询应该没问题。下拉选项改变的时候,应该对相应的列进行赋值,这样保存也就没问题了,否则更新都是用原来的值进行覆盖