程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C# Excel檢驗數據是否重復及Table檢驗數據是否重復

C# Excel檢驗數據是否重復及Table檢驗數據是否重復

編輯:關於C#

最近在做導入Excel數據的時候,要檢驗數據是否重復:

1、要檢驗Excel數據本身是否有重復?

2、Excel中的數據是否與數據庫中的數據重復?

一、檢驗Excel中數據是否重復的方式有:

1、將Table中的數據使用select語句來過濾(此處略,可以參考二)。

2、使用for循環來手動核對,代碼如下:

#region  記錄Excel中的重復列  
  /// <summary>  
  /// 記錄Excel中的重復列  
  /// </summary>  
  /// <param name="dt">需要獲取重復列的表</param>  
  /// URL:http://www.bianceng.cn/Programming/csharp/201410/45747.htm
  /// <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() + "行\r\n";  
                  break;  
              }  
          }  
      }  
      return repeatExcel;  
  }  
  #endregion

二、檢驗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() + "行\r\n";  
          }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved