DataSet myDS=new DataSet();    SqlDataAdapter SqlDA1=new SqlDataAdapter("Select * from Catalog1 where CriterionID='"+ id +"'",myCnn);
    SqlDA1.Fill(myDS,"Catalog1");    SqlDataAdapter SqlDA2=new SqlDataAdapter("Select * from Catalog2",myCnn);
    SqlDA2.Fill(myDS,"Catalog2");    SqlDataAdapter SqlDA3=new SqlDataAdapter("Select * from Item",myCnn);
    SqlDA3.Fill(myDS,"Item"); //在表之间创建关系
myDS.Relations.Add("bc", myDS.Tables["Catalog1"].Columns["Catalog1ID"],myDS.Tables["Catalog2"].Columns["Catalog1ID"]);
myDS.Relations.Add("cd", myDS.Tables["Catalog2"].Columns["Catalog2ID"],myDS.Tables["Item"].Columns["Catalog2ID"]);运行提示错误:不能启用此约束,因为不是所有的值都具有相应的父值。
经过分析,发现是第一个查询语句使用里条件查询“ where CriterionID='"+ id +"' ”,去掉后正常。可是我又需要条件查询,该怎么决绝呢?

解决方案 »

  1.   

    where CriterionID="+ id +"
      

  2.   

    SqlDataAdapter SqlDA2=new SqlDataAdapter("Select * from Catalog2",myCnn);
    =====>
    SqlDataAdapter SqlDA2=new SqlDataAdapter("Select * from Catalog2 where Catalog1ID in (select Catalog1ID from Catalog1 where CriterionID='"+id+"')",myCnn);SqlDataAdapter SqlDA3=new SqlDataAdapter("Select * from Item",myCnn);
    =====>
    SqlDataAdapter SqlDA3=new SqlDataAdapter("Select * from Item where Catalog2ID in (select Catalog2ID from Catalog2 where catalog1ID in (select Catalog1ID from Catalog1 where CriterionID='"+id+"'))",myCnn);
      

  3.   

    原因在在这,根据出错的信息可值,你的两个查询出来的记录并不是第二个中的所有记录在第一个中都有。所以:
    SqlDataAdapter SqlDA2=new SqlDataAdapter("Select * from Catalog2",myCnn);
    改成
    SqlDataAdapter SqlDA2=new SqlDataAdapter("Select * from Catalog2 where Catalog1ID in (select Catalog1ID from Catalog1 where CriterionID='"+id+"')",myCnn);相映的你的
    SqlDataAdapter SqlDA3=new SqlDataAdapter("Select * from Item",myCnn);
    改成
    SqlDataAdapter SqlDA3=new SqlDataAdapter("Select * from Item where Catalog2ID in (select Catalog2ID from Catalog2 where catalog1ID in (select Catalog1ID from Catalog1 where CriterionID='"+id+"'))",myCnn);
      

  4.   

    创建关联时,主表中的关联字段必须唯一!
    比如你在建立商品档案和计量单位的关系时,
    就不能用商品档案表中的计量单位ID去关联计量单位表中的ID字段
    因为商品档案表中的计量单位ID有重复!
    这时候你必须把计量单位表作为主表,而把商品档案表作为从表;
    因为计量单位表的ID是唯一,而商品档案表中的计量单位ID不唯一!
    明白了吗?