1.据我所知,好象一次只能填一个表到DATASET中。
2.返回的只是一个表,这个表拥有几个表中所有的字段.

解决方案 »

  1.   

    1.每个DataAdapter对应一个表,除非使用时重新设置DataAdapter的参数,否则它只能用于Fill一个表。
    2.如果SQL语句没问题的话,肯定是返回一个table。
      

  2.   

    DataSet是可以放多表的,但是从数据库中一此只能读出一个记录集,一个记录集相当于一张表,因此应该是一次只能填充一张表。返回的是一个记录集,其中包括Header,Wells,Curve得所有字段。至于有哪些记录,要看你的数据库而定,可能会产生冗余的记录。
    INNER JOIN实际上是做卡迪尔积,然后再从中选择Header.ID = Wells.ID的记录。
    Header INNER JOIN Wells ON Header.ID = Wells.ID相当于select * from Header,Wells where  Header.ID = Wells.ID.
      

  3.   

    1:你可以用关系来做 public DataSet GetTreeDts(string connString)
    { SqlConnection sqlConn = new SqlConnection(connString);
    SqlDataAdapter adapter;
    //创建空记录集
    DataSet ds = new DataSet();
    //级联数据表1
    string strSql = "SELECT oId , oName FROM table1";
       adapter = new SqlDataAdapter(strSql,sqlConn);
    adapter.Fill(ds,"Table0");
    //级联表子表2
    string strSql2 = "SELECT oId , dd FROM table2";
    adapter = new SqlDataAdapter(strSql2,sqlConn);
    adapter.Fill(ds,"Table1");
    //级联仪器类型表-子表
    string strSql3 = "SELECT oId,cc  FROM table3";
    adapter = new SqlDataAdapter(strSql3,sqlConn);
    adapter.Fill(ds,"Table2");
    //创建级联关系
    DataColumn dc1 = ds.Tables[0].Columns[0];
    DataColumn dc2 = ds.Tables[1].Columns[1];
    DataColumn dc3 = ds.Tables[0].Columns[0];
    DataColumn dc4 = ds.Tables[2].Columns[1];
    ds.Relations.Add("Def1",dc1,dc2);
    ds.Relations.Add("Def2",dc3,dc4);
    return ds;
    }
    我随手写的你参照一下!
      

  4.   

    2:INNER JOIN see:
    http://www.dw-mx.com/tutorial/tutorial_text.asp?N_ID=117
      

  5.   

    应该是一次查询,只能添加到一个表中,不管是adapter还是command。
    参见:
    ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemdataconstraintcollectionclasstopic.htm
    在建立关系时,外键约束自动已经建立。
      

  6.   

    OleDbDataAdapter的Fill()函数其实就是调用其SELECTCOMMAND选择数据,并将数据填充到相应的数据集,因此每次都只能填一张表而已。
    还有,SQL语句里边最好使用参数,要不条件写多的时候你自己会乱的。
      

  7.   

    SELECT Header.*, Wells.*, Curve.* FROM ((Header INNER JOIN Wells ON Header.ID = Wells.ID) INNER JOIN Curve ON Header.ID = Curve.ID)
    改为:
    SELECT a.*, b.*, c.* FROM Header a INNER JOIN Wells b ON Header.ID = Wells.ID INNER JOIN Curve c ON Header.ID = Curve.I
    这个语句返回三个表中的数据条件是 Header.ID ,Curve.I,Wells.ID 的数值必须同时存在相等,即它返回三个表中的所有列,但只返回在联接列中具有相等值的行。如果你建立了外键约束的话,它返回的就是三个表中所有的记录!
    一下子能填充多个表吗?
    可以的!
      

  8.   

    SORRY!改为:
    改为:SELECT a.*, b.*, c.* FROM Header a 
    INNER JOIN Wells b ON a.ID = b.ID 
    INNER JOIN Curve c ON a.ID = c.I
      

  9.   

    to  youngby(诗人:$(!@杰拉*…^%正版男生#@) 
    可以填充 DataSet中的多个表吗,
    我只知道可以把数据库中的多表数据一次只能填充到DataSet的一个表中。
    按照你说的,应该怎么添冲呢。
      

  10.   

    第2问已经有人答出我来答第一问吧,上面的各位都错了,可以一次Fill多表.
    string strSql="select * from header select * from curve"SqlDataAdapter(strSql,sqlConn)这样就有两个表了,这样可以只有一次请求,速度快.
      

  11.   

    呵呵,多谢  qiaoba(一路坎杀) ,我试试看。能把数据一次性添加入DataSet已存在的两个表中吗。