web-dev-qa-db-fra.com

Comment insérer une valeur null dans une colonne de type date/heure dans un serveur SQL

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;
}
8
social
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).

11
Dr Schizo
if (//some condition)   
{
   cmd.Parameters.AddWithValue("@dateofBirth", txtdob.text);
}
else 
{ 
   cmd.Parameters.AddWithValue("@dateofBirth", DBNull.Value); 
}
7
Rahul

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;
  }
4
RAJESH KUMAR

Tout d'abord, pour pouvoir insérer null dans une colonne de base de données, la colonne doit accepter nulls. 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.

3
SWeko

essayez d'utiliser ceci 

System.Data.SqlTypes.SqlDateTime.Null
2
Samad Kakkad

Essayez quelque chose comme ça, en utilisant Add plutôt que AddWithValue ..

DB.Parameters.Add("@date", SqlDbType.DateTime).Value = DBNull.Value;
1
Cuteboy_Max

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.

1
Lloyd

Dans la procédure stockée, procédez comme suit:

insert into table(date)
values(case when @InsertDate ='' then 
               null 
            else 
               @insertDate 
       end)
0
zxc

Essayez d'utiliser:

if (string.IsNullOrWhiteSpace(InsertDate.Text))
{
    cmd1.Parameters["@InsertDate"].Value = getDate;
}
else
{
    cmd1.Parameters["@InsertDate"].Value = InsertDate.Text;
}
0
beastieboy

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

0
Shanmuga priya