2013-05-25 159 views
1

我想從數據表中刪除多個記錄 例如: 在我的案例中PaperId是重複幾個時間。我想刪除所有重複的記錄。從數據表中刪除行

我已經寫代碼,但環給錯誤

 DataSet ds = new DataSet(); 
     sqlDad.Fill(ds); 
     DataTable dt1 = new DataTable(); 
     ds.Tables.Add(dt1); 
     dt1 = ds.Tables[0]; 
     DataTable dt2 = new DataTable(); 
     dt2 = dt1; 
     List<DataRow> rowsToDelete = new List<DataRow>(); 

     foreach(DataRow dr in ds.Tables[0].Rows) 
     { 
      int r = ds.Tables[0].Columns.Count; 
      string x = dr.ItemArray[0].ToString(); 
      int counter = 0; 
      foreach (DataRow dr1 in ds.Tables[0].Rows) 
      { 

       if (x == dr1.ItemArray[0].ToString()) 
       { 
        counter++; 
       } 
       if (counter > 1) 
       { 
        rowsToDelete.Add(dr1); 
        foreach (DataRow row in rowsToDelete) 
        { 
         dt2.Rows.Remove(row); 
        } 
        dt2.AcceptChanges(); 
        rowsToDelete.Clear(); 
       } 

      } 
+0

什麼我錯誤? –

+0

問題是這樣的:它們是表中的多個值,可以通過查看PaperId來識別。我想刪除該特定PaperId左側的重複記錄只有一條記錄 – Himanshu

回答

1

使用DataTable的DefaultView和設置上,你不想重複出現在列的排序順序。你可以在行中循環,第一個

// Work on the first table of the DataSet 
DataTable dt1 = ds.Tables[0]; 
// No need to work if we have only 0 or 1 rows 
if(dt1.Rows.Count <= 1) 
    return; 

// Setting the sort order on the desidered column 
dt1.DefaultView.Sort = dt1.Columns[0].ColumnName; 

// Set an initial value (I choose an empty string but you could set to something not possible here 
string x = string.Empty;  

// Loop over the row in sorted order 
foreach(DataRowView dr in dt1.DefaultView) 
{ 
    // If we have a new value, keep it else delete the row 
    if(x != dr[0].ToString()) 
     x = dr[0].ToString(); 
    else 
     dr.Row.Delete(); 

} 
// Finale step, remove the deleted rows 
dt1.AcceptChanges(); 
1

後刪除所有的行試試這個

DataRow[] rows; 
rows=dataTable.Select("UserName = 'ABC'"); // UserName is Column Name 
foreach(DataRow r in rows) 
r.Delete(); 
0

如果你想從數據表刪除整個行

試試這個

DataTable dt = new DataTable(); //User DataTable 
DataRow[] rows; 
rows = dt.Select("UserName = 'KarthiK'"); 
foreach (DataRow row in rows) 
    dt.Rows.Remove(row);