Come gestisco la conversione dal tipo "dbnull" per digitare "stringa" non è valida

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

  •  22-08-2019
  •  | 
  •  

Domanda

Ho bisogno di aspettare consigli su come gestire quanto segue:- Ho un campo di dati misc_text_2 che è di tipo varchar (25) e consente null. Ora se utilizzo la seguente sintassi

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

Continuo a ottenere un'eccezione di errore Dettagli: System.InvalidcastException: la conversione dal tipo "dbnull" in tipo "stringa" non è valida.

So che mi manca qualcosa, ma cosa ...

Grazie in anticipo

È stato utile?

Soluzione

È possibile che nella tua query SQL usi isNull (misc_text_2, '') per restituire una stringa vuota anziché DBnull.

Altri suggerimenti

Devi verificare esplicitamente DBNull.Value E fai la conversione da solo.

In altre parole, costruisci un metodo che farà la conversione per te, prendendo DBNull.Value in considerazione.

Non rispondere alla tua domanda, ma: dovresti davvero creare un codice dietro il metodo che esegue la conversione. Ciò renderà il codice più facile da comprendere e eseguire il debug e consentirà di riutilizzare il codice.

Ogni volta che usi la valutazione, devi evitare una valutazione pigra, in qualche modo. Per fare ciò, sostituire ogni istanza di:

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

insieme a

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

Il OrElse impedirà qualsiasi tentativo di conversione di un dbnull in booleano. Tuttavia, da una prospettiva più fondamentale, il bang è più corretto. Tutto questo dovrebbe essere fatto in codice, probabilmente nel gestore di eventi ItemDataBound (o RowDataBound).

Su ulteriore riflessione ...

L'OP potrebbe anche utilizzare il Convert.ToString() Metodo nel suo codice, che convertirà dbnulls in string.empty.

Dal momento che abbiamo un database legacy che è stato impostato per MS-Dynamics (Solomon), il nostro metodo di gestione dei null è convertirli in stringhe nulla nel codice ASP o VB.NET. cioè

Trim$(misc_text_2 & " ")

Sbarazza il problema per qualsiasi versione di VB.

Se si utilizza il progettista del set di dati, il modo più semplice per sbarazzarsi di questo errore è modificare le proprietà della colonna rispettata.

NullValue Eccezione a "vuoto" invece di "lanciare eccezione".

Spero che questo vi aiuti tutti.

Per convertire dbnull o isdbnull puoi provare in questo modo:

  1. Convertire dbnull in una stringa vuota

    (Dbnullobj) .toString

  2. Crea una funzione di convertitore DBNULL

    Funzione pubblica convertdbnulltostring (dbnullobj come oggetto) come stringa

    Se isdbnull (dbnullobj)

    Restituzione ""

    finisci se

    return dbnullobj

    Funzione di fine

Come suggerito dallo SpiriMTP, se si utilizza il progettista di set di dati, modifica DataColumn.nullValue da "Throw Exception" a "vuoto" o "niente". Ho scelto quest'ultimo e ha risolto il problema. Ora non controllo solo niente (se non è nitido (columnfax) allora ...)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top