C#Excel検査データが重複しているか、Table検査データが重複しているか

2632 ワード

最近、Excelデータをインポートする際に、データが重複しているかどうかを確認します.
1、Excelデータ自体が重複しているかどうかを確認します.
2、Excelのデータはデータベースのデータと重複していますか?
一、Excelのデータが重複しているかどうかを検査する方法は以下の通りである.
1、Tableのデータをselect文でフィルタリングする(ここでは2を参照).
2、forループを使用して手動で照合し、コードは以下の通りである.
#region    Excel       
  ///   
  ///   Excel       
  ///   
  ///            
  /// URL:http://www.bianceng.cn/Programming/csharp/201410/45747.htm
  ///         
  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
"; break; } } } return repeatExcel; } #endregion

二、Excelのデータがデータベースのデータと重複しているかどうかを検査する方法:
1、Tableを遍歴し、その中の各データをデータベースで繰り返し検査する.
この方法は、Tableのデータが少ない(100以内)場合に適用され、データベースの比較テーブルが大きい場合に適用されます.この方法は、データを比較するたびにデータベースに接続し、クエリーを実行するのに時間がかかるためです.
一応テストしてみると、Excelには2000件のデータがあり、データベースで検索するだけで7分40秒で46001000ミリ秒(ms)、約1件のデータ消費時間:230.5ミリ秒
実は、使用方式2は2000本導入して、時間も方式1より100本導入して、時間が少ないです.
2、データベースの中で比較する表のデータを1つの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
"; }

from:  http://www.bianceng.cn/Programming/csharp/201410/45747.htm