Laden...

DataTable.Select(): Leere Felder ignorieren

Erstellt von Orothred vor 13 Jahren Letzter Beitrag vor 13 Jahren 4.907 Views
O
Orothred Themenstarter:in
300 Beiträge seit 2007
vor 13 Jahren
DataTable.Select(): Leere Felder ignorieren

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.

95 Beiträge seit 2006
vor 13 Jahren

evtl so:

IsNull(Feld, 'Hallo') = 'Hallo'

Ansonsten:
DataColumn.Expression-Eigenschaft

Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)

O
Orothred Themenstarter:in
300 Beiträge seit 2007
vor 13 Jahren

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?

95 Beiträge seit 2006
vor 13 Jahren

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)

O
Orothred Themenstarter:in
300 Beiträge seit 2007
vor 13 Jahren

Jo, habs jetzt damit probiert, allerdings liefert es nicht das was ich oben beschrieben habe...

Kennt jemand hier noch einen anderen Lösungsansatz?

95 Beiträge seit 2006
vor 13 Jahren

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)

O
Orothred Themenstarter:in
300 Beiträge seit 2007
vor 13 Jahren

                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....

95 Beiträge seit 2006
vor 13 Jahren

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)

O
Orothred Themenstarter:in
300 Beiträge seit 2007
vor 13 Jahren

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....

95 Beiträge seit 2006
vor 13 Jahren

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)

O
Orothred Themenstarter:in
300 Beiträge seit 2007
vor 13 Jahren

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

O
Orothred Themenstarter:in
300 Beiträge seit 2007
vor 13 Jahren

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?