各位:
    大家好!    小弟在用OracleDataAdapter来填充数据集的数据时遇到了下面的情况:    我们写了一个公共的数据访问方法,该方法传入一个SQL语句,返回一个数据集。如果SQL语句是操作一个表的那就没有什么问题,但要是操作几个表(select a.*,b.* from a,b where 某某条件)时,就会出现错误,这个错误的原因就是它把这两个表的所有约束全部取回到数据集中了,这样由于我的SQL语句是连接两个表的,所以原来是主键的列会出现空值的情况。
为什么我的SQL语句是连接个表时也把约束也取回来?
SQL连接语句不是相当于视图吗?怎么还要把原来两个表的约束都取回来?

解决方案 »

  1.   

    最好为SQL语句加上 INNER JOIN
      

  2.   

    还没试过用racleDataAdapter取值可能与SQL语句无关吧
      

  3.   

    sql语句一般不写成那样
    两个表的话试试INNER JOIN
      

  4.   

    SQL语句写得有问题,把你的SQL语句贴出来,大家研究一下,我个人认为SQL语句有问题的可能性比较大
      

  5.   

    楼上的SQL语句跟填充约束有关系吗?
      

  6.   

    纯粹是SQL语句写的有问题.
    我是用ORACLE数据库中,比如说两个表
    select * from tab1 a,tab2 b where a.id=b.id
    在这种情况下,将显示A表里面所有与B表关联的数据,与B表中关联的数据是不会显示的.
    如果我想显示A表中所有数据(含与B表没有关联的数据),那就
    select * from tab1 a,tab2 b where a.id=b.id(+)
    这样的话,A表中所有数据显示出来,非关联记录中的B表部分则为空
    按楼主的说法,你取回来的数据,如果有不可为空的列出现,则表示你SQL语句写错了.不是其他的问题.
      

  7.   

    zhangfire(色狼也可以学.net) : 我没有说要同时更新两个表,只是说为什么我的SQL语句会把这两个表的约束取回来?hchxxzx(net学习中) :select * from tab1 a,tab2 b where a.id=b.id(+) 这样的话,A表中所有数据显示出来,非关联记录中的B表部分则为空,我现在的情况就是在执行“select * from tab1 a,tab2 b where a.id=b.id(+)”时把tab1和tab2这两个表的约束全部赋给数据集。但有些情况下又不会,这是怎么回事?
      

  8.   

    这种情况出现的太不正常,你可找你出问题的SQL,打出来,在数据库里面测试一下,看是否会这样。如果数据库里面正常,则另外新建一个页面,建立一个单纯的环境,完全手工写一遍试一下,一般就可试出问题。
      

  9.   

    我一直再用OracleDataAdapter没有问题啊!不过肯定要写连接条件的!
      

  10.   

    应该不会呀,你是用的oracleclient吗
    对sql语句是跟sqlserver一样支持的
    你好好看看你的sql语句
      

  11.   

    make a monitor about your sql, test it in sql plus, and paste here
      

  12.   

    redbb(....Dotneter....欢迎猎头与我联系...) :把SQL语句放到Sql plus中运行是没有问题的