string sqlMain = "select id,...";
string sqlDetail="select id,...";
string sql = sqlMain+";"+sqlDetail;
//Execute sql and fill data in DataSet ds
DataColumn c1 = ds.Tables[0].Column["id"];
DataColumn c2 = ds.Tables[1].Column["id"];
DataRelation dataRelation  = new DataRelation("RelationName",c1,c2);
ds..Relations.Add(dataRelation);

解决方案 »

  1.   

    谢谢jiezhi(風依舊) ,用DataRelation确实可以创建外键关系,但是它是以知道数据库结构和关系存在方式为基础的,也就是说你还无法使用“映射”的方法用程序来自动生成这些在数据库中已有的关系。
    MSDN中关于FillSchema的说明中有:“请注意,主键和唯一约束按照上述规则添加到 ConstraintCollection 中,但不添加其他约束类型。”。
    所以,目前我还找不到能用程序来映射外键的方法。
    请问,各位有何高见?
      

  2.   

    在SqlDataAdpter.fill方法之前,把SqlDataAdpter.MissingSchemaAction属性设为:MissingSchemaAction.AddWithKey试一下!!!
      

  3.   

    你不用设计环直接做吗?很简单的。例TBLA,TBLB
    TBLA.id==>TBLB.ZID
    直接托动TBLA.id到TBLB.ZID就OK了
      

  4.   

    谢谢 BearRui(我有点笨,但我很特别,所以我特别笨!) ,但是如MSDN所说,SqlDataAdpter.MissingSchemaAction属性设为:MissingSchemaAction.AddWithKey只能将数据库中的主键和唯一键映射过来,而没办法将外键直接映射过来。查遍了MSDN也找不到一个用编程映射的方式来添加外键的例子!
    微软给出的方式都是用可视设计器来完成的。
      

  5.   

    谢谢 tylike(天外来客) ,如果用设计器来做就不能动态添加外键了,而且你还必须知道所有要添加的外键的具体细节。所以对于业务和界面的程序员来说就显得比较复杂了。