关于Access数据库OleDbDataAdapter的用法??求助..

tjjzxh 2009-12-18 02:01:57
源代码如下:

sqlstr = "select * from Balancelist bl where card_no in(select ca.card_no from CurrentAcc ca join DebitCard dc on ca.father_no='" + cardno + "' union select ra.card_no from RegularAcc ra join DebitCard dc on ra.card_no='" + cardno + "' union select fa.card_no from FinancialAcc fa join DebitCard dc on fa.card_no='" + cardno + "')";
this.OpenCon();
OleDbDataAdapter adapter = new OleDbDataAdapter(sqlstr, sqlcon);
DataSet ds = new DataSet();
adapter.Fill(ds, "BalanceList");
this.CloseCon();


在执行上面语句时,系统报错“未处理的OleDbException,子查询中不存在此操作”,错误出现在adapter.Fill(ds,"BalanceList")这句代码。就是上面这段相同的代码我在sql 2000的环境跑过,没有问题的,但我现在数据库移植到access上了,就不能正常跑了,请大家给点解决办法。。急!! 在线等
...全文
411 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjjzxh 2009-12-23
  • 打赏
  • 举报
回复
搞定,只用联合查询,子查询中嵌套联合查询在Access中是行不通的!!感谢大家的热心关注...
  • 打赏
  • 举报
回复
实在不行换个思路,把需要的数据取出来放到Datatable里 ,然后后台进行数据逻辑处理。
tjjzxh 2009-12-19
  • 打赏
  • 举报
回复
就语法我实在想不出什么问题,就是一个子查询中嵌套了一个联合查询,在MSSQL中就没有问题的,真叫人头疼啊!!!
tjjzxh 2009-12-19
  • 打赏
  • 举报
回复
select * from [Balancelist] where [card_no] in ((select [card_no] from [CurrentAcc] where [father_no]='111') & (select [card_no] from [RegularAcc] where [father_no]='111'))
熟悉Access查询的朋友帮我看看上面语句有什么问题啊? 我在Access中执行会导致数据库异常关闭...问题还在解决中..
qiufengilove 2009-12-19
  • 打赏
  • 举报
回复
使用DataTable代替DataSet
因为你使用的SQL语句已经涉及到多个表
所以不能使用映射到某个表的用法
改用DataTable试试
xy_wolf 2009-12-19
  • 打赏
  • 举报
回复
语法不支持
tjjzxh 2009-12-19
  • 打赏
  • 举报
回复
select * from [Balancelist] where [card_no] in((select [card_no] from [CurrentAcc] where [father_no]='111') & (select [card_no] from [RegularAcc] where [father_no]='111'));
当BalanceList表数据为空时,上面这条语句是可以正常执行的,可是如果有记录,就会出现异常,数据库死了!!!哎,Access就这么难么!!!
hanjiangdaili 2009-12-19
  • 打赏
  • 举报
回复
我也遇到过类似情况, ACCESS 查询语句错误, 看一下数据类型是否对应!
  • 打赏
  • 举报
回复
ACCESS的SQL语句写的时候需要注意一些语法和写法上的问题:
手边没有测试环境,只能简单说说我的建议:
1.去网上查一下有关UNION是否能用查询在ACCESS数据库的查询
2.另外所有的字段名称在加上"[]";[字段名1],[字段名1]...我记得以前测试的时候如果不加"[]"好像在条件查询中有问题,加上了就好了。
3.干脆去网上找吧,ACCESS数据库的SQL语句的写法和语法?网上有的。
fengbolixia 2009-12-18
  • 打赏
  • 举报
回复
同上 语法不支持
wuyq11 2009-12-18
  • 打赏
  • 举报
回复
可能不支持相关语法
tjjzxh 2009-12-18
  • 打赏
  • 举报
回复
select * from Balancelist bl where card_no in((select ca.card_no from CurrentAcc ca where ca.father_no='111') & (select ra.card_no from RegularAcc ra where ra.father_no='111'))
在Access2002中运行这个语句查询时,会让我数据库出现异常,自动就关闭了,是什么原因啊?? 郁闷中,搞了半天,都没弄明白....
tjjzxh 2009-12-18
  • 打赏
  • 举报
回复
我发现应该是在Access的in子查询语句中不能嵌套union查询语句, 但是这个功能不能不要啊! 还是需要继续寻求解决办法!!!!!继续求助
zhuqiang1988 2009-12-18
  • 打赏
  • 举报
回复
后面的语句没有错误,我想主要是你的查询语句哪点错了。
tjjzxh 2009-12-18
  • 打赏
  • 举报
回复
希望熟悉Access的朋友们可以给出详细的改进方案, 在线等,急啊!!!!!!!!
myshell 2009-12-18
  • 打赏
  • 举报
回复
Access的SQL功能没有SQL强大
tjjzxh 2009-12-18
  • 打赏
  • 举报
回复
select * from Balancelist bl where card_no in (select ca.card_no from CurrentAcc ca join DebitCard dc on ca.father_no='111' union select ra.card_no from RegularAcc ra join DebitCard dc on ra.card_no='111' union select fa.card_no from FinancialAcc fa join DebitCard dc on fa.card_no='111')

我分别在Mssql和Access中跑了上面这段查询语句,Mssql中是没问题的,Access中报“子查询中不存在此操作”,正如上面这位朋友所说,大家帮忙看看在Access中,上面的语句哪里是不是需要修改的?
cstester 2009-12-18
  • 打赏
  • 举报
回复
adapter.Fill没错误。。

报错不是说了么。子查询中不存在此操作。。


说明你SQL语句有错误啊。。。仔细检查, 把语句拿到 access运行一遍。能跑出来结果 在复制到程序里面来。
tjjzxh 2009-12-18
  • 打赏
  • 举报
回复
我在sql 查询语句中,使用了in子查询和union联合查询,难道使用了这个语句后,在调用OleDbDataAdapter.Fill()时有什么不同?

111,123

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧