9 Years
Discussion Span
Last Post by Ponchs


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")



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)

     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

     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

     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)

     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))
End Sub

Edited by mike_2000_17: Fixed formatting

This article has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.