J'ai une table dans laquelle il y a des colonnes de type datetime. J'utilise une procédure stockée pour insérer des valeurs dans la table. Dans la procédure stockée, j'ai des variables qui acceptent null pour l'insertion dans la table. Mon problème est que lorsque j'essaie d'insérer une valeur null dans la colonne datetime de ma table, une erreur est générée . Mon code est le.
System.Data.SqlTypes.SqlDateTime getDate;
//set DateTime null
getDate = SqlDateTime.Null;
if (InsertDate.Text == "")
{
cmd1.Parameters["@InsertDate"].Value = getDate;
}
else
{
cmd1.Parameters["@InsertDate"].Value = InsertDate.Text;
}
cmd1.Parameters["@InsertDate"].Value = getDate ?? DBNull.Value;
La clé étant DBNull.Value. J'imagine que vous avez une variable DateTime nullable, c'est-à-dire DateTime? someVariable
. Vous pouvez le tester pour null et s'il est utilisé, utilisez DBNull.Value
(comme indiqué ci-dessus).
if (//some condition)
{
cmd.Parameters.AddWithValue("@dateofBirth", txtdob.text);
}
else
{
cmd.Parameters.AddWithValue("@dateofBirth", DBNull.Value);
}
Pour transmettre la valeur null à db, vous pouvez utiliser DBNull.Value. S'il vous plaît essayer ceci
if (string.IsNullOrWhiteSpace(InsertDate.Text))
{
cmd1.Parameters["@InsertDate"].Value =DBNull.Value;
}
else
{
cmd1.Parameters["@InsertDate"].Value = InsertDate.Text;
}
Tout d'abord, pour pouvoir insérer null
dans une colonne de base de données, la colonne doit accepter null
s. Ouvrez la table dans le concepteur et voyez si la colonne pertinente est nullable ou non. Si ce n'est pas le cas et que vous essayez d'insérer une valeur null, vous obtiendrez l'erreur suivante:
Impossible d'insérer la valeur NULL dans la colonne 'InsertDate', table 'NomTable'; colonne n'autorise pas les valeurs NULL.
Cela dit, puisque vous utilisez des procédures stockées pour insérer des données, je vous recommande d'utiliser des valeurs par défaut pour les paramètres au niveau de la procédure, au lieu d'imposer une charge supplémentaire au code d'application. Ensuite, vous ne pouvez pas définir le paramètre côté application, et cela fonctionnerait correctement:
create procedure InsertIntoTable
-- ....other parameters here...
@InsertDate datetime = null -- this means that if the value is not supplied,
-- null is used by default
as begin
insert into TableName (InsertDate) values (@InsertDate)
end
et du côté C #, il suffit de faire:
if (!string.IsNullOrWhitespace(InsertDate.Text)) {
// check to see if the entered text is actually a date
DateTime insertDate = ... some parsing/verification code...;
cmd1.Parameters["@InsertDate"].Value = insertDate;
}
Notez qu'il n'y a pas de branche else
. Par conséquent, si la variable InsertDate
est vide, le paramètre n'est pas envoyé du tout.
essayez d'utiliser ceci
System.Data.SqlTypes.SqlDateTime.Null
Essayez quelque chose comme ça, en utilisant Add plutôt que AddWithValue ..
DB.Parameters.Add("@date", SqlDbType.DateTime).Value = DBNull.Value;
Vous devriez juste pouvoir fournir null
directement en tant que valeur de paramètre:
if (String.IsNullOrWhitespace(InsertDate.Text)) {
cmd1.Parameters["@InsertDate"].Value = null;
} else {
cmd1.Parameters["@InsertDate"].Value = InsertDate.Text;
}
Également passé à utiliser String.IsNullOrWhitespace()
pour rechercher une chaîne vide.
Dans la procédure stockée, procédez comme suit:
insert into table(date)
values(case when @InsertDate ='' then
null
else
@insertDate
end)
Essayez d'utiliser:
if (string.IsNullOrWhiteSpace(InsertDate.Text))
{
cmd1.Parameters["@InsertDate"].Value = getDate;
}
else
{
cmd1.Parameters["@InsertDate"].Value = InsertDate.Text;
}
Essayez cette logique si DBNull.Value n’est pas travaillé .. utilisez DateTime? nul
Assurez-vous que votre champ de base de données doit autoriser la valeur null
dtexpiry! = null? dtexpiry: (DateTime?) null