.NET et MySql paramétrée, AddWithValue les variables NULLES, comment éviter de vérifier les valeurs null
Disons que j'ai une base de données MySql procédure stockée qui insère un enregistrement avec certains nullable CHAR champs.
Dans VB.NET si je ne vérifie pas pour Rien (ou Null dans d'autres langues), j'obtiens une exception à partir du pilote de base de données, j'ai donc écrire:
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("_name", if(name Is Nothing, "", name)).Direction = ParameterDirection.Input;
Et c'est la première chose que je n'aime pas; je voudrais passer Rien et le conducteur sait qu'il doit mettre en valeur NULL dans la base de données. Mais alors, dans la procédure stockée, j'ai vérifier sur le terrain si il est vide:
INSERT INTO mytable
(
name,
-- other 200 char fields
)
VALUES
(
NULLIF(_name, ''),
-- other 200 char fields
)
Laid euh? - Je vérifier le néant/vide deux fois.
Est-il le meilleur, le plus direct, chemin?
Pire encore, pour les types de référence (j'.e: Entiers) la case pour que le néant n'a pas de sens, car un type primitif ne peut pas être rien (oui, je pourrais être un Entier non significative de la valeur, disons -1 pour une identification positive, mais...).
OriginalL'auteur vulkanino | 2010-09-15
Vous devez vous connecter pour publier un commentaire.
Utilisation suivant si vous souhaitez insérer
NULL
:signifie la même chose que
Voir plus sur null-coalescence de l'opérateur sur MSDN
Et si vous souhaitez insérer vide char
''
vous suivant:J'ai essayé, mais au moins avec le CHAR champs, DBNull.La valeur ne peut pas être défini: le pilote de base de données soulève une exception.
droit, C#, votre post n'était pas balisé avec
vb.net
et C# syntaxe utilisée. De toute façon dans VB.NET vous pouvez utiliserIf(name, DBNull.Value)
Quelle est la version de MySQL .NET connecteur utilisez-vous? La dernière est
6.3.4
. Essayez de mettre à niveauJe suis en utilisant 6.3.4 déjà, le DBNull chose ne fonctionne pas, merci de lire ma propre réponse ci-dessous, il fonctionne comme je le voulais.
OriginalL'auteur abatishchev
DbNull.La valeur ne résout pas le problème, l'exception est levée si vous ne spécifiez pas le paramètre est nullable.
De cette façon, il fonctionne. Je n'ai pas à vérifier la chaîne vide (ou bizarre "impossible") selon la valeur de SP.
Bien sûr, vous pouvez écrire un partagées méthode générique pour facile le réglage des paramètres, travail de base de données de la langue/type:
Et de l'appeler comme:
OriginalL'auteur vulkanino
Utilisation
DbNull.Value
au lieu de la chaîne vide.OriginalL'auteur Klaus Byskov Pedersen