Laden...

[erledigt]DataTable.Select mit Wildcard-Charlists möglich?

Erstellt von bredator vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.081 Views
B
bredator Themenstarter:in
357 Beiträge seit 2010
vor 12 Jahren
[erledigt]DataTable.Select mit Wildcard-Charlists möglich?

verwendetes Datenbanksystem: MS Access 97

Hallo zusammen,

ich habe derzeit eine Select-Lösung, bei der ich immer wieder auf eine Access-DB zugreife. Damit geht das gewünschte zwar, ist aber bei vielen Abfragen natürlich relativ langsam. Die Abfragen sehen so aus, dass ich Ergebnisse einer OCR-Operation als Charlisten in die Select-Abfrage einbaue. Also in etwa: SELECT * FROM Stammsatz WHERE strName LIKE '[HNM][AEH][LI1][LI1][O0o]%' -> Ergibt "Hallo" im Stammsatz.

Nun dachte ich mir, dass das doch schneller sein könnte (bin mir nicht sicher), den gesamten Stammsatz auszulesen (was sowieso 1x am Anfang passiert) und dann mit DataTable.Select dieselben Abfragen auszuführen. Allerdings stelle ich hier fest, dass Wildcards hier entweder gar nicht oder nur sehr eingeschränkt funktionieren. Google wollte mir hier nicht weiterhelfen, da ich hier immer nur auf "?" und "%" als Wildcards stoße.

Gibt es dergleichen überhaupt bei DataTable.Select oder kann man das irgendwie erzwingen über einen kleinen Umweg? Ich meine ja, da ich den Stammsatz eh immer komplett in einer DataTable vorhalte, könnte ich durch sämtliche Rows laufen und via Regex vergleichen. Bin mir nur nicht sicher, ob es dadurch nicht langsamer als mit Access wird.

B
bredator Themenstarter:in
357 Beiträge seit 2010
vor 12 Jahren

Habe nichts konkretes mehr in der Richtung gefunden und es jetzt mit Regex gemacht. Ist ca. 5-6 mal schneller als ständige Access-Zugriffe und funktioniert daher für mich wunderbar. Hier mal der Code, mit dem ich das umgesetzt habe:


     Regex regex = new Regex("^[HNM][AEH][LI1][LI1][O0o]$", RegexOptions.IgnoreCase | RegexOptions.Compiled); //
     DataTable dTableTyp7 = TableStammdaten.Clone();
                    
     for (int j = 0; j < TableStammdaten.Rows.Count; j++)
          {             
              if (regex.IsMatch(TableStammdaten.Rows[j][0].ToString()))
                   {
                       DataRow drow = dTableTyp7.NewRow();
                       drow[0] = TableStammdaten.Rows[j][0].ToString();
                       drow[1] = "7";
                       drow[2] = TableStammdaten.Rows[j][2].ToString();
                       drow[3] = TableStammdaten.Rows[j][3].ToString();
                       dTableTyp7.Rows.Add(drow);
                    }
           }

Im Anschluss habe ich in dTableTyp7 genau das vorliegen, was ein LIKE mit Wildcards gebracht hätte bzw. was das bringt, bei einer Abfrage auf Access.