两个dataset,里面的表的个数和表的结合都一样,但是数据用可能不同,需要作的是表一个dataset合并到另一dataset里,以一个dataset为准,把另一dataset里的数据进行合并,记录相同不变,不同进行更新,多出来的进行增加,少的进行删除

解决方案 »

  1.   

    没必要在这里合找到SQL语句然后从新查询 比这简单多了
      

  2.   

    在dataset里,好象不可以类似解决的
      

  3.   

    Merage 合并!      细节方法自己想,
      

  4.   

    用datatable实现啊。
                    DataTable da = new DataTable();
                    da.TableName = "DM_INFO";
                    DataColumn dc;
                    DataRow dr;                for (int i = 0; i < 你dataset中的列的数目; i++)
                    {
                        dc = new DataColumn();
                        dc.DataType = System.Type.GetType("System.String");
                        dc.ColumnName = "a" + i.ToString();
                        da.Columns.Add(dc);
                    }
    然后再:以一个dataset为基准,把这个dataset中的数据全部给datatable,如下:
     for (int i= 0; i < ds.Tables[tablename].Rows.Count; i++)
     for (int j = 0; j < ds.Tables[tablename].Columns.Count; j++)
    {
      dr = da.NewRow();
      dr["aj"] = ds.Tables[datatablename].Rows[i][j].ToString();
      da.Rows.Add(dr);
    }
    再用另一个dataset里面的内容与datatable里面的内容进行比较去掉相同数据。
    /////////////////////////////////////////////////////////
    //////这里的算法自己搞搞。
    /////////////////////////////////////////////////////////
    最后:
    DataView dv = new DataView(da);
      

  5.   

    用DataSet中对应的Table的行的RowState属性.此属性有五种状态DataRowState.Added,Deleted,
    Detached,Modified,Unchanged
      

  6.   

    使用DataSet.Merge()方法来实现。
      

  7.   

    dataset.merge() 后的dataset能更新数据库吗,我怎么用sqldataadapter.update()不成功,merge后就不能检测到是那一个行变化了
      

  8.   

    merge() 应该有主键的限制没把,我merge()后发现相同主键的数据被保留
      

  9.   

    merge() 方法有三个参数,将第二个参数设置为False,相同主键但被更新的数据,也会Merge进去的
      

  10.   

    dsget.Merge(ds);
    if (dsget.HasChanges(DataRowState.Modified | DataRowState.Deleted|DataRowState.Added))
                    {
                        MessageBox.Show("");
                    }
                    DataSet dsGetchange = dsget.GetChanges();
                
                    if (dsGetchange!=null)
                    {                    da.Update(dsGetchange);//更新数据库
                        
                    }merge()完后好像 dataset.haschanges为空,if条件不起作用,而且dschange也为空,
    这样的话是不是要想更行数据库,就得用两个dataset得datarow来操作
      

  11.   

    用 DATATABLE 做 可以实现 要用到DataTable.Select()判断是否存在 不存在就加入 用这个方法你自己试试
      

  12.   


    dsCust1.Merge(dsCust2);
    SqlCommandBuilder objBuilder = new SqlCommandBuilder(adpt);adpt.UpdateCommand = objBuilder.GetUpdateCommand();
    adpt.InsertCommand = objBuilder.GetInsertCommand();
    adpt.DeleteCommand = objBuilder.GetDeleteCommand();DataTable updTable = dsCust1.Tables[0];
    adpt.Update(updTable.Select(null, null, DataViewRowState.Added));可以成功!但是我把它作出个webservice就不行,我传给webservice一个dataset,然后webservice把这个dataset和从数据库里查出的dataset进行merge。但是怎么不成功
      

  13.   

    (接上)merge后进行数据库更新,怎么看不到更新啊
      

  14.   

    dataset 本身就有该功能。
    用Merge() 方法
      

  15.   

    DataSet ds = new DataSet();
    for(int i=0;i<ds.Tables[0].Rows.Count;i++)
    {
    DataRow dr = ds.Tables[1].NewRow(); for(int j=0;j<ds.Tables[0].Columns.Count;j++)
    {
    dr[i] = ds.Tables[0].Rows[i];
    } try
    {
    ds.Tables[1].Rows.Add(dr);
    }
    catch(Exception ex)
    {
    string Err = ex;

    }
      

  16.   

    DataSet ds = new DataSet();
    for(int i=0;i<ds.Tables[0].Rows.Count;i++)
    {
    DataRow dr = ds.Tables[1].NewRow(); for(int j=0;j<ds.Tables[0].Columns.Count;j++)
    {
    dr[j] = ds.Tables[0].Rows[i][j];
    } try
    {
    ds.Tables[1].Rows.Add(dr);
    }
    catch(Exception ex)
    {
    string Err = ex;

    }
    刚发错了
      

  17.   

    我明白你的意思,是操作dataset里的datatable,我用dsCust1.Merge(dsCust2);
    SqlCommandBuilder objBuilder = new SqlCommandBuilder(adpt);adpt.UpdateCommand = objBuilder.GetUpdateCommand();
    adpt.InsertCommand = objBuilder.GetInsertCommand();
    adpt.DeleteCommand = objBuilder.GetDeleteCommand();DataTable updTable = dsCust1.Tables[0];
    adpt.Update(updTable.Select(null, null, DataViewRowState.Added));这个方法来更新数据库,行吗?
      

  18.   

    看看 DataSet.MergeFailed 事件发生没有
      

  19.   

    用sqldataadapter进行更新,必须datatable里datarow的datarowstate不是unchange的,所以必须把新merge来的数据的datarowstate属性进行更改,但是这个属性就只读的,这样就比较麻烦,我用一个临时dataset进行,把要加入的的dataset里的数据加到临时dataset里,这时临时的dataset的datarowstate就是added,然后在进行更改和删除操作,datarowstate就是deleted和update的,这样虽然可行,但是比较麻烦