Domanda

Sto lavorando con .NET dataset fortemente tipizzato e hanno una tabella con una colonna nullable int (e una colonna DateTime nullable pure).

A quanto pare c'è un bug con il designer set di dati che impedisce avendo colonne nullable su questi tipi di dati. Il designer consente solo "eccezione tiro", come il comportamento di default per i valori nulli. Purtroppo, quando si utilizza un tipo di dati nullable nel database, un valore null è un valore legittimo, ma si traduce in un eccezione generata quando si tenta di recuperare il valore da una riga di dati.

Ho visto diversi newsgroup su questo problema, ma devo ancora vedere alcuna soluzione alternativa decente a questo problema.

Mi piacerebbe sentire come gli altri hanno affrontato questo problema.

Grazie.

È stato utile?

Soluzione

DBNull era fondamentalmente portati a giocare a che fare con tipi di valore non nullable, pre .NET 2.0. Grazie al design di ADO.NET, non c'è modo si può evitare DBNull, a meno che non si è scelto un approccio più diretto. DBNull viene incorporato nel nucleo di ADO.NET, quindi dovrete imparare a convivere con questo, se si desidera continuare a utilizzarlo.

Se si forniscono i propri oggetti di trasporto dei dati, invece di basarsi sulla generica spazio System.Data, è possibile controllare (durante la lettura dei risultati con un lettore di dati) se il valore è nullo, ma avrete bisogno di un certo modo di generare oggetti fortemente tipizzati e mappature, perché questo è il lavoro veramente noioso.

Per quanto a mia conoscenza, DBNull è costruito in al disegno di ADO.NET e il modo migliore per costruire le applicazioni se si utilizza tale, è a fondersi (normalizzazione) DBNull e nullo. Fondamentalmente, fornire una classe DBConvert che intercetta DBNull e restituisce un riferimento null reale, se il valore è DBNull. Questo è un requisito minimo, ma non appena questo è fatto avrete meno valori DBNull galleggianti intorno di cui preoccuparsi.

Altri suggerimenti

Credo che questo post su ASP.NET forum sarà un aiuto per la domanda: tipizzata DataSet / Nullable problema colonna

  

L'unico modo per impostare tali proprietà a   nulla è utilizzare i metodi helper che   il generatore di dati crea anche.   I metodi sono chiamati dopo il vostro   nome della colonna, così nel tuo caso, è   dovrebbe avere metodi sulla riga di dati   oggetto chiamato IsApprovingUserNull ()   e SetApprovingUserNull ().

E 'stato un po' che ho usato digitato DataSet, ma vedo nel mio vecchio codice che utilizzano l'attributo codegen:nullValue. Io non credo che sia sostenuto dal progettista, almeno non in VS2005 (che ho usato per quel progetto), in modo che avrebbe dovuto aprire il file XSD nell'editor XML e farlo a mano.

L'XML risultante sarebbe simile a questa:

<xs:sequence>
    <xs:element 
        name="MyIntColumn" 
        codegen:nullValue="0" 
        type="xs:int" 
        minOccurs="0" />
    <xs:element 
        name="MyBoolColumn" 
        codegen:nullValue="false" 
        type="xs:boolean" 
        minOccurs="0" />
    <xs:element 
        name="MyDateColumn" 
        codegen:nullValue="1900-01-01" 
        type="xs:dateTime" 
        minOccurs="0" />
</xs:sequence>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top