Dataset permettant de valeurs Nulles, même lorsque AllowDBNull = False?
J'ai conçu un jeu de données à l'aide de VS2008 concepteur de dataset. Dans l'une des tables de données, j'ai mis "AllowDBNull" propriété de la plupart des colonnes à Faux. Cependant, si je créer un DataRow contenant des valeurs null pour les colonnes, ce datatable accepte cette ligne, sans aucune erreur.
Je ne suis pas à comprendre quelque chose ici? S'il vous plaît conseils. Merci.
Modifier Mike Spross' excellente explication, cependant, apporte de suite une autre question. Comment pouvons-nous vérifier le texte des champs si elles sont Système de.DBNull? Il est surprenant que les ensembles de données ne sont pas à considérer une chaîne de caractères "" en tant que Système.DBNull et lancer une exception. Ou n'est-il pas?
Modifier je pense avoir trouvé le problème et la raison. Je suis de l'initialisation d'une nouvelle ligne de la Table de données, avant de les remplir dans les valeurs de la ligne. Lors de l'initialisation de la ligne, la valeur par défaut pour la chaîne, c'est à dire, "", ce pourrait être rempli dans cette colonne. Je pense que c'est ça? Toutes les idées à ce sujet?
OriginalL'auteur virtualmic | 2009-04-25
Vous devez vous connecter pour publier un commentaire.
La réponse courte est:
System.DBNull.Value != null
La plus longue réponse est:
En C#, le concept de
NULL
valeur dans SQL est représenté par laValue
propriété de laSystem.DBNull
classe. Lorsque vous traitez avec une base de données, le plus familier, C#null
ne signifie pas réellement "valeur null."Lorsque vous définissez une colonne de base de données à
null
, ADO.NET initialiser la colonne à ce que la valeur par défaut pour la colonne (par exemple, unint
colonne serait initialisé à 0). C'est, en utilisantnull
peut effectivement provoquer une valeur non nulle à la fin dans la base de données, et, par conséquent, vous n'obtiendrez pas une erreur.Si vous à la place d'une colonne de base de données à
System.DBNull.Value
, la colonne sera effectivement mis àNULL
. C'est cette situation queAllowDBNulls == false
vous en empêche.Merci pour l'explication.
J'avais accepté cette réponse il y a un moment, mais non acceptée, juste pour le temps, de sorte que la réponse à mon autre question, peut être fourni. Je vais l'accepter, de nouveau dès que cela se produise.
OriginalL'auteur Mike Spross
Au sujet de votre "bonus" 😉 question: NULL (pas de chaîne) et "" (chaîne vide) sont deux choses différentes. Il est donc parfaitement raisonnable de les traiter différemment. C'est la distinction entre la valeur null et DBNull c'est-à gâcher les choses. Si les types nullables avait été disponible au moment de la conception ADO.NET les choses serait probablement beaucoup plus facile. Mais avant de .NET 2.0, il n'y avait pas moyen de représenter par exemple un "null entier".
OriginalL'auteur Sven Künzler
Êtes-vous exactement en assignant des valeurs NULL ou une chaîne vide à ces colonnes? Si vous n'avez pas attribuer de la valeur à une colonne, il sera par défaut à NULL (si une contrainte par DÉFAUT n'est pas imposé). Autre chose que vous pouvez affecter une valeur NULL par faire -
Si vous affectez une chaîne Vide pour les colonnes, il n'est pas égal à NULL.
Et si vous avez une valeur NULL dans une colonne qui a été marqué comme NON NULLABLE, il lèvera une erreur
EDIT:
Par PAS NULLABLE, je veux dire AllowDBNull = false.
Votre code semble correct. Pouvez-vous essayer de limiter le texte?
Voici le code entier -
OriginalL'auteur Kirtan