C#Excel検査データが重複しているか、Table検査データが重複しているか
2632 ワード
最近、Excelデータをインポートする際に、データが重複しているかどうかを確認します.
1、Excelデータ自体が重複しているかどうかを確認します.
2、Excelのデータはデータベースのデータと重複していますか?
一、Excelのデータが重複しているかどうかを検査する方法は以下の通りである.
1、Tableのデータをselect文でフィルタリングする(ここでは2を参照).
2、forループを使用して手動で照合し、コードは以下の通りである.
二、Excelのデータがデータベースのデータと重複しているかどうかを検査する方法:
1、Tableを遍歴し、その中の各データをデータベースで繰り返し検査する.
この方法は、Tableのデータが少ない(100以内)場合に適用され、データベースの比較テーブルが大きい場合に適用されます.この方法は、データを比較するたびにデータベースに接続し、クエリーを実行するのに時間がかかるためです.
一応テストしてみると、Excelには2000件のデータがあり、データベースで検索するだけで7分40秒で46001000ミリ秒(ms)、約1件のデータ消費時間:230.5ミリ秒
実は、使用方式2は2000本導入して、時間も方式1より100本導入して、時間が少ないです.
2、データベースの中で比較する表のデータを1つのdatasetに取って、Tableを遍歴して、その中の各データをdatasetの中で重複を検査して、コードは以下の通りです:
from: http://www.bianceng.cn/Programming/csharp/201410/45747.htm
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