应跳过数据表中的重复项

时间:2013-01-29 17:18:17

标签: c# datatable dataset

以下是输入文本文件。我通过数据表访问它,如下面的代码所示。

输入文件包含以下数据:

ABC
D
E
F
1234
2345
2345
BAC
A
B
C
2345
ABC
D
E
F
12345

我想得到以下输出:

ABC
D
E
F
1234
2345
2345
12345
BAC
A
B
C
2345

这是我试图通过数据表或数据集获取上述输出的代码。

class Program
{
    private string dirCSV = @"C:\Prod.txt";
    // load the file in the data in the data set
    public DataSet loadCVS()
    {
        DataSet ds = new DataSet();
        try
        {

            string connString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Text;", Path.GetDirectoryName(dirCSV));
            OleDbConnection conn = new OleDbConnection(connString);
            conn.Open();
            OleDbDataAdapter DA = new OleDbDataAdapter("SELECT * FROM Prod.txt", conn);
            DataTable DT = new DataTable();
            DA.Fill(DT);
            DT.DefaultView.Sort = "Item/Variant ASC";
            conn.Close();
        }     
        catch (Exception e){ /*Error*/}

        return ds;
    }
}

这里将使用:

static void Main(string[] args)
{
    Program obj = new Program();
    obj.loadCVS();
}

但是我得到了数据表中的数据,但我无法按上述格式输出中显示的日期。

你能帮忙吗?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

为避免重复记录只需在您的查询中使用Distinct ,它会提供不同的记录......

SELECT Distinct FieldName from Prod.txt

如果您想删除DATA TABLE中的重复项,请尝试以下代码

conn.Open();
OleDbDataAdapter DA = new OleDbDataAdapter("SELECT * FROM Prod.txt", conn);
DataTable DT = new DataTable();
DA.Fill(DT);
DT.DefaultView.Sort = "Item/Variant ASC";
Hashtable tempTable = new Hashtable();
ArrayList duplicateList = new ArrayList();
foreach (DataRow drow in DT.Rows)
 {
  if (tempTable.Contains(drow[yourcolName]))
     duplicateList.Add(drow);
  else
     tempTable.Add(drow[colName], string.Empty); 
 }
//Removes the duplicates from Datatable...
foreach (DataRow dRow in duplicateList)
  DT.Rows.Remove(dRow);

ds.Tables.Add(DT);
conn.Close();