Erreur lors de l'envoi de la valeur null au paramètre DateTime de la procédure stockée

J'ai un paramètre de procédure stockée comme:

@ScmDate DateTime = NULL 

De C # quand je passe le paramètre comme ci-dessous, il donne l'erreur: Erreur de conversion de nvarchar à datetime.

 if (txtWaitedDate.Text != "") cmdTwMainEntry.Parameters.AddWithValue("@scmDate", Convert.ToDateTime(txtWaitedDate.Text)); 

Même si j'ai donné la valeur par défaut de ce paramètre comme NULL, mais lorsque la condition C # ci-dessus n'est pas remplie, cela donne une erreur.

Édité:

J'obtiens l'erreur seulement quand je laisse TextBox vide.

Je soupçonne que votre format de date n'est pas ce qui est attendu par le server sql, essayez de le convertir avec DateTime.TryParse et le bon fournisseur de format pour votre instance SQL Server.

Cette erreur peut se produire par exemple quand on utilise le format mm / jj / aaaa et l'autre utilise jj / mm / aaaa.

MODIFIER

Changer le type de paramètre à la main devrait fonctionner de toute façon. Essayez avec ce code, devrait fonctionner:

  SqlParameter parameter = cmdTwMainEntry.Parameters.Add("@scmDate", System.Data.SqlDbType.DateTime); // Set the value. parameter.Value = (!ssortingng.IsNullOrEmpty(txtWaitedDate.Text)) ? Convert.ToDateTime(txtWaitedDate.Text) : System.DbNull.Value; 

Assurez-vous simplement d'envoyer DbNull.Value lorsque votre textbox est vide. Cela devrait faire l'affaire, afaik.

Je pense que vous remplissez une mauvaise date (format). Donc, cette valeur n'a pas pu être convertie.

Mettez un point d'arrêt avant que votre SQL s'exécute en C # et inspectez votre collection de parameters. Il semble que @ScmDate se faufile avec une valeur comme Ssortingng.Empty.

Si vous avez spécifié la valeur par défaut pour le paramètre, il n'est pas nécessaire de fournir la valeur de ce paramètre lors de l'appel de la procédure stockée. Par exemple si vous avez:

 @ScmDate DateTime = NULL 

Alors la solution simple est juste d' ignorer ce paramètre quand il n'y a aucune valeur disponible pour ce paramètre.

 if( DateTime.TryParse( txtWaitedDate.Text, out WaitedDate ) Entry.Parameters.AddWithValue("@scmDate", WaitedDate ); else Entry.Parameters.AddWithValue("@scmDate", DBNull.Value );