none
como insertar datos en una base de datos sql RRS feed

  • Pregunta

  • hola, quiero saber por mi código no esta funcionando, lo que debe de hacer es insertar una fecha en que esta en un label a una base de datos pero solo me da este error : System.Data.SqlClient.SqlException: 'Cannot insert the value NULL into column 'salida', table 'restaurant.dbo.Registros'; column does not allow nulls. INSERT fails.
    The statement has been terminated.' mientras lo que estoy insertando no es un valor null mi codigo es el siguiente:

    private void Playbtn_Click(object sender, EventArgs e)
            {
                DateTime date = DateTime.Now;
    
    
                Fecha.Text = date.ToString();
                con.Open();
                SqlCommand cmd = new SqlCommand("insert into Registros (entrada) values (@entrada)",con);
                cmd.Parameters.AddWithValue("@entrada",Fecha.Text);
                cmd.ExecuteNonQuery();
                
                con.Close();
               
            } 

     
    miércoles, 10 de julio de 2019 23:50

Respuestas

  • Mira por lo que veo, estas creando un sistema de un restaurante que controle los horarios de entrada y salida de sus empleados..Yo estoy haciendo también sistema de restaurante, y para no hacerme líos con los horarios de entrada y salida, cree dos tablas(RegistroEntrada, RegistroSalida), porque hice esto, porque al crear una sola tabla, los horarios de entrada y salida no deben de ser nulos, y vos no podes poner el horario de entrada y de salida al mismo tiempo, porque a lo mejor el empleado dice que se va a retirar a las 20:00hs pero ese día tardo mas de lo normal y se retiro a las 20:30, entonces yo para tener flexibilidad cree dos tablas..

    cervera

    • Propuesto como respuesta Pablo RubioModerator jueves, 11 de julio de 2019 15:12
    • Marcado como respuesta beratersc viernes, 12 de julio de 2019 23:39
    jueves, 11 de julio de 2019 0:17
  • create table RegistroEntrada
    (
    Id_RegEnt int identity(1,1) primary key not null,
    Horario time not null,
    Dia date not null
    )
    
    create table RegistroSalida
    (
    Id_RegSal int identity(1,1) primary key not null,
    Horario time not null,
    Dia date not null
    )
    
    create table Empleado
    (
    Id_Empl int identity(1,1) primary key,
    Id_RegistroEntrada int REFERENCES RegistroEntrada(Id_RegEnt) not null,
    Id_RegistroSalida int REFERENCES RegistroSalida(Id_RegSal) not null,
    Nombre varchar(200),
    Apellido varchar(200),
    EstadoCivil varchar(100),
    Edad int,
    DNI int not null
    )


    cervera

    • Propuesto como respuesta Pablo RubioModerator jueves, 11 de julio de 2019 15:12
    • Marcado como respuesta beratersc viernes, 12 de julio de 2019 23:56
    jueves, 11 de julio de 2019 0:25

Todas las respuestas

  • Hola !! Ese error te esta pasando porque seguro a la columna "salida" la definiste como not null, y no le estas mandando ningún dato, de ultima modifica esa columna y ponele que acepte datos nulos, acordate de leer siempre los errores que te salgan, porque ahí te da la info del error para una rápida solución('No se puede insertar el valor NULL en la columna' salida ', tabla' restaurant.dbo.Registros '; La columna no permite nulos.) Saludos !!

    Nicolás Cervera


    miércoles, 10 de julio de 2019 23:54
  • pero entonces como hago que mande la fecha (el Datetime date = Datetime.Now; antes del codigo para madar los datos )
    jueves, 11 de julio de 2019 0:05
  • Mira por lo que veo, estas creando un sistema de un restaurante que controle los horarios de entrada y salida de sus empleados..Yo estoy haciendo también sistema de restaurante, y para no hacerme líos con los horarios de entrada y salida, cree dos tablas(RegistroEntrada, RegistroSalida), porque hice esto, porque al crear una sola tabla, los horarios de entrada y salida no deben de ser nulos, y vos no podes poner el horario de entrada y de salida al mismo tiempo, porque a lo mejor el empleado dice que se va a retirar a las 20:00hs pero ese día tardo mas de lo normal y se retiro a las 20:30, entonces yo para tener flexibilidad cree dos tablas..

    cervera

    • Propuesto como respuesta Pablo RubioModerator jueves, 11 de julio de 2019 15:12
    • Marcado como respuesta beratersc viernes, 12 de julio de 2019 23:39
    jueves, 11 de julio de 2019 0:17
  • create table RegistroEntrada
    (
    Id_RegEnt int identity(1,1) primary key not null,
    Horario time not null,
    Dia date not null
    )
    
    create table RegistroSalida
    (
    Id_RegSal int identity(1,1) primary key not null,
    Horario time not null,
    Dia date not null
    )
    
    create table Empleado
    (
    Id_Empl int identity(1,1) primary key,
    Id_RegistroEntrada int REFERENCES RegistroEntrada(Id_RegEnt) not null,
    Id_RegistroSalida int REFERENCES RegistroSalida(Id_RegSal) not null,
    Nombre varchar(200),
    Apellido varchar(200),
    EstadoCivil varchar(100),
    Edad int,
    DNI int not null
    )


    cervera

    • Propuesto como respuesta Pablo RubioModerator jueves, 11 de julio de 2019 15:12
    • Marcado como respuesta beratersc viernes, 12 de julio de 2019 23:56
    jueves, 11 de julio de 2019 0:25
  • hola

    >>Cannot insert the value NULL into column 'salida', table 'restaurant.dbo.Registros'; column does not allow nulls. INSERT fails.

    sino defines un valor por defecto para el campo o permites que sea nulable, entonces debes indicarlo en el insert

    Si el campo es del tipo DateTime no necesitas poner el valor en un textbox

    private void Playbtn_Click(object sender, EventArgs e)
    {
    	DateTime date = DateTime.Now;
    
    	con.Open();
    	
    	string insert = "insert into Registros (entrada, salida) values (@entrada, @salida)";
    	SqlCommand cmd = new SqlCommand(insert,con);
    	cmd.Parameters.AddWithValue("@entrada",date);
    	cmd.Parameters.AddWithValue("@salida",date);
    	
    	cmd.ExecuteNonQuery();
    
    	con.Close();
    
    } 

    si tienes una entrada y la salida se data dentro de un tiempo vas a necesitar ademas un id para poder localizacio el registro y aplicar un UPDATE en el campo salida

    Pero en la db deberias permitir que se pueda insertar null

    edita la tabla y marca la opcion "allow null" para el campo salida

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 11 de julio de 2019 1:34
  • Hola beratersc:

    System.Data.SqlClient.SqlException: 'Cannot insert the value NULL into column 'salida', table 'restaurant.dbo.Registros'; column does not allow nulls. INSERT fails.

    El error esta en la sentencia de inserción ya que no le estas mandando la fecha de salida.

    El tratamiento de nulos también es complejo, pero otro modo de realizarlo, es guardar una fecha inicial siempre, de manera que si la salida es por ejemplo '01/01/1900' es que en realidad no ha salido. Y no insertas nulos.

    /* OPCION 1 */
    CREATE TABLE registros
    (id      INT IDENTITY(1, 1) PRIMARY KEY, 
     entrada DATETIME NOT NULL,
     salida DATETIME NOT NULL
    );
    GO
    
    /* OPCION 2 */
    CREATE TABLE registros2
    (id      INT IDENTITY(1, 1) PRIMARY KEY, 
     entrada DATETIME NOT NULL,
     salida DATETIME NOT NULL DEFAULT('19000101') 
    /* SI LA SENTENCIA NO INSERTA EL DATO, POR DEFECTO LA BASE DE DATOS INSERTA ESTE VALOR */
    );
    GO

    Luego en c# tienes las dos posibilidades.

    // opción 1 
                var ConnectionString = @"Persist Security Info=False;Integrated Security=true;Initial Catalog=ejTres;Server=ESQUINERO";
    
                DateTime date = DateTime.Now;
                string FechaInicial = "19000101";
                using (SqlConnection con = new SqlConnection(ConnectionString))
                {
                    con.Open();
                    
                    textBoxFecha.Text = date.ToString();
                    SqlCommand cmd = new SqlCommand("insert into Registros (entrada, salida) values (@entrada, @salida)", con);
                    cmd.Parameters.AddWithValue("@entrada", textBoxFecha.Text);
                    cmd.Parameters.AddWithValue("@salida", FechaInicial);
                    cmd.ExecuteNonQuery();
    
                }
    
    // opción 2
    
               var ConnectionString = @"Persist Security Info=False;Integrated Security=true;Initial Catalog=ejTres;Server=ESQUINERO";
    
                DateTime date = DateTime.Now;
       
                using (SqlConnection con = new SqlConnection(ConnectionString))
                {
                    con.Open();
    
                    textBoxFecha.Text = date.ToString();
                    SqlCommand cmd = new SqlCommand("insert into Registros2 (entrada) values (@entrada)", con);
                    cmd.Parameters.AddWithValue("@entrada", textBoxFecha.Text);
     
                    cmd.ExecuteNonQuery();
    
                }

    Salida


    jueves, 11 de julio de 2019 5:03