读到DataSet里面 再进行比较
如果仅需要读取ID的话 占用的内存还是比较小的。
发一段我原来写的代码 性能还不错 /// <summary>
/// 比较两个DataSet,并产生增量数据
/// </summary>
/// <param name="oldDataSet">原始DataSet</param>
/// <param name="nowDataSet">现有DataSet</param>
/// <param name="primaryKey">原始DataSet和现有DataSet Tables[0]的主键</param>
/// <returns>DataSet</returns>
public DataSet CompareDataSet(DataSet oldDataSet, DataSet nowDataSet, string primaryKey)
{
//更新nowDataSet中的所有行,使之状态为DataRowState.UnChanged
nowDataSet.AcceptChanges();
//要返回的DataSet
DataSet newDataSet = new DataSet(); //设置oldDataSet 和 newDataSet Tables[0] 的主键
DataColumn dcOld = oldDataSet.Tables[0].Columns[primaryKey];
DataColumn dcNow = nowDataSet.Tables[0].Columns[primaryKey];
//设置主键
oldDataSet.Tables[0].PrimaryKey = new DataColumn[1] { dcOld };
nowDataSet.Tables[0].PrimaryKey = new DataColumn[1] { dcNow }; string primaryValue = string.Empty;
string where = string.Empty; foreach (DataRow drNow in nowDataSet.Tables[0].Rows)
{
//每行数据中,主键列所对应的值
primaryValue = drNow[primaryKey].ToString();
where = primaryKey + " = '" + primaryValue + "'"; //在oldDataSet 中查找和主键相同的行
DataRow[] drOld = oldDataSet.Tables[0].Select(where);
if (drOld.Length == 0)
{
drNow.SetModified();
}//说明nowDataSet中的这行数据是新增加的数据
else
{
for (int i = 0; i < drNow.ItemArray.Length; i++)
{
if (drNow.ItemArray.GetValue(i).ToString().Equals(drOld[0].ItemArray.GetValue(i).ToString()) == false)
{
drNow.SetModified();
break;
}//说明nowDataSet中的这行数据是修改过的数据
}
}//判断两行中的每一列是否相等
} //装载DataRowState为 Modified的行
DataTable dt = nowDataSet.Tables[0].GetChanges(DataRowState.Modified);
if (dt != null)
{
newDataSet.Tables.Add(nowDataSet.Tables[0].GetChanges(DataRowState.Modified));
} return newDataSet;
}
如果仅需要读取ID的话 占用的内存还是比较小的。
发一段我原来写的代码 性能还不错 /// <summary>
/// 比较两个DataSet,并产生增量数据
/// </summary>
/// <param name="oldDataSet">原始DataSet</param>
/// <param name="nowDataSet">现有DataSet</param>
/// <param name="primaryKey">原始DataSet和现有DataSet Tables[0]的主键</param>
/// <returns>DataSet</returns>
public DataSet CompareDataSet(DataSet oldDataSet, DataSet nowDataSet, string primaryKey)
{
//更新nowDataSet中的所有行,使之状态为DataRowState.UnChanged
nowDataSet.AcceptChanges();
//要返回的DataSet
DataSet newDataSet = new DataSet(); //设置oldDataSet 和 newDataSet Tables[0] 的主键
DataColumn dcOld = oldDataSet.Tables[0].Columns[primaryKey];
DataColumn dcNow = nowDataSet.Tables[0].Columns[primaryKey];
//设置主键
oldDataSet.Tables[0].PrimaryKey = new DataColumn[1] { dcOld };
nowDataSet.Tables[0].PrimaryKey = new DataColumn[1] { dcNow }; string primaryValue = string.Empty;
string where = string.Empty; foreach (DataRow drNow in nowDataSet.Tables[0].Rows)
{
//每行数据中,主键列所对应的值
primaryValue = drNow[primaryKey].ToString();
where = primaryKey + " = '" + primaryValue + "'"; //在oldDataSet 中查找和主键相同的行
DataRow[] drOld = oldDataSet.Tables[0].Select(where);
if (drOld.Length == 0)
{
drNow.SetModified();
}//说明nowDataSet中的这行数据是新增加的数据
else
{
for (int i = 0; i < drNow.ItemArray.Length; i++)
{
if (drNow.ItemArray.GetValue(i).ToString().Equals(drOld[0].ItemArray.GetValue(i).ToString()) == false)
{
drNow.SetModified();
break;
}//说明nowDataSet中的这行数据是修改过的数据
}
}//判断两行中的每一列是否相等
} //装载DataRowState为 Modified的行
DataTable dt = nowDataSet.Tables[0].GetChanges(DataRowState.Modified);
if (dt != null)
{
newDataSet.Tables.Add(nowDataSet.Tables[0].GetChanges(DataRowState.Modified));
} return newDataSet;
}
解决方案 »
- 两个小问题,一起问,大家帮忙看看。
- 求助!!!有人会用神鸟公司那个asp转换成asp.net的程序吗?
- 请问哪位大侠哥哥,会用 jquery.jpage.js分页绑定客户端table,因为数据量小用access数据库,小弟被这个分页晕了一星期,请各位大侠哥哥缓助
- 初学者问一个ascx文件的问题
- asp.net技术群 欢迎志同道合的朋友 过来讨论问题 最终达到共同进步
- 在静态网页中点击广告图片,如何操作后台数据库?
- 300分求能抓取网页中的图片全路径到一个字符串数组的正则表达式!
- sqldataAdapter和数据库的连接问题
- 关于oracle数据库的排序问题
- 急!!!怎样控制同一账号同密码不能同时在线的问题?
- AjaxPro初学者的问题
- log4net不同版本的问题
因为数据量可能是达到千万条的级别。
(2)我要做的是提供针对不同数据库的某些表中的数据的查询功能。
(3)这种查询功能我只需要提供实现,让其他开发人员调用,至于大数据量的性能问题我只能尽量的从程序方面考虑,因为具体的数据库我也不能进行操作。