提供两个dataset每个都有n百条数据7个列 DISP_SQ, TABPAGE_NO, GR, WIDTH1, WIDTH2, WIDTH3, LB_WIDTH
1。dsOINIFORM2
2。dsNINIFORM2
比较两个dataset里面的数据,如果条数不相等并且信息不相同显示旧dataset信息,向用户提示是否更新信息。
当用户选择更新显示新dataset信息。
1。dsOINIFORM2
2。dsNINIFORM2
比较两个dataset里面的数据,如果条数不相等并且信息不相同显示旧dataset信息,向用户提示是否更新信息。
当用户选择更新显示新dataset信息。
dsOINIFORM2.Table.Equals(dsNINIFORM2.Table)
如果相等返回true
是不是DataSet 里面的 DataTable 呀?
你的这些操作 用datatable 应该都可以解决的DataSet Myset;
mYset.Tables["tablename"];
{
//得到第一个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
{
//绑定旧的数据源
}
}
如果其中一个有点修改,就算之后修改回以前的值,用函数对比也会显示2个DATASET数据不一样。。
最好的办法是你有修改其中一个DATASET后,定义个变量,来表示这个DATASET已经被修改了数据。。
循环对比数据也不是不可以,太消耗了。。没必要吧
只能一条一条去比吧,
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])
{
//做一些数据不同时的操作
}
}
}
}
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;
{
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();
}
}
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]
他可以想sql一样去处理内存中的两个集合