前不久小编遇到一个新需求,小编开发完毕后需要将两个EXcel导入数据库中的同一个表,大家有没有想明白该怎么做呢?没错了,方法其实有好多啦,先导入一个,第二个在导入的时候进行修改不就好了么,可惜的是,小编所做的系统中呢只有批量导入的功能,没有批量修改的功能,你想想13w的数据耶,我每搞错一次都会浪费半个小时以上的时间,痛则思痛,顿了好久一段时间,小编才想起如果两个DataTable能合并的话,那么只需要思考导入的不就可以了么?
来吧,展示代码

先将第一个Excel的数据储存起来

DataTable ly_AP_Datasdt = new();
/// <summary>
/// 导入带有的Excel
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnAPLYSizeImport_Click(object sender, EventArgs e)
{try{MaskLayer.Show("数据匹配中...");DataTable dt = NPOIHelper.ImportFromExcel("", "Sheet1", 0);if (dt == null){return;}if (dt.Rows.Count <= 0){MsgBox.ShowInformation("表中无任何有效数据");}List<HjbxxbDto> ListAll = DAL.QueryList<HjbxxbDto>(@$"select Catalog_No,lyCatalog_No,nameCn,Drug_Names from HaoYuanSystem.dbo.hjbxxb where lyCatalog_No<>''");//添加多个列,包括表头,以及数据类型ly_AP_Datasdt.Columns.Add("ID", typeof(int));ly_AP_Datasdt.Columns.Add("APCatalog_No", typeof(string));ly_AP_Datasdt.Columns.Add("APProduct_name", typeof(string));ly_AP_Datasdt.Columns.Add("LyCatalog_No", typeof(string));ly_AP_Datasdt.Columns.Add("Purity", typeof(string));ly_AP_Datasdt.Columns.Add("colorCn", typeof(string));ly_AP_Datasdt.Columns.Add("Size", typeof(string));ly_AP_Datasdt.Columns.Add("Remarks", typeof(string));ly_AP_Datasdt.Columns.Add("UpdatePerson", typeof(string));ly_AP_Datasdt.Columns.Add("UpdateTime", typeof(DateTime));ly_AP_Datasdt.Columns.Add("APStockID", typeof(string));for (int i = 0; i < dt.Rows.Count; i++){DataRow dr = dt.Rows[i];if (dr["...."] == null || string.IsNullOrEmpty(dr["...."].ToString().Trim())){continue;}if (dr["...."] == null || string.IsNullOrEmpty(dr["...."].ToString().Trim())){continue;}//判断数据库中是否存在相同的....if (ListAll.Find(x => x.lyCatalog_No == dr["...."].ToString().Trim()) == null){continue;}if (ly_AP_Datasdt.AsEnumerable().Where(c => c.Field<string>("APCatalog_No").Equals(dr["...."].ToString().Trim())).Count() > 0) { continue; }ly_AP_Datasdt.Rows.Add(0, dr["...."].ToString().Trim(), "", dr["...."].ToString().Trim(), "", "", dr["...."].ToString().Trim(), "", SystemInfo.UserName, DateTime.Now, 0);}MaskLayer.Close();if (ly_AP_Datasdt.Rows.Count == 0){MsgBox.ShowInformation("剔除已配置过....信息的产品,表中无任何有效数据!");return;}MsgBox.ShowInformation("识别到有效数据:" + ly_AP_Datasdt.Rows.Count + "条!请导入....号和....ID的Excel!");}catch (Exception ex){MsgBox.ShowInformation(ex.Message);}
}

再将第二个Excel的数据存在另一个DataTable中,然后将两的DataTable合并成一个DataTable,这样就能一次批量导入两个Excel的有效数据了

/// <summary>
/// 导入带有....Id的Excel
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnAPLYStockIdImport_Click(object sender, EventArgs e)
{try{MaskLayer.Show("数据匹配中...");DataTable dt = NPOIHelper.ImportFromExcel("", "Sheet1", 0);if (dt == null){return;}if (dt.Rows.Count <= 0){MsgBox.ShowInformation("表中无任何有效数据");}for (int i = 0; i < ly_AP_Datasdt.Rows.Count; i++){for (int j = 0;j < dt.Rows.Count; j++) {DataRow dr = dt.Rows[j];if (ly_AP_Datasdt.Rows[i]["APCatalog_No"].ToString().Trim() == dr["...."].ToString().Trim() && ly_AP_Datasdt.Rows[i]["LyCatalog_No"].ToString().Trim() == dr["...."].ToString().Trim()) {ly_AP_Datasdt.Rows[i]["APStockID"] = dt.Rows[j]["库存ID"].ToString().Trim();}}}MaskLayer.Close();if (MsgBox.ShowOKCancel("剔除已配置过....信息的产品,识别到有效数据:" + ly_AP_Datasdt.Rows.Count + "条!\r\n是否导入?") != DialogResult.OK){return;}MaskLayer.Show("数据导入中...");bool issussess = DAL.Table_Insert_Dt(ly_AP_Datasdt, "Ly_AP_NumCorrespondence");MaskLayer.Close();if (issussess){MsgBox.ShowInformation("导入....信息成功!共" + ly_AP_Datasdt.Rows.Count + "条");}}catch (Exception ex){MsgBox.ShowInformation(ex.Message);}finally{GetAPLyAPNumCorrespondenceList();}
}

补充一点,网上还有很多人在循环数据的时候将数据插入DataTable中的时候,经常在循环中写

DataRow dr = dt_temp.NewRow();
dr["id"] = Guid.NewGuid().ToString();
dr["name"] = "bgx";
dt_temp.Rows.Add(dr);

这样写的坏处就是每次都像是实例化了一次一样,小编起初也这样没想到添加一个Excel的时候居然会花一个小时,我这样子讲,你大概知道我有多么难以处理这13w的数据了吧,如果直接写

ly_AP_Datasdt.Rows.Add(0, dr["...."].ToString().Trim(), "", dr["...."].ToString().Trim(), "", "", dr["...."].ToString().Trim(), "", SystemInfo.UserName, DateTime.Now, 0);

就可以避免每次循环的时候都实例化了,如果大家没有那么大的数据量,那就当我没说,但是当数据量起来的时候,大家一定要思考该如何优化性能了

这几年里,身边的人总是在不断的发生变化,有的人早已买了车,有的人先准备买房,有的人已经结了婚甚至都有了小孩…,今天和一位朋友聊了一下,没想到他已经不做开发了,退居家乡,买了房,准备过几年结婚,小编起初还替他遗憾,没想到一下子到变成小编羡慕的对象了,大城市买房着实不容易,如果不靠自己父母,自己要打拼多久才能真正的拼出一个房子呢?哎,苦矣,人这一辈子有太多的身不由己,也许以自己喜欢的方式过完这一生也算一种不错的结局。

C# 将两个DataTable合并相关推荐

  1. 将两个DataTable合并成一个DataTable

    //两个结构一样的DT合并 DataTable DataTable1 = new DataTable(); DataTable DataTable2 = new DataTable(); DataTa ...

  2. 怎么将两个datatable 合并_视频音频合并大师免费版-视频音频合并大师2020版下载(附使用方法) v2020.02.08...

    视频音频合并大师免费版 是一款好用的视频合并软件,包括视频合并和音频合并,可以一次性将多个视频格式文件或音频文件合并成一个单独的视频文件,进行转换合并成你想要的视频,并且有多种自适应屏幕尺寸可以选择, ...

  3. 两个datatable合并 主键一样覆盖_MySQL 建表为啥还设置个自增 id ?用流水号当主键不正好么?...

    又要开始新项目了,一顿操作猛如虎,梳理流程加画图.这不,开始对流程及表结构了. 我:吧啦吧啦吧啦 -- 老大:这个建表为啥还设置个自增 id ?直接用流水号(用户号/产品号)当主键不就行了? 我:这个 ...

  4. python list合并_python基础===两个list合并成一个dict的方法

    def Run(): list2 = [, , , , ]; list3 = ["a", "b", "c", "d",& ...

  5. 转载CSDN(educast):c# 对两个Datatable的结构相同进行合并

    Datatable db=null;         DataTable dt = ds.Tables[0];         ////两个datatable进行合并          db = dt ...

  6. 2016.8.11 DataTable合并及排除重复方法

    合并: DataTable pros=xxx; DataTable pstar=yyy; //将两张DataTable合成一张 foreach (DataRow dr in pstar.Rows) { ...

  7. Java合并两个int数组合并_Java中如何把两个数组合并为一个

    在Java中,如何把两个String[]合并为一个? 看起来是一个很简单的问题.但是如何才能把代码写得高效简洁,却还是值得思考的.这里介绍四种方法,请参考选用. 一.apache-commons 这是 ...

  8. Python将两个图像合并成一个图像(横向合并)

    Python将两个图像合并成一个图像(横向合并) 目录 Python将两个图像合并成一个图像(横向合并) #原始图像

  9. c++两个vector合并_这才是真正的 Git:分支合并

    公众号关注 "GitHubDaily"设为 "星标",每天带你逛 GitHub! 本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件 ...

最新文章

  1. 屏幕滚动控件ScrollView的使用
  2. Tableau实战系列浏览 Tableau 环境(一) -初识tableau操作界面
  3. Boost:BOOST_VERIFY的用法测试程序
  4. .net获取客户端信息(二)ashx部分
  5. Redis 的安装与使用
  6. 太吾绘卷第一世攻略_耽美推文-BL-仿佛在攻略一只河豚
  7. 程序员越老越优秀吗?
  8. sd卡测速工具_拍完照回家发现SD卡损坏,拯救你的照片就用这个办法!
  9. git 应用 cherry-pick
  10. 一个小故事来形容几个常用网络技术
  11. 词法分析器代码分析报告
  12. log4j 2.x版本 日志按天分割,按文件大小分割
  13. CorelDRAW2022(CDR2022-64位),Win7 、Win10通用\免激活注册中文版安装图文教程
  14. 微信浏览器(jssdk)自定义分享按钮,自定义链接,图片,描述等
  15. CSDN如何获得积分白嫖资源?
  16. SVN权限的简单配置
  17. html鼠标事件没反应,电脑鼠标点击当前页面没反应怎么办
  18. setoolkit 制作钓鱼网页
  19. 难道我的博客也成了名人博客?
  20. JavaScript 各种验证(转自呆木头)

热门文章

  1. 【Flask项目】Redis各种数据类型操作命令
  2. 定期存款可以提前取出来吗_定期存款可以提前取出来吗 定期存款提前取出利息是怎么算的...
  3. 信息资源管理【四】之 信息资源内容管理
  4. 医药领域知识图谱快速及医药问答项目--项目探究
  5. 对计算机排版的分析,计算机排版技术水平对报纸质量的影响分析
  6. catia 创成钣金设计_CATIA钣金设计实例教程
  7. MySQL日期和时间函数的用法及使用举例
  8. Python面试之沪江网“数据爬虫算法实习”
  9. 交换机与路由技术-15-链路聚合
  10. LeetCode--597. 好友申请 I :总体通过率