sqlserver合并DataTable并排除重复数据的通用方法分享

来源:asp之家 时间:2012-01-05 18:59:56 

代码如下: 

代码如下:


///<summary>
/// 将两个列不同的DataTable合并成一个新的DataTable
///</summary>
///<param name="dt1">源表</param>
///<param name="dt2">需要合并的表</param>
///<param name="primaryKey">需要排重列表(为空不排重)</param>
///<param name="maxRows">合并后Table的最大行数</param>
///<returns>合并后的datatable</returns>
public static DataTable MergeDataTable(DataTable dt1, DataTable dt2, string primaryKey, int maxRows)
{
//判断是否需要合并
if (dt1 == null && dt2 == null)
{
return null;
}
if (dt1 == null && dt2 != null)
{
return dt2.Copy();
}
else if (dt1 != null && dt2 == null)
{
return dt1.Copy();
}
//复制dt1的数据
DataTable dt = dt1.Copy();
//补充dt2的结构(dt1中没有的列)到dt中
for (int i = 0; i < dt2.Columns.Count; i++)
{
string cName = dt2.Columns[i].ColumnName;
if (!dt.Columns.Contains(cName))
{
dt.Columns.Add(new DataColumn(cName));
}
}
//复制dt2的数据
if (dt2.Rows.Count > 0)
{
Type t = dt2.Rows[0][primaryKey].GetType();
bool isNeedFilter = string.IsNullOrEmpty(primaryKey) ? false : true;
bool isNeedQuotes = t.Name == "String" ? true : false;
int mergeTableNum = dt.Rows.Count;
for (int i = 0; i < dt2.Rows.Count && mergeTableNum < maxRows; i++)
{
bool isNeedAdd = true;
//如果需要排重时,判断是否需要添加当前行
if (isNeedFilter)
{
string primaryValue = dt2.Rows[i][primaryKey].ToString();
string fileter = primaryKey + "=" + primaryValue;
if(isNeedQuotes)
{
fileter = primaryKey + "='" + primaryValue + "'";
}
DataRow[] drs = dt.Select(fileter);
if (drs != null && drs.Length > 0)
{
isNeedAdd = false;
}
}
//添加数据
if (isNeedAdd)
{
DataRow dr = dt.NewRow();
for (int j = 0; j < dt.Columns.Count; j++)
{
string cName = dt.Columns[j].ColumnName;
if (dt2.Columns.Contains(cName))
{
//防止因同一字段不同类型赋值出错
if (dt2.Rows[i][cName] != null && dt2.Rows[i][cName] != DBNull.Value && dt2.Rows[i][cName].ToString() != "")
{
dr[cName] = dt2.Rows[i][cName];
}
}
}
dt.Rows.Add(dr);
mergeTableNum++;
}
}
}
return dt;
}

标签:DataTable,重复数据
0
投稿

猜你喜欢

  • Flask框架Flask-Login用法分析

    2022-05-20 08:21:27
  • GoJs的文本绘图模板TextBlock使用实例

    2023-08-26 16:01:00
  • Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】

    2023-05-14 08:03:02
  • php 多继承的几种常见实现方法示例

    2023-11-22 19:03:19
  • python实现多线程的方式及多条命令并发执行

    2023-08-09 11:37:20
  • 详解Python用户登录接口的方法

    2021-10-09 23:26:48
  • 如何用Python获取计算机名,ip地址,mac地址

    2021-12-31 05:41:04
  • C# 连接SQL数据库的方法及常用连接字符串

    2024-01-16 21:49:47
  • Pygame Rect区域位置的使用(图文)

    2023-08-14 05:27:48
  • python批量生成本地ip地址的方法

    2021-10-25 16:20:38
  • Django框架中模型的用法

    2022-02-15 00:34:14
  • mysql+Spring数据库隔离级别与性能分析

    2024-01-15 00:46:58
  • Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)

    2021-09-28 02:54:28
  • 可用于监控 mysql Master Slave 状态的python代码

    2023-01-05 07:39:30
  • Linux/Mac MySQL忘记密码命令行修改密码的方法

    2024-01-26 04:42:12
  • Alfred + Gitee搭建免费图床的使用实例详解

    2023-10-04 08:24:30
  • python使用matplotlib画柱状图、散点图

    2023-05-18 11:50:06
  • IE的button元素bug

    2009-12-08 12:39:00
  • Python2.7.10以上pip更新及其他包的安装教程

    2022-12-17 18:44:55
  • 安装docker-compose的两种最简方法

    2022-10-03 21:39:44
  • asp之家 网络编程 m.aspxhome.com