2009-02-11 10 views
7

Ho bisogno di alcuni mi aspetto un consiglio su come gestire quanto segue: - Ho un campo dati misc_text_2 che è di tipo varchar (25) e consente NULLO. Ora, se io uso la seguente sintassiCome gestisco Conversione da tipo "DBNull" a tipo "String" non valido

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

io continuo a ottenere un errore di eccezione: System.InvalidCastException Dettagli: La conversione da tipo 'DBNull' digitare 'String' non è valido.

So che mi manca qualcosa, ma cosa ...

Grazie in anticipo

+0

Che lingua/ambiente è? Direi ASP. Potresti menzionarlo e taggare la domanda di conseguenza? –

risposta

-1

Si potrebbe in SQL usa frase isNull (misc_text_2, '') per restituire en stringa vuota invece che DBNull .

+16

Non restituire mai stringhe vuote al posto di valori nulli, ciò riduce la portabilità del set di dati e rappresenta in modo errato il modello di dati. Se è un null è un null. Lascia che il livello dell'interfaccia utente si preoccupi di come visualizzarlo. –

+1

Questa è la tua opinione. Il ritorno di una stringa vuota risolve il suo problema, giusto? –

+6

"Empty è diverso da null". E questa non è un'opinione, è un dato di fatto. –

13

È necessario verificare esplicitamente per DBNull.Value ed eseguire personalmente la conversione.

In altre parole, creare un metodo che effettuerà la conversione per te, tenendo conto di DBNull.Value.

3

Non rispondendo 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 da mettere a punto e consentirà di riutilizzare il codice.

0

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

Trim$(misc_text_2 & " ") 

elimina il problema per qualsiasi versione di VB.

+0

Non hai bisogno del 'Trim' se usi' "" 'invece di' "" '. – CJ7

+0

Ancora uso ritaglio perché Dynamics utilizza solo campi di dimensioni fisse riempite vuote. – Dave

2

Ogni volta che si utilizza l'Eval, in qualche modo è necessario eseguire una valutazione lenta. Per fare ciò, sostituire ogni istanza di:

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

con

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

Il OrElse impedirà ogni tentativo di conversione di un DBNull a booleani. Tuttavia, da una prospettiva più fondamentale, bang è la più corretta. Questo dovrebbe essere fatto in modo code-behind, probabilmente nel gestore di eventi ItemDataBound (o RowDataBound).

Su ulteriore riflessione ...

L'O.P. potrebbe anche fare uso del metodo Convert.ToString() nel suo codice, che converte DBNulls a String.Empty.

0

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

Eccezione NullValue su "Empty" anziché su "Throw exception".

spero che questo possa aiutare tutti voi.

0

Per convertire DBNull o IsDBNull si può provare questo modi:

  1. Converti DBNull su una stringa vuota

    (DBNullObj) .ToString

  2. creare una funzione DBNull Converter

    Funzione pubblica ConvertDBNullToString (DBNullObj As Object) come stringa

    se IsDBNull (DBNullObj) poi

    ritorno ""

    fine se

    ritorno DBNullObj

    End Function

0

Come suggerito spiritUMTP, se si utilizza il set di dati Designer, modifica DataColumn.NullValue da "Throw exception" a "empty" o "Nothing". Ho scelto quest'ultimo, e ha risolto il problema. Ora controllo per niente (se IsNothing (columnFax) poi ...)

Problemi correlati