DataSet中的表是数据库里两个表通过inner join返回来的一个查询结果,对DataSet操作以后,怎样才能把改变的结果提交到相对应的表里呢?

解决方案 »

  1.   

    有一种可更新视图,可以完成你的功能.但微软都不提倡用.你自已看看吧.在T_Sql的帮助里有.///*************************///
    这两年来慢慢习惯了光说不练
    ///*************************///
      

  2.   

    解决方法
    1、在数据库端的存储过程中不用inner join,写两条select语句,中间用;隔开,例:
    Create Proc ttables
    As
    select * from a;select * from b2、显示数据
    DataSet ds=new DataSet();
    SqlDataAdapter sadp=new SqlDataAdapter("ttables","数据库连接字符吕");sadp.Fill(ds);
    ds.Tables[0].TableName="Table1";
    ds.Tables[1].TableName="Table2";ds.Relations.Add("这里随例写",ds.Tables["Table1"].Columns["ID"],ds.Tables["Tables"]).Columns["ID"];//假设a表的ID字段可以与b表的ID字段做关联 ;
    this.dataGrid1.DataSource=this.GetData();
    3、保存数据
    DataView dv1=new DataView(dt.Tables[0],"","",DataViewRowState.Added);
    DataView dv2=new DataView(dt.Tables[1],"","",DataViewRowState.Added);//第当这两上表被新加入记录时,对应的dv1和dv2会缓存这些记录.
    DataRow row;
     
    for(int i=0;i<dv1.Count;dv1++)
       {
          row=dv1[i];//将dv1中的第i行记录给row对象
          sadp.InsertCommand.CommandText="拥有insert语句的存储过程";
          sadp.InsertCommand.Parameters.Add("@ID",row[0]);
          sadp.InsertCommand.Parameters.Add("@ID",row[1]);  //向数据库中a表插入数据
       }
       sadp.InsertCommand.ExecuteNonQuery();for(int i=0;i<dv2.Count;dv1++)
       {
          row=dv2[i];//将dv1中的第i行记录给row对象
          sadp.InsertCommand.CommandText="拥有insert语句的存储过程";
          sadp.InsertCommand.Parameters.Add("@ID",row[0]);
          sadp.InsertCommand.Parameters.Add("@ID",row[1]);  //向数据库中b表插入数据
       }
       sadp.InsertCommand.ExecuteNonQuery();
    方法如上,可能还会有些小问题,自己调试一下.