zoukankan      html  css  js  c++  java
  • C# Excel数据验重及Table数据验重

    http://blog.csdn.net/jiankunking/article/details/38398087

    最近在做导入Excel数据的时候,要检验数据是否重复:
    1、要检验Excel数据本身是否有重复?

    2、Excel中的数据是否与数据库中的数据重复?

    一、检验Excel中数据是否重复的方式有:
    1、将Table中的数据使用select语句来过滤(此处略,可以参考二)。
    2、使用for循环来手动核对,代码如下:

    #region 记录Excel中的重复列
    /// <summary>
    /// 记录Excel中的重复列
    /// </summary>
    /// <param name="dt">需要获取重复列的表</param>
    /// <returns>提示重复信息</returns>
    private string GetDistinctTable(DataTable dt)
    {
    //DataTable dtClone = dt;这种方式是错误的,因为这种情况,修改dtClone的同时dt也会被修改。
    DataTable dtClone = dt.Clone(); ;
    string vsSubAcctNo = string.Empty;
    string vsAcctNo = string.Empty;
    string repeatExcel = string.Empty;
    string vsTransDate = string.Empty;
    for (int i = dtClone.Rows.Count - 1; i >= 0; i--)
    {
    vsSubAcctNo = dtClone.Rows[i][4].ToString().Trim();
    vsAcctNo = dtClone.Rows[i][1].ToString().Trim();
    vsTransDate = dtClone.Rows[i][8].ToString().Trim();
    dtClone.Rows[i].Delete();
    dtClone.AcceptChanges();
    for (int j = dtClone.Rows.Count - 1; j >= 0; j--)
    {
    if (vsSubAcctNo == dtClone.Rows[j][4].ToString().Trim() && vsAcctNo == dtClone.Rows[j][1].ToString().Trim() && vsTransDate == dtClone.Rows[j][8].ToString().Trim())
    {
    //如果重复了,进行记录
    repeatExcel += "第" + (i + 1).ToString() + "行 ";
    break;
    }
    }
    }
    return repeatExcel;
    }
    #endregion

    小注:

    clone应该修改为为copy

    二、检验Excel中数据是否与数据库中数据重复的方式有:

    1、遍历Table并将其中每条数据,在数据库中检验重复。
    这种方式适用于Table中数据比较少(100以内),而数据库中要对比表很大的情况。因为这种方式要每对比一条数据,都要连接数据库,并执行查询,很费时间。
    大体测试了一下,Excel中有2000条数据,仅仅在数据库中查询,就消耗了7分40秒即4601000 毫秒(ms),大约一条数据耗时:2300.5毫秒
    其实,使用方式2导入2000条,耗时也比方式1导入100条,耗时少。
    2、将数据库中要对比的表数据取到一个dataset中,遍历Table并将其中每条数据,在dataset中检验重复,代码如下:

    strTemp = "AcctNo='" + obZH.ToString() + "' and TransDate='" + obRQ.ToString() + "' and SubAcctNo='" + obDFZH.ToString() + "'";
    rowsTemp = dsTemp.Tables[0].Select(strTemp);
    if (rowsTemp.Length>0)
    {
    //如果重复了,进行记录
    repeatDj += "第" + v.ToString() + "行 ";
    }

  • 相关阅读:
    java 数组的基本概念
    java 简单类
    python3 爬虫教学之爬取链家二手房(最下面源码) //以更新源码
    python3 爬虫之爬取安居客二手房资讯(第一版)
    python3 怎么统计英文文档常用词?(附解释)
    python3 怎么爬取新闻网站?
    ASP.NET 线程详解
    EF6 对于实体字段类型转换扩展
    mysql之调优概论
    mysql8之与标准sql的区别
  • 原文地址:https://www.cnblogs.com/Echo529/p/6386714.html
Copyright © 2011-2022 走看看