• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > sqlserver合并DataTable并排除重复数据的通用方法分享

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

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了DataTable,重复数据等相关知识,希望本文的分享对您有所帮助

网上合并DataTable通用方法的文章很多,结合项目开发中的常用需求,并借鉴网上的做法,写了一个合并DataTable的通用方法,主要功能是合并两个DataTable(结构可以不同,如字段不完全一致),并可以根据某一列值进行排重处理

代码如下:
代码如下:
///
/// 将两个列不同的DataTable合并成一个新的DataTable
///

///源表
///需要合并的表
///需要排重列表(为空不排重)
///合并后Table的最大行数
///合并后的datatable
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;
}
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • SqlServer参数化查询之where in和like实现之xml和DataTable传参
  • sqlserver合并DataTable并排除重复数据的通用方法分享
  • 【原】超简单类型转换(DataTable

相关文章

  • 2018-12-05mysql中向表中某字段追加字符串的方法
  • 2018-12-05Oracle数据库下载及安装图文操作步骤
  • 2017-05-11MySQL中分页优化的实例详解
  • 2018-12-05SQL查询效率注意事项小结
  • 2018-12-05使用Innobackupex快速搭建(修复)MySQL主从架构
  • 2018-12-05mysql如何在删除外键之前判断外键是否存在
  • 2018-12-05linux下perl操作mysql数据库(需要安装DBI)
  • 2018-12-05MySQL高级十五——表的分区
  • 2018-12-05mysql之通过配置文件链接数据库的示例详解
  • 2018-12-05SQL 超时解决方案 有时并不是设置问题

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 实例讲解如何利用crontab定时备份MySQL
    • mysql服务1067错误多种解决方案分享
    • 如何查看设置MySQL数据库编码的方式?
    • 浅谈MySql的存储引擎(表类型)
    • SQL Server中选出指定范围行的SQL语句代码
    • oracle查看当前日期是第几个星期的方法
    • Linux上通过binlog文件恢复mysql数据库详细步骤_MySQL
    • MySQL之——MySQL Cluster集群搭建详解(基于RPM安装包)
    • MySQL之——基于Keepalived实现双机HA
    • mysqli多条sql语句查询

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有