Gibt es eine Möglichkeit bei einem DataTable.Select() alle Werte in der DataTable die leer bzw. NULL sind zu ignorieren?
/edit: Ums ein bisschen deutlicher zu machen:
Ich hab z.b. eine DataTable mit 3 Spalten und mehreren Datensätzen, darauf will ich nun ein Select machen, für das ich pro Spalte einen Wert als Bedingung übergebe.
Wenn nun in der jeweilen Spalte ein Wert steht soll die Bedingung überprüft werden, ist die jeweile Spalte leer, dann soll die Bedingung ignoriert werden.
Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)
Ich versuchs nochmal zu verdeutlichen.
In meiner DataTable gibts die Spalten:
Aenderungsschluessel
Verwendungsort
FertigungsbereichKennzeichen
Terminschluessel
Abruftyp
Nun möchte ich einen Select haben, der folgendermaßen aussieht:
DataRow[] foundRows = datatable1.Select("Aenderungsschluessel = '" + strAenderungssschluessel + "' and Verwendungsoirt = '" + strVerwendungsort + "' and FertigungsbereichKennzeichen = '" + strFertigungsbereichKennzeichen + "' and Terminschluessel = '" + strTerminschluessel + "');
So, nun kenn es eben vorkommen das alle Felder in der DataTable einen Wert beinhalten, oder manche eben nicht. Und immer wenn eine Spalte keinen Wert hat soll die entsprechende Bedingung einfach ignoriert werden.
Das IsNull kann ich ja nicht in die Select-Anweisung einbauen, so wie ich das gesehen hab.
Mit einem Or gehts auch schlecht, da die Bedingungen die nicht NULL sind immer alle erfüllt sein müssen...
Gibts hierfür irgendwelche Möglichen Lösungsansätze?
Klick mal auf den Link, dann siehst du, dass IsNull sehr wohl verwendbar ist.
Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)
Jo, habs jetzt damit probiert, allerdings liefert es nicht das was ich oben beschrieben habe...
Kennt jemand hier noch einen anderen Lösungsansatz?
Jo, habs jetzt damit probiert, allerdings liefert es nicht das was ich oben beschrieben habe...
Das sollte es aber...
Zeig doch mal den Code.
Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)
DataRow[] foundRows = tableAbruftyp.Select("ISNULL(Aenderungsschluessel, '') = '" + strAenderungsschluessel + "' and ISNULL(Verwendungsort, '') = '" + strVerwendungsort + "' and ISNULL(FertigungsbereichKennzeichen, '') = '" + strFertigungsbereichKennzeichen + "' and ISNULL(Terminschluessel, '') = '" + strTerminschluessel + "'");
Laufen tuts ohne Fehler, ka ob ich das jetzt so richtig eingebaut hab....
Liefert halt nur nicht das was ich will....
Deine Vermutung ist richtig 😉
evtl so:
IsNull(Feld, 'Hallo') = 'Hallo'
Was bedeutet:
DataRow[] foundRows = tableAbruftyp.Select("ISNULL(Aenderungsschluessel, '" + strAenderungsschluessel + "') = '" + strAenderungsschluessel + "' and ISNULL(Verwendungsort, '" + strVerwendungsort + "') = '" + strVerwendungsort + "' and ISNULL(FertigungsbereichKennzeichen, '" + strFertigungsbereichKennzeichen + "') = '" + strFertigungsbereichKennzeichen + "' and ISNULL(Terminschluessel, '" + strTerminschluessel + "') = '" + strTerminschluessel + "'");
Btw: Ein Formatstring wär hier sicher übersichtlicher...
Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)
Ok, danke, jetzt liefert er mir immerhin schonmal ein Ergebnis, das allerdings noch nicht so ganz passt....er liefert mir jetzt nur die erste Zeile auf die die Bedingung zutrifft, allerdings trifft sie auf mehrere zu....
Das kann ich dir jetzt nicht glauben.
Es gibt ja keine Verbindung zwischen den Zeilen, also wird die Bedingung auf jede Zeile extra angewandt.
Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)
Das macht mich ja eben stutzig....
/edit: Ok, hat sich erledigt...da hatte sich in einem String ein Leerzeichen eingschlichen, das übersieht man ja leicht....alle Strings mit .Trim() zu versehen sollte das Problem jetzt gelöst haben
So, nochmal zu dem Thema...
Möchte nun von den Strings die ich zur Abfrage benutze nur Substrings nehmen. Die Startposition und die Länge des Substrings wollte ich während des Selects aus der DataTable lesen.
Hier mal ein Beispiel wie ich es versucht habe:
"ISNULL(Aenderungsschluessel, SUBSTRING('" + strAenderungsschluessel.Trim() + "', StartAendSchl, LaengeAendSchl)) = SUBSTRING('" + strAenderungsschluessel.Trim() + "', StartAendSchl, LaengeAendSchl)
Allerdings bekomm ich dann eine InvalidCastException an dem Punkt wo er versucht das Feld "StartAendSchl" auszulesen.
Ist das was ich vorhab überhaupt möglich, und wenn ja, wie bekomm ich diese Exception weg?