none
Validar que un campo no este vacio sql server RRS feed

  • Pregunta

  • Saludos, tengo el siguiente procedimiento almacenado el cual quisiera que al momento de que el usuario en C# ingrese un mismo numero de cedula del que esta en la base de datos que no lo actualize sino que aparezca un mensaje diciendo que esa cedula ya existe.

    Este es mi procedimiento almacenado

    ALTER procedure [dbo].[SP_InsertarActualizarEmpleados]
    (
    @Nombres varchar(20)
               ,@Apellidos varchar(20)
               ,@Cedula varchar(13)
               ,@Apodo varchar (10)
               ,@Flota varchar(12)
               ,@Celular varchar(12)
               ,@FechaIngreso varchar (20)
               ,@Status varchar(10)
      
               )
    AS
    IF   EXISTS  (SELECT Cedula  FROM Empleados WHERE  @Cedula = @Cedula)
    BEGIN

    INSERT INTO [Sistema].[dbo].[Empleados]
               ([Nombres]
               ,[Apellidos]
               ,[Cedula]
               ,[Apodo]
               ,[Flota]
               ,[Celular]
               ,[FechaIngreso]
               ,[Status]
      )
    VALUES
              (
               @Nombres 
               ,@Apellidos 
               ,@Cedula 
               ,@Apodo 
               ,@Flota 
               ,@Celular
               ,@FechaIngreso 
               ,@Status
      
              )

     END 
    ELSE
    BEGIN
    UPDATE [dbo].[Empleados]
      SET [Nombres] = @Nombres
     ,[Apellidos] = @Apellidos
     ,[Cedula] = @Cedula
     ,[Apodo] = @Apodo
     ,[Flota] = @Flota
     ,[Celular] = @Celular
      ,[FechaIngreso] = @FechaIngreso
     ,[Status] = @Status
     
    WHERE Cedula = @Cedula
    END

    sábado, 26 de agosto de 2017 17:14

Respuestas

  • A ver, ¿cuál es la necesidad de intentar -fallidamente claro- recuperar el valor de la propiedad Text del control 'TxtCedula' cuando el valor que necesitas lo tienes en el parámetro 'Cedula'? o dicho de otra manera ¿por qué defines un método con parámetros que no quieres usar?

    Por otro lado, pensé que habíamos acordado que el procedimiento almacenado cambiaba, veo que mantienes el código inicial.


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta Leonel Pimentel lunes, 11 de diciembre de 2017 5:30
    sábado, 26 de agosto de 2017 23:44

Todas las respuestas

  • Puedes hacer algo simple:

    - Esquema del procedimiento almacenado

    ALTER PROCEDURE [dbo].[SP_InsertarActualizarEmpleados]
        (Parameters)
    AS
    BEGIN
        INSERT INTO dbo.TableName (...)
        VALUES (...)
    END

    - Código de aplicación

    try
    {
    	using (SqlConnection Conn = new SqlConnection("ConnectionString"))
    	{
    		SqlCommand cmd = new SqlCommand("SP_InsertarActualizarEmpleados", Conn);
    		cmd.CommandType = CommandType.StoredProcedure;
    		cmd.Parameters.AddWithValue("@Apellidos", txtApellidos.Text);
    		//Add all parameters...
    
    		Conn.Open();
    		int Result = cmd.ExecuteNonQuery();
    
    		if (Result == 0)
    			MessageBox.Show("El número de cédula ya existe");
    		else
    			MessageBox.Show("Inserción realizada...");
    	}
    }
    catch (Exception ex)
    {
    	MessageBox.Show(ex.Message);
    }


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    sábado, 26 de agosto de 2017 17:42
  • public static void InsertarEmpleado(string Nombres, string Apellidos, string Cedula, string Apodo, string Flota, string Celular, string DTPFechaIngreso, string Status)
            {

                try
                {
                    SqlCommand comando = new SqlCommand("SP_InsertarActualizarEmpleados", Conexion);
                    comando.CommandType = CommandType.StoredProcedure;
                    comando.Parameters.AddWithValue("@Nombres", Nombres);
                    comando.Parameters.AddWithValue("@Apellidos", Apellidos);
                    comando.Parameters.AddWithValue("@Cedula", Cedula);
                    comando.Parameters.AddWithValue("@Apodo", Apodo);
                    comando.Parameters.AddWithValue("@Flota", Flota);
                    comando.Parameters.AddWithValue("@Celular", Celular);
                    comando.Parameters.AddWithValue("@FechaIngreso", DTPFechaIngreso);
                    comando.Parameters.AddWithValue("@Status", Status);

                    if (Conexion.State == ConnectionState.Closed)
                        Conexion.Open();
                    comando.ExecuteNonQuery();
                    if
                        (Conexion != null)
                        Conexion.Close();
                    MessageBox.Show("Se ha ingresado el empleado correctamente");


                }


                catch (Exception Error)
                {
                    MessageBox.Show("No se ha podido insertar el empleado correctamente" + Error.ToString());
                }

            }

    Al tratar de escribir el campo TxtCedula no aparece para poder escribirlo y si lo escribo aparece en rojo

                               
    sábado, 26 de agosto de 2017 17:56
  • No entiendo donde es que se produce el error, el ejemplo que te he propuesto es de base para que lo adaptes a tu desarrollo. Si los valores que pasas a la consulta sql los recuperas mediante los parámetros del método 'InsertarEmpleado()' entonces continúa con lo mismo, lo único que debes de tomar en cuenta es cambiar el procedimiento almacenado según la estructura adjunta y recuperar el valor que retorna el método ExecuteNonQuery(), si es cero es que no se ha producido ninguna operación, en consecuencia el valor de cédula ya existe.

    Por cierto, olvidé la validación en el procedimiento almacenado:

    ALTER PROCEDURE [dbo].[SP_InsertarActualizarEmpleados]
        (Parameters)
    AS
    BEGIN
        INSERT INTO dbo.TableName (col1, col2)
        SELECT @p1, @p2
        WHERE NOT EXISTS (SELECT 1 FROM Empleados WHERE  Cedula = @Cedula)
    END


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    sábado, 26 de agosto de 2017 18:21
  • Saludos el error se produce en C# al intentar escribir el campo de la cedula 

    https://drive.google.com/file/d/0B6mp3UHTG3aNcTZtY0RCc1pHX3M/view?usp=sharing

    Procedimiento almacenado

    ALTER procedure [dbo].[SP_InsertarActualizarEmpleados]
    (            
                @Nombres varchar(20)
               ,@Apellidos varchar(20)
               ,@Cedula varchar(13)
               ,@Apodo varchar (10)
               ,@Flota varchar(12)
               ,@Celular varchar(12)
               ,@FechaIngreso varchar (20)
               ,@Status varchar(10)
               
               )
    AS
    IF not  EXISTS (SELECT Cedula  FROM Empleados WHERE  @Cedula = @Cedula)
    BEGIN

            INSERT INTO [Monografico].[dbo].[Empleados]
               ([Nombres]
               ,[Apellidos]
               ,[Cedula]
               ,[Apodo]
               ,[Flota]
               ,[Celular]
               ,[FechaIngreso]
               ,[Status]
               )
            VALUES
              (
               @Nombres 
               ,@Apellidos 
               ,@Cedula 
               ,@Apodo 
               ,@Flota 
               ,@Celular
               ,@FechaIngreso 
               ,@Status
               
              )

     END 
        ELSE
            BEGIN
            UPDATE [dbo].[Empleados]
               SET [Nombres] = @Nombres
                  ,[Apellidos] = @Apellidos
                  ,[Cedula] = @Cedula
                  ,[Apodo] = @Apodo
                  ,[Flota] = @Flota
                  ,[Celular] = @Celular
                   ,[FechaIngreso] = @FechaIngreso
                  ,[Status] = @Status
                  
             WHERE Cedula = @Cedula
            END



    sábado, 26 de agosto de 2017 20:02
  • A ver, ¿cuál es la necesidad de intentar -fallidamente claro- recuperar el valor de la propiedad Text del control 'TxtCedula' cuando el valor que necesitas lo tienes en el parámetro 'Cedula'? o dicho de otra manera ¿por qué defines un método con parámetros que no quieres usar?

    Por otro lado, pensé que habíamos acordado que el procedimiento almacenado cambiaba, veo que mantienes el código inicial.


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta Leonel Pimentel lunes, 11 de diciembre de 2017 5:30
    sábado, 26 de agosto de 2017 23:44