J'ai ce formulaire Web C# qui a une boîte de sélection de date. Si la date est définie sur Nothing (valeur par défaut), je souhaite qu'elle transmette NULL à la base de données. Cela se produit dans ma requête paramétrée.Mon paramètre SQLParameter ne transmet pas correctement la valeur NULL
SqlParameter CMActionDate = new SqlParameter();
CMActionDate.ParameterName = "@ActionDate";
if (ActionDate.Equals(""))
{
CMActionDate.Value = System.Data.SqlTypes.SqlDateTime.Null;
}
else
{
CMActionDate.Value = ActionDate;
}
Quand je tourne le débogage je vois que la date est en effet « » il va dans l'instruction IF et définit la actiondate.value à {NULL} comme je pense qu'il devrait.
Cependant.
Quand il va alors exécuter le nonquery, je clique sur la loupe et voir ceci:
UPDATE table SET [action_date] = '' WHERE [id] = 2488
Ce que je voudrais voir est la suivante:
UPDATE table SET [action_date] = 'Null' WHERE [id] = 2488
Depuis le action_date jamais vraiment obtient la valeur NULL, puis la valeur dans le champ datetime redevient "01/01/1900 12:00:00 AM" et c'est une douleur en soi.
J'ai essayé d'installer CMActionDate.Value aux valeurs suivantes en vain (je reçois le même résultat que ci-dessus.):
- DBNull.Value;
- "NULL";
- SqlDateTime.Null;
- null;
Aide.
EDIT
Peut-être que je n'étais pas clair? Oui, bien sûr, la requête paramétrisé ressemble à ceci:
"UPDATE CM_Codebase SET [action_date] = '" + @ActionDate + "' WHERE [id] = " + @CM_id + "";
Mais quand je suis débogage cette chose dans VS, je mets un point d'arrêt avant droit ExecuteNonQuery(); donc je peux voir le SQL qu'il essaie de lancer. C'est là que je vois le vrai SQL et vois le bit où action_date = ''.
Cela aide-t-il?
Vous le faites mal. Lisez à nouveau le code dans ma réponse. Cela revient à essayer d'utiliser un paramètre comme une variable de substitution, et du point de vue du code C#, ce n'est pas le cas. –
Notez que dans mon code, il n'y a pas de guillemets simples autour de @ActionDate et j'inclus @ActionDate dans la requête comme une autre partie de la chaîne littérale. –