2017-02-09 6 views
-5

hallo über meine Fehler sind zu fragen meine Screenshot sehen, dankInformieren Sie sich über DBNULL auf andere Typen

DBNULL to other types ich meinen C# -Code erstellen Excel-Datei zu lesen, aber etwas hatte ein Problem sehen, über meinem Bildschirm

erschossen

anderes Problem, eingegeben ich Ihren Code aber eine Fehler siehe Screenshot unten

Other Error

+0

das Snippet als auch –

+0

umfassen Was die Art der 'row' ist? – Dai

+0

Die Spalte (in Index 8) in der Zeile, aus der Sie lesen, ist null. Sie können NULL nicht in einer Dezimalzahl speichern. – Rob

Antwort

-2

Verwendung oder (||) Zustand statt und (&gezeigt) Zustand, wie unten dargestellt:

if(onhand == "" || row[8] == System.DBNULL.value) 
{ 
    //your code 
} 
else 
{ 
    ONHANDQTY=Convert.toDecimal(row[8]); 
} 
+0

'DBNull' und' null' sind nicht das selbe. – Rob

+0

okay, Sir, ich versuche dies thnaks –

0

Ich weiß nicht, welche Datenbankbibliothek Sie verwenden, aber die meisten Bibliotheken gebaut on-top von ADO.NET nicht immer eine .NET null Referenz verwenden, um anzuzeigen, a SQL NULL Wert. Das ist, was DBNull ist (Zugriff über DBNull.Value). Sie können SQL NULL mithilfe des Object Reference Equality-Operators == oder Object.ReferenceEquals testen.

Ihr Code ist ziemlich verworren. Ich schlage vor, Sie versuchen, diese stattdessen:

Object value = row[8]; // I don't know what `row` is, change this to be a more specific type if there are any type-safety constraints on `row[8]`. 
if(Object.ReferenceEquals(DBNull.Value, value)) { 
    // value is SQL NULL 
} 
else { 
    // value is not SQL NULL, but it is not necessarily a Decimal value either 

    if(value is Decimal) { 

     return (Decimal)value; // you can't use the shorthand `as` operator with value-types like Decimal 
    } 
} 
0

Hoffnung, dass es eine Chance sein kann für row[8] sein DBNull. In solchen Fällen können Sie dies überprüfen, indem Sie row[8] mit System.DBNull.Value vergleichen.
versuchen wie folgt aus:

if (row[8] != System.DBNull.Value)) 
{ 
    decimal quantity; 
    if(decimal.TryParse(row[8].ToString(), out quantity) 
    { 
     item.ONHANDQTY = quantity; 
    } 
} 
+0

Dies ist ineffizient, wenn 'row [8]' ist bereits ein 'Decimal'-Wert anstelle einer Zeichenfolge. – Dai

+0

@Dai: Ja, du bist in diesem Sinne richtig. Aber ich habe 'Convert.ToDecimal' in den Code des OPs einbezogen –

Verwandte Themen