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)));
8 Réponses :
Essayez ci-dessous en supprimant la totring () après dbnull.value
Cela ne fonctionnera pas avec l'opérateur ternaire, mais j'ai corrigé le problème. Merci pranay.
Utiliser Quant à l'opérateur tertiaire . Ne moulez pas à la chaîne, mais jetez la chaîne à l'objet: p> dbnull.value code>, pas
dbnull.value.tostring code>. (Avec d'autres types de collecte de paramètres dans .NET simplement en utilisant
null code> fonctionnerait également, mais je ne suis pas sûr à 100% sur
OLEDBParameter code>).
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é.
Vous devez réécrire votre code: 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) p> p>
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?
Vous devez utiliser Ce programme donne p> dbnull.value code> pas
dbnull.value.tostring () code>
dbnull.value.tostring () code> est '' p>
p> p>
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 ()); code> aurait eu une bonne fin.
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 p>
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 p>
insérer dans la table de nom (colonne1, colonne2) ('', '' ''); strong> p>
votre chaîne comme celle-là ajoutez maintenant la ligne suivante p> maintenant insérer dans dB et vérifiez que vous avez une valeur null que leur soit logique. p> p>
sqlstring.null code> devrait faire le travail juste bien :) p>
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()));
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.