Wie gehe ich mit der Konvertierung vom Typ 'dBnull' zum Eingeben von 'String' nicht gültig mit

StackOverflow https://stackoverflow.com/questions/536212

  •  22-08-2019
  •  | 
  •  

Frage

Ich muss einige Ratschläge zur Handlung von Folgendem erwarten:- Ich habe ein Datenfeld misc_text_2, das vom Typ varchar (25) ist und Null zulässt. Wenn ich nun die folgende Syntax verwende

<asp:Label ID="lblPrinter" runat="server"  Text='<%# iif(eval("misc_text_2") is dbnull.value, "", iif(eval("misc_text_2") like "NA", "None", iif(eval("misc_text_2") like "KP1", "Kitchen Printer 1", iif(eval("misc_text_2") like "KP2", "Kitchen Printer 2", iif(eval("misc_text_2") like "KP3", "Kitchen Printer 3", iif(eval("misc_text_2") like "BP1", "Bar Printer 1", iif(eval("misc_text_2") like "BP2", "Bar Printer 2", iif(eval("misc_text_2") like "BP3", "Bar Printer 3", Eval("misc_text_2")))))))))%>'></asp:Label>

Ich erhalte immer wieder eine Fehlerausnahmedetails: System.inValidCastException: Konvertierung vom Typ 'dbnull' zum Typ 'String' ist nicht gültig.

Ich weiß, dass mir etwas fehlt, aber was ...

Danke im Voraus

War es hilfreich?

Lösung

Sie könnten in Ihrer SQL -Abfrage ISNull (misc_text_2, '') verwenden, um die leere Zeichenfolge anstelle von DBNULL zurückzugeben.

Andere Tipps

Sie müssen ausdrücklich nachsehen DBNull.Value Und machen Sie die Konvertierung selbst.

Mit anderen Worten, bauen Sie eine Methode auf, die die Konvertierung für Sie durchführt, und nimmt an DBNull.Value berücksichtigen.

Beantworten Sie Ihre Frage nicht, aber: Sie sollten wirklich einen Code hinter der Methode erstellen, die die Konvertierung durchführt. Dies erleichtert den Code leichter zu verstehen und zu debuggen und ermöglicht es, den Code wiederzuverwenden.

Jedes Mal, wenn Sie die Eval verwenden, müssen Sie irgendwie eine faule Bewertung in die Faule bewerten. Ersetzen Sie dazu jede Instanz von:

iif(eval("misc_text_2") like ...

mit

iif(IsDbNull(eval("misc_text_2")) OrElse eval("misc_text_2") like ...

Das OrElse verhindern, dass eine versuchte Umwandlung eines DBNULL in Boolesche. Aus grundlegenderer Perspektive ist Bang jedoch am korrektesten. Dies sollte alles erledigt werden, wahrscheinlich im Ereignishandler von ItemDatabound (oder Rowdatabound).

Bei weiterer Reflexion ...

Das OP könnte auch das verwenden Convert.ToString() Methode in seinem Code, der DBNulls in String.Empty umwandelt.

Da wir eine Legacy-Datenbank haben, die für MS-Dynamics (Solomon) eingerichtet wurde, besteht unsere Methode zum Umgang mit Nulls darin, sie in Null-Zeichenfolgen entweder im ASP- oder VB.NET-Code umzuwandeln. dh

Trim$(misc_text_2 & " ")

Befreien Sie das Problem für jede Version von VB.

Wenn Sie den Data -Set -Designer verwenden, besteht der einfachste Weg, diesen Fehler zu entfernen, die Eigenschaften der angesehenen Spalte zu ändern.

NullValue -Ausnahme von "leer" anstelle von "Ausnahme".

Ich hoffe, das wird Ihnen allen helfen.

Um DBNull oder ISDBNull zu konvertieren, können Sie diese Möglichkeiten ausprobieren:

  1. Konvertieren Sie DBNull in eine leere Schnur

    (Dbnullobj) .tostring

  2. Erstellen Sie eine DBNull -Konverterfunktion

    Öffentliche Funktion konvertdbnulltoString (dbnullobj als Objekt) als Zeichenfolge

    Wenn isdbnull (dbnulllobj) dann

    Rückkehr ""

    Ende wenn

    Return dbnullobj

    Endfunktion

Wie SpiritumTP vorschlug, ändern Sie, wenn Sie den Dataset -Designer verwenden, den DataColumn. Ich habe das letztere ausgewählt und es hat das Problem behoben. Ich überprüfe jetzt einfach nichts (wenn es nicht ist (Spaltenfax), dann ...)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top