10
votes

Comment insérer NULL dans la base de données?

Bonjour, j'essaie d'insérer NULL dans une colonne de base de données en fonction d'une valeur de DataKeys de GridView (si vous étiez "" insertion de NULL dans la base de données) Cependant, je reçois un espace '' à l'intérieur de la colonne de la base de données.

string sbcId = gvTest.DataKeys[gr.RowIndex]["myColumn"].ToString();
 insgnp.Parameters.Add(new OleDbParameter("EMPID", (sbcId==""?DBNull.Value.ToString():sbcId)));


2 commentaires

Avez-vous vu quel réel T-SQL est exécuté? (c.-à-d. avec le profileur SQL). Le Tostring met probablement dans le ''. Mais votre dicton dit qu'il y a un espace '', que je ne peux pas voir comment cela pourrait arriver. Plus probablement SBCID! = "", C'est == "".


Merci rpm1984. J'utilise DB2. Il semble que l'utilisation de Tostring () était traduite en quelque sorte dans '' dans la colonne de la base de données.


8 Réponses :


1
votes

Essayez ci-dessous en supprimant la totring () après dbnull.value xxx


1 commentaires

Cela ne fonctionnera pas avec l'opérateur ternaire, mais j'ai corrigé le problème. Merci pranay.



10
votes

Utiliser dbnull.value , pas dbnull.value.tostring . (Avec d'autres types de collecte de paramètres dans .NET simplement en utilisant null fonctionnerait également, mais je ne suis pas sûr à 100% sur OLEDBParameter ).

Quant à l'opérateur tertiaire . Ne moulez pas à la chaîne, mais jetez la chaîne à l'objet: xxx


3 commentaires

Merci Jon. Vous avez raison que seul problème est le casting dans la chaîne.


Ah. Ajouté quelque chose sur le casting.


Merci, c'était aussi utile. I +1 vous comme réponse est déjà marqué.



25
votes

Vous devez réécrire votre code: XXX

Le problème avec le ternaire Si l'instruction que vous avez est que son retour doit toujours être identique, c'est pourquoi vous ne pouvez pas l'utiliser (chaîne et dbnull.value ne sont pas compatibles)


3 commentaires

Merci Klausbyskov. Cela a fonctionné merveilleusement! =). Avez-vous un indice pourquoi la colonne de la base de données a-t-elle une valeur '' même si la chaîne avait ''.


Pourquoi Picturebox1.tag! = NULL? Imagineoperations.ImagetObytes (Picturebox1.Image): Dbnull.Value Lancer: Caractéristique "L'expression conditionnelle tapetée cible" n'est pas disponible en C # 7.3. Veuillez utiliser la version de la langue 9.0 ou plus.


Je devais faire un si d'autre pour cela pour travailler. J'utilise .NET Framework. Est-ce pour le noyau .NET uniquement?



5
votes

Vous devez utiliser dbnull.value pas dbnull.value.tostring ()

dbnull.value.tostring () est ''

Ce programme donne xxx

Texte alt


3 commentaires

Merci Preet Bien que le problème soit résolu, mais je suis perplexe, pourquoi la colonne de la base de données a-t-elle été "" même si la chaîne était ""?


Quel est le DDL pour la table? At-il un déclencheur?


@ZOHAS, car les guillemets simples qu'il utilisaient est du texte comme indiqué en utilisant les guillemets doubles et la contamination du résultat, lors de l'utilisation de format de chaîne, vous n'avez pas besoin d'encapsuler la variable {0} dans des guillemets ... IE. console.writeline ("{0}", dbnull.value.tostring ()); aurait eu une bonne fin.



0
votes

Si vous insérez une valeur non chaîne dans la base de données d'accès, vous pouvez écrire la requête d'insertion de cette manière

Insérer dans les valeurs de table (colonne1, colonne2) (null, null);

Mais vous souhaitez insérer une valeur NULL dans un texte court ou un champ de texte long dans l'accès, vous pouvez écrire la requête d'insertion de cette manière

insérer dans la table de nom (colonne1, colonne2) ('', '' '');


0 commentaires

-3
votes

votre chaîne comme celle-là xxx

ajoutez maintenant la ligne suivante xxx

maintenant insérer dans dB et vérifiez que vous avez une valeur null que leur soit logique.


0 commentaires

1
votes

sqlstring.null devrait faire le travail juste bien :)


0 commentaires

1
votes

Je préfère utiliser une méthode d'extension pour gérer au lieu de plusieurs déclarations. Cela vous permet de prendre en compte les valeurs de chaîne null ou vide. Lui permet également d'être réutilisable.

     Parameters.Add(new OleDbParameter("EMPID", sbcId.GetDBNullOrValue())); 


0 commentaires