none
Escribir NULL en un datetime en SQL server 2012 RRS feed

  • Pregunta

  • Hola,


    estoy teniendo problemas para escribir el valor NULL en un datetime en SQL server 2012 usando Visual studio 2015.

    Lo que quiero hacer es que cuando no esté marcado el "Checked" de un DateTimePicker se almacene un NULL en la base de datos SQL server 2012.

    mi código simplificado es el siguiente:

                SqlCommand cmd = default(SqlCommand);
                SqlConnection con = default(SqlConnection);
                string connetionString = null;
                string Statement;

    Statement = "UPDATE [dbo].[DataBasesSQL] SET dtCreationDate=@dtCreationDate where sDataBaseName='XXXXX';

    connetionString = "Data Source=CSCESPAE679900;Initial Catalog=REPOSITORY2;Integrated Security = true";

     try
                {

                    con = new SqlConnection(connetionString);
                    con.Open();
                    cmd = new SqlCommand(Statement, con);


     if (view.creationPicker.Checked)
                    {
                        cmd.Parameters.AddWithValue("@dtCreationDate", view.creationPicker.Value);
                    }
                    else
                    {

                       //HE PROBADO CON LAS DOS SIGUIENTES LÍNEAS                                                                                                                  //cmd.Parameters.AddWithValue("@dtCreationDate", System.Data.SqlTypes.SqlDateTime.Null) ;
                        cmd.Parameters.Add("@dtCreationDate", System.Data.SqlDbType.DateTime).Value = System.Data.SqlTypes.SqlDateTime.Null;
                    }

                    executeResult = cmd.ExecuteNonQuery();
                    con.Close();
                    con.Dispose();

    El código no me da errores, pero al ejecutarlo no se almacena el NULL en la base de datos.

    ¿Alguna solución?

    Muchas gracias, un saludo, Germán.

    • Cambiado webJose jueves, 31 de marzo de 2016 13:50
    jueves, 31 de marzo de 2016 13:07

Todas las respuestas

  • hola

    para asignar null debes usar

    cmd.Parameters.AddWithValue("@dtCreationDate", DBNull.Value);


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 31 de marzo de 2016 13:16
  •  Prueba con DBNull.Value.
     if (view.creationPicker.Checked)
                    {
                        cmd.Parameters.AddWithValue("@dtCreationDate", view.creationPicker.Value);
                    }
                    else
                    {
    cmd.Parameters.AddWithValue("@dtCreationDate",DBNull.Value);
                    }

    Saludos

    jueves, 31 de marzo de 2016 13:16
  • Hola,

    sigue sin funcionarme, :(, es un poco extraño mis asignaciones son:

     if (view.creationPicker.Checked)
                    {
                        cmd.Parameters.AddWithValue("@dtCreationDate", view.creationPicker.Value);
                    }
                    else
                    {
                        cmd.Parameters.AddWithValue("@dtCreationDate", DBNull.Value);
                    }

                    if (view.decommPicker.Checked)
                    {
                        cmd.Parameters.AddWithValue("@dtDecommissionedDate", view.decommPicker.Value);
                    }
                    else
                    {
                        cmd.Parameters.AddWithValue("@dtDecommissionedDate", DBNull.Value);
                    }

    Si cambio la fecha se almacena bien, pero si quitio el check del date dateTimePicker me entra bien en los else pero no almacena el NULL en la base de datos.

    Muchas gracias, un saludo, Germán.

    viernes, 1 de abril de 2016 7:25
  • Es raro.

    ¿Y si dejas desmarcado uno y cambias la fecha del otro únicamente te actualiza una?


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    viernes, 1 de abril de 2016 7:32
  • hola

    Prueba de definir el paremetro con su tipo y añadirle el valor, te pongo el ejemplo para el null, deberías adaptarlo bien a tu código

    cmd.Parameters.Add("@dtCreationDate", System.Data.SqlDbType.DateTime);
       cmd.Parameters["@dtCreationDate"].value = DBNull.Value
    Seguramente lo que está pasando es que no sabe realizar bien el "cast" a DateTime, ya que AddWithValue lo hace automáticamente, de la forma que te indico lo realizas tú a mano.

    Saludos.

    viernes, 1 de abril de 2016 7:46