Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C#] Interpretare valori DBNull

    Salve a tutti!

    Ho questo problema: nella lettura di un DB mi tiro fuori una riga, chiamiamola DataRow dr;

    Questa riga ha molteplici colonne dai tipi più disparati (generalmente String, DateTime e int).

    Ciclo i valori di questa riga in modo da trasportarmeli altrove sulla base del tipo di tale campo: il problema sorge perchè quando trova DBNull mi si schianta e nn riesce a gestirlo.

    Avevo provato a fare una cosa del genere:

    for (int i = 0; i < method.ReturnProperties.Count; i++)
    {
    String type = serviceObject.Properties[method.ReturnProperties[i]].Type;
    if (drNGR[i] is DBNull)
    {
    switch (type)
    case ("String"):
    serviceObject.Properties[method.ReturnProperties[i]].Value = String.Empty;
    break;
    case ("DateTime"):
    serviceObject.Properties[method.ReturnProperties[i]].Value = DateTime.MinValue;
    break;
    case ("int"):
    serviceObject.Properties[method.ReturnProperties[i]].Value = -1;
    break;
    default: break;
    }
    }
    else
    {
    serviceObject.Properties[method.ReturnProperties[i]].Value = drNGR[i];
    }
    }

    Esso però mi schianta:

    String was not recognized as a valid DateTime.

    Potete aiutarmi?
    Grazie

  2. #2
    Io avrei fatto un controllo molto semplice, considerando che la DataRow non è altro che una Lista di Objects, potresti pensarla anche cosi: List<objects> = DataRow e quindi fare una verifica di questo tipo:

    codice:
    if(dr[i] != null)
    {
     //il valore non è null quindi posso fare determinate operazioni
     ....
    }
    Se non è questo il tuo problema allora ho interpretato male ciò che hai scritto! Fammi sapere...

  3. #3
    Ciao e grazie per le info.

    Ti spiego: il mio obiettivo è proprio quello di conoscere il tipo del dato (nullo) nel datarow.

    Facendo come haid etto tu (che è giusto e mi trovo) io escludo ciò: io devo proprio sapere quel valore nullo nel datarow di che tipo è...

    Mi segui o sto rintronato? :-D

  4. #4
    ah scusami!

    Allora semplice:
    codice:
    if(dr[i].GetType() == typeof(string)) //stringa...
    else if(dr[i].GetType() == typeof(DateTime)) //data...
    e cosi via dicendo

    Ovvio, utilizza il metodo migliore per questa verifica, una switch andrebbe anche bene!

    Spero sia questo ciò che vuoi sapere!

  5. #5
    ...hem...io mi trovo, ma così non riesco a capire quand'è che quel valore è null...



    dovrebbe esistere una cosa del tipo:

    if (dr.GetType() is String.Empty oppure DateTime.null ('na cosa del genere)...


  6. #6
    Allora prima di tutto è importante che tu inserisca un indice nella DataRow, cioè
    if(dr[indice]) per indicare la colonna e poi potresti fare cosi:

    if(dr[indice] == null)
    {
    if(dr[indice].GetType() == typeof(Tipo)) .... e cosi via dicendo
    }

  7. #7
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Originariamente inviato da RoBYCoNTe
    Allora prima di tutto è importante che tu inserisca un indice nella DataRow, cioè
    if(dr[indice]) per indicare la colonna e poi potresti fare cosi:

    if(dr[indice] == null)
    {
    if(dr[indice].GetType() == typeof(Tipo)) .... e cosi via dicendo
    }
    sbagliato anche quest'altro tuo intervento!!!


    per liveforever:

    ogni oggetto DataRow ha un metodo che si chiama IsNull che fà proprio quello che serve a te.
    http://msdn.microsoft.com/en-us/libr...ow.isnull.aspx
    I got the remedy

  8. #8
    :S ok albgen mi perseguita

    Ma lui non voleva sapere di che tipo è il campo contenuto?

    OK allora scusate, vi sto incasinando io! Albgen saprà darti maggiori info!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.