Rubrik: Datenbanken · DataSet/DataTable | VB-Versionen: VB2008, VB2010, VB2012 | 29.10.13 |
DataTable.Select Routine zum Eintragen von selektierten Datensätzen in eine DataTable. | ||
Autor: Manfred Bohn | Bewertung: | Views: 16.670 |
ohne Homepage | System: Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Die Klasse System.Data.DataTable bietet die Möglichkeit, ein Array von Datensätzen abzufragen, deren Daten vorgegebenen Filterbedingungen genügen (Select-Methode). Überladungen dieser Methode erlauben dabei die Angabe einer Sortier-Reihenfolge. Zusätzlich kann der aktuelle Zeilen-Zustand (RowState) als Filter vorgegeben werden.
Bei der Formulierung dieser Auswahlkriterien als "Filterstring" sind die Regeln der DataColumn.Expression-Eigenschaft anzuwenden. Gewöhnungsbedürftig! Einige Hinweise:
- Abfrage-Zeichenfolgen sind zwischen Hochkommas zu setzen, die "CaseSensitive"-Einstellung der Datatable findet Berücksichtigung. Platzhalter-Zeichen sind nur am Anfang und/oder Ende zulässig.
- Falls bei Spaltenbezeichnern eine Verwechslung mit Schlüsselwörtern möglich ist, sind eckige Klammern erforderlich (und ggf. Escapezeichen).
- Es wird stets die "invariante Kultur" erwartet. Dezimalzahlen sind deshalb mit Dezimalpunkt anzugeben. Dabei ist zu beachten, dass die Dezimalzahl-Umwandlung in den Datentyp "Decimal" oder "Double" erfolgen kann, abhängig von Ausprägung und Schreibweise.
- Enumerationswerte sind als Ganzzahlen anzugeben.
- Datums-Werte sollten vom "Pound Sign" (#) eingeschlossen werden. Das invariante DateTime-Format ist erforderlich.
Für die Abfrage von Zeilen mit fehlenden Spalten-Werten steht "IS NULL" zur Verfügung.
Um das Array der abgefragten Datensätze als DataTable-Instanz zu erhalten, kann folgende Funktion genutzt werden. (Bei ungeeigneten Parametern werden Ausnahmen ausgelöst.)
''' <summary>gefilterte Datensätze als DataTable zurückgeben</summary> ''' <param name="dt">Table, deren Datensätze zu filtern sind</param> ''' <param name="filterstring">Filterbedingungen</param> Private Function SelectRows(ByVal dt As DataTable, _ ByVal filterstring As String) As DataTable ' Zeilen abfragen, die dem Filterstring entsprechen Dim rows_selected() As DataRow = dt.Select(filterstring) ' Tabelle für gefilterte Zeilen Dim dt_select As New DataTable ' Tabellenschema übertragen dt_select = dt.Clone ' Gefilterte Zeilen eintragen For Each row As DataRow In rows_selected dt_select.ImportRow(row) Next row ' Tabelle mit gefilterten Sätzen zurückgeben Return dt_select End Function