Question

Je travaille avec .NET ensembles de données fortement typées et une table avec une colonne int nullable (et une colonne DateTime nullable ainsi).

Apparemment, il y a un bug avec le concepteur de jeux de données qui empêche d'avoir des colonnes nullables sur ces types de données. Le concepteur ne permet « exception throw » comme le comportement par défaut pour les valeurs nulles. Malheureusement, lorsque vous utilisez un type de données annulable dans la base de données, une valeur nulle est une valeur légitime, mais aboutit à une exception levée lors d'une tentative de récupérer cette valeur à partir d'une ligne de données.

Je l'ai vu plusieurs offres d'newsgroup sur ce problème, mais ont encore vu de solutions de contournement décent à cette question.

J'aimerais savoir comment d'autres ont traité ce problème.

Merci.

Était-ce utile?

La solution

DBNull a été essentiellement mis en jeu pour traiter les types de valeurs non nullables, avant .NET 2.0. En raison de la conception de ADO.NET, il n'y a aucun moyen que vous pouvez éviter DBNull, à moins que vous avez choisi une approche plus directe. DBNull est intégré dans le noyau de ADO.NET, de sorte que vous devrez apprendre à vivre avec ça, si vous voulez continuer à l'utiliser.

Si vous fournissez vos propres objets de transport de données au lieu de compter sur l'espace de noms System.Data générique, vous pouvez vérifier (en lisant dans les résultats avec un lecteur de données) si la valeur est nulle, mais vous aurez besoin d'un moyen de générer des objets et applications fortement typées parce que ce travail vraiment fastidieux.

Dans la mesure de mes connaissances, DBNull est construit pour la conception de ADO.NET et la meilleure façon de construire vos applications si vous utilisez ce, est de s'unir (Normaliser) DBNull et null. En gros, fournir votre propre classe dbconvert qui intercepte DBNull et retourne une référence null réelle si la valeur est DBNull. Ceci est une exigence minimale, mais dès que cela est fait, vous aurez moins de valeurs de DBNull flottant autour à se soucier.

Autres conseils

Je pense que ce post sur le forum ASP.NET sera une aide pour la question suivante: question fortement typées DataSet / colonne Nullable

  

La seule façon de définir ces propriétés à   null est d'utiliser les méthodes d'assistance qui   le générateur de jeu de données crée également.   Les méthodes sont nommées d'après votre   nom de colonne, donc dans votre cas, vous   devraient avoir des méthodes sur la ligne de données   objet appelé IsApprovingUserNull ()   et SetApprovingUserNull ().

Il a été un moment que j'utilisé DataSets typés, mais je vois dans mon ancien code qui utilisent attribut codegen:nullValue. Je ne pense pas qu'il soit pris en charge par le concepteur, du moins pas dans VS2005 (dont j'ai utilisé pour ce projet), de sorte que vous auriez à ouvrir votre fichier xsd dans l'éditeur XML et de le faire à la main.

Le xml résultant ressemblerait à quelque chose comme ceci:

<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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top