hi
im having a dataset in which i have to filter a column with unique values

Hi,

Refine ur Query, which u use to fill the Dataset:
check this:

MyStr = "Select Distinct FldName From MyTable"
OCmd = New OleDbCommand(MyStr, oConn)
da.SelectCommand = OCmd
da.Fill(oDS, "t1")

Regards
Veena

hi veena

im fetching records from excel file
"distinct" keyword is not support by that
and i have to handle more than 30000 records
i have to use "select query" inside that dataset help me out in thiz way
a column i have to filter has repeated records so i have to use "select distinct " inside that dataset i dont know how to do it

The only way is to handle selection with a function:

Public Shared Function SelectDistinct(ByVal SourceTable As DataTable, ByVal ParamArray FieldNames() As String) As DataTable
     Dim lastValues() As Object
     Dim newTable As DataTable

     If FieldNames Is Nothing OrElse FieldNames.Length = 0 Then
          Throw New ArgumentNullException("FieldNames")
     End If

     lastValues = New Object(FieldNames.Length - 1) {}
     newTable = New DataTable

     For Each field As String In FieldNames
          newTable.Columns.Add(field, SourceTable.Columns(field).DataType)
     Next

     For Each Row As DataRow In SourceTable.Select("", String.Join(", ", FieldNames))
          If Not fieldValuesAreEqual(lastValues, Row, FieldNames) Then
               newTable.Rows.Add(createRowClone(Row, newTable.NewRow(), FieldNames))

               setLastValues(lastValues, Row, FieldNames)
          End If
     Next

     Return newTable
End Function

Private Shared Function fieldValuesAreEqual(ByVal lastValues() As Object, ByVal currentRow As DataRow, ByVal fieldNames() As String) As Boolean
     Dim areEqual As Boolean = True

     For i As Integer = 0 To fieldNames.Length - 1
          If lastValues(i) Is Nothing OrElse Not lastValues(i).Equals(currentRow(fieldNames(i))) Then
               areEqual = False
               Exit For
          End If
     Next

     Return areEqual
End Function

Private Shared Function createRowClone(ByVal sourceRow As DataRow, ByVal newRow As DataRow, ByVal fieldNames() As String) As DataRow
     For Each field As String In fieldNames
          newRow(field) = sourceRow(field)
     Next

     Return newRow
End Function

Private Shared Sub setLastValues(ByVal lastValues() As Object, ByVal sourceRow As DataRow, ByVal fieldNames() As String)
     For i As Integer = 0 To fieldNames.Length - 1
          lastValues(i) = sourceRow(fieldNames(i))
     Next
End Sub

Edited 3 Years Ago by mike_2000_17: Fixed formatting

This article has been dead for over six months. Start a new discussion instead.