提供两个dataset每个都有n百条数据7个列 DISP_SQ, TABPAGE_NO, GR, WIDTH1, WIDTH2, WIDTH3, LB_WIDTH
1。dsOINIFORM2
2。dsNINIFORM2
比较两个dataset里面的数据,如果条数不相等并且信息不相同显示旧dataset信息,向用户提示是否更新信息。
当用户选择更新显示新dataset信息。

解决方案 »

  1.   

    可以说一下具体思路吗?DataSet.Container 怎么用?
      

  2.   

    有人知道dataset批量比较的处理方法吗?
      

  3.   

    可以这么用Equals
    dsOINIFORM2.Table.Equals(dsNINIFORM2.Table)
    如果相等返回true
      

  4.   

    dataset每个都有n百条数据7个列 DISP_SQ, TABPAGE_NO, GR, WIDTH1, WIDTH2, WIDTH3, LB_WIDTH 
    是不是DataSet 里面的 DataTable 呀?
     
    你的这些操作 用datatable 应该都可以解决的DataSet Myset;
    mYset.Tables["tablename"];
      

  5.   

     private void GetDataSet()
        {
            //得到第一个DataSet ds.Tables[0].Rows[][""]
            DataSet DsOne = new DataSet();
            //得到第二个DataSet
            DataSet DsTwo = new DataSet();
            //先判断看数据是否一致,不一致肯定提示更新
            if (DsOne.Tables[0].Rows.Count != DsOne.Tables[0].Rows.Count)
            {
                Response.Write("<Script> alert('是否要更新数据')</Script>");
                //绑定新数据源        }
            //数据相等,接着判断内容是否相等
            else if (DsOne.Tables[0].Rows.Count == DsOne.Tables[0].Rows.Count)
            {
                for (int i = 0; i < DsOne.Tables[0].Rows.Count; i++)
                {
                    if (DsOne.Tables[0].Rows[i][1] != DsOne.Tables[0].Rows[i][1])
                    {
                        Response.Write("<Script> alert('是否要更新数据')</Script>");
                        break;
                    }
                    else if (DsOne.Tables[0].Rows[i][2] != DsOne.Tables[0].Rows[i][2])
                    {
                        Response.Write("<Script> alert('是否要更新数据')</Script>");
                        break;
                    }
                    else if (DsOne.Tables[0].Rows[i][3] != DsOne.Tables[0].Rows[i][3])
                    {
                        Response.Write("<Script> alert('是否要更新数据')</Script>");
                        break;
                    }
                    else if (DsOne.Tables[0].Rows[i][4] != DsOne.Tables[0].Rows[i][4])
                    {
                        Response.Write("<Script> alert('是否要更新数据')</Script>");
                        break;
                    }
                    else if (DsOne.Tables[0].Rows[i][5] != DsOne.Tables[0].Rows[i][5])
                    {
                        Response.Write("<Script> alert('是否要更新数据')</Script>");
                        break;
                    }
                    else if (DsOne.Tables[0].Rows[i][6] != DsOne.Tables[0].Rows[i][6])
                    {
                        Response.Write("<Script> alert('是否要更新数据')</Script>");
                        break;
                    }
                    else if (DsOne.Tables[0].Rows[i][7] != DsOne.Tables[0].Rows[i][7])
                    {
                        Response.Write("<Script> alert('是否要更新数据')</Script>");
                        break;
                    }
                }
                //绑定新数据源
            }
            //完全相等
            else
            {
                //绑定旧的数据源
            }
        }
      

  6.   

    两个DATASET比较很麻烦的。。
    如果其中一个有点修改,就算之后修改回以前的值,用函数对比也会显示2个DATASET数据不一样。。
    最好的办法是你有修改其中一个DATASET后,定义个变量,来表示这个DATASET已经被修改了数据。。
    循环对比数据也不是不可以,太消耗了。。没必要吧
      

  7.   

    dsOINIFORM2.Table.Equals不成,是引用级了,
    只能一条一条去比吧,
      

  8.   


    foreach (DataRow row in dsOINIFORM1.Tables[0])
                {
                    foreach (DataRow row2 in dsOINIFORM2.Tables[0])
                    {
                        foreach (DataColumn col in dsOINIFORM1.Tables[0].Columns)
                        {
                            if (row[col] != row2[col.ColumnName])
                            {
                                //做一些数据不同时的操作
                            }
                        }
                    }
                }
      

  9.   

    DataSet.Container.Components把信息写入数组,然后进行比较,我想效果应该是差不多的
      

  10.   


    DataView dv=dataTable1.DefaultView;
    StringBuilder sb=new StringBuilder();
    int i=0;
    foreach(DataRow row in dataTable2.Rows)
    {    sb.Append(" columnName= '"+row.Columns["columnName"]+"'");
        if(i <dataTable2.Rows.Count)
            sb.Append(" and ");
        i++;
    }
    dv.RowFilter=sb.ToString();
    dataSource.DataSource=dv;
      

  11.   

      public static DataSet CompareDataSet(DataSet srcDataSet, DataSet destDataSet)
            {
                if (destDataSet == null || destDataSet.Tables.Count <= 0) return srcDataSet;
                if (srcDataSet == null || srcDataSet.Tables.Count <= 0) return srcDataSet;
                DataSet ds = new DataSet();
                DataTable srcTable = srcDataSet.Tables[0].Copy();
                srcTable.TableName = "table1"; 
                DataTable destTable = destDataSet.Tables[0].Copy();
                destTable.TableName = "table2";
                ds.Tables.Add(srcTable);
                ds.Tables.Add(destTable);
                try
                {
                    string relationName = "MidRelation";
                    int iColumnLen = srcTable.Columns.Count;
                    DataColumn[] parentDataColumn = new DataColumn[iColumnLen];
                    srcTable.Columns.CopyTo(parentDataColumn, 0);
                    DataColumn[] childDataColumn = new DataColumn[iColumnLen];
                    destTable.Columns.CopyTo(childDataColumn, 0);
                    DataRelation dataRelation = new DataRelation(relationName,
                        parentDataColumn, childDataColumn, false);
                    ds.Relations.Add(dataRelation);
                    DataRow[] drChild;
                    foreach (DataRow drParent in srcTable.Rows)
                    {
                        drChild = drParent.GetChildRows(dataRelation);
                        if (drChild == null || drChild.Length == 0) continue;
                        drParent.Delete();
                    }
                    srcTable.AcceptChanges();
                    DataSet rtnDs = new DataSet();
                    rtnDs.Tables.Add(srcTable.Copy());
                    return rtnDs;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    ds.Dispose();
                }
            } 
      

  12.   

    集合上面几位的代码我做的如下:
    27877条数据超级慢
     //データをチェックする
                   [align=left] if (dsOINIFORM2.Tables[0].Rows.Count == dsNINIFORM2.Tables[0].Rows.Count)
                    {
                        bool bolOK = false;                    for (int index1 = 0; index1 < dsNINIFORM2.Tables[0].Rows.Count; index1++)
                        {
                            for (int index2 = 0; index2 < dsOINIFORM2.Tables[0].Rows.Count; index2++)
                            {                            if (dsNINIFORM2.Tables[0].Rows[index1]["FORM_ID"].ToString() == dsOINIFORM2.Tables[0].Rows[index2]["FORM_ID"].ToString() &&
                                    dsNINIFORM2.Tables[0].Rows[index1]["FIELD_ID"].ToString() == dsOINIFORM2.Tables[0].Rows[index2]["FIELD_ID"].ToString())
                                {
                                    bolOK = true;                                if (dsNINIFORM2.Tables[0].Rows[index1]["DISP_SQ"].ToString() == dsOINIFORM2.Tables[0].Rows[index2]["DISP_SQ"].ToString())
                                    {
                                        bolOK = false;
                                    }
                                    else if (dsNINIFORM2.Tables[0].Rows[index1]["TABPAGE_NO"].ToString() != dsOINIFORM2.Tables[0].Rows[index2]["TABPAGE_NO"].ToString())
                                    {
                                        bolOK = false;
                                    }
                                    else if (dsNINIFORM2.Tables[0].Rows[index1]["GR"].ToString() != dsOINIFORM2.Tables[0].Rows[index2]["GR"].ToString())
                                    {
                                        bolOK = false;
                                    }
                                    else if (dsNINIFORM2.Tables[0].Rows[index1]["WIDTH1"].ToString() != dsOINIFORM2.Tables[0].Rows[index2]["WIDTH1"].ToString())
                                    {
                                        bolOK = false;
                                    }
                                    else if (dsNINIFORM2.Tables[0].Rows[index1]["WIDTH2"].ToString() != dsOINIFORM2.Tables[0].Rows[index2]["WIDTH2"].ToString())
                                    {
                                        bolOK = false;
                                    }
                                    else if (dsNINIFORM2.Tables[0].Rows[index1]["WIDTH3"].ToString() != dsOINIFORM2.Tables[0].Rows[index2]["WIDTH3"].ToString())
                                    {
                                        bolOK = false;
                                    }
                                    else if (dsNINIFORM2.Tables[0].Rows[index1]["LB_WIDTH"].ToString() != dsOINIFORM2.Tables[0].Rows[index2]["LB_WIDTH"].ToString())
                                    {
                                        bolOK = false;
                                    }                                if (bolOK == false)
                                    {
                                        dsOINIFORM2.Tables[0].Rows[index2]["FLG"] = 1;
                                    }                                break;
                                }
                            }
                        }[/align]
      

  13.   

    有种技术叫做LINQ  你可以试一下行不行
    他可以想sql一样去处理内存中的两个集合