04 octubre 2008

Borrar registros duplicados de un DataSet.

Si usas .Net para programar, alguna vez habrás usado el objeto DataSet para contener registros que provengan de una base de datos, que por lo general, está en SQL Sever. Si vas a llamar varias veces a una misma tabla y guardar el resultado de cada lectura en un solo dataset es recomendable ir actualizando los registro en este dataset para evitar duplicidad. El primer paso para ir combinando los registros en un dataset es usar el procedimiento Dataset.merge() y una vez terminado el llenado del dataset usar la siguiente función en código VB que recibe un dataset y el nombre del campo clave de la tabla como patrón para eliminar registros duplicados. Al terminar de buscar los registros repetidos regresa un nuevo dataset con registros únicos.
Public Shared Function delDupRows(ByVal dTable As DataSet, ByVal colName As String) As DataSet
Try
Dim hTable As Hashtable = New Hashtable()
Dim duplicateList As ArrayList = New ArrayList

For Each drow As DataRow In dTable.Tables(0).Rows
If (hTable.Contains(drow(colName))) Then
duplicateList.Add(drow)
Else
hTable.Add(drow(colName), String.Empty)
End If
Next drow

For Each drow As DataRow In duplicateList
dTable.Tables(0).Rows.Remove(drow)
Next drow

Return dTable
Catch ex As Exception
Return Nothing
End Try
End Function
End Class