none
Evitar registros duplicados en C# y Entity framework RRS feed

  • Pregunta

  • Buen dia tengo un formulario de registro y quiero verificar que el registro ingresado no exista y si exista muestre un mensaje de que ya existe.

    Tengo mi función de registro 

    private void agregarCanal()
            {
                Canales c = new Canales();
                c.Numero = txtAdd.Text;
                con.Canales.Add(c);
                con.SaveChanges();
            }

    Mi boton de Agregar 

    private void btnAgregar_Click(object sender, EventArgs e)
            {
                if (_flag == 1)
                {
                    if (validarRegistro())
                    { 
                    agregarCanal();
                    MessageBox.Show("Numero de canal ingresado correctamente");
                    }
                    else
                    {
                        MessageBox.Show("Ingrese un numero de canal");
                    }
            }
    
    

    valido que el registro no vaya vacio

    private bool validarRegistro()//metodo que valida que no se ingrese algo vacio
            {
                bool ok = true;
                if (txtAdd.Text == "")
                {
                    ok = false;
                    errorProvider1.SetError(txtAdd, "");
                }
                return ok;
            }

    ¿como puedo validar que el registro no exista  que lo inserte y si existe mande una alerta?


    JavierLg12

    viernes, 29 de diciembre de 2017 4:17

Respuestas

  • Matías ya te ha mostrado como escribir una consulta contra el modelo de clases (contexto), ¿por qué abordas una solución basada en la clase DataTable siendo que accedes a los datos a través de la abstracción que ofrece Entity Framework?

    - Método para validar existencia

    private bool ValueExists(string _Value)
    {
    	return con.Canales.Any(x => x.Numero.Equals(_Value)); //Reducir el ámbito del contexto
    }

    - Invocar método

    private void btnAgregar_Click(object sender, EventArgs e)
    {
    	if (txtAdd.Text.Trim() == string.Empty) MessageBox.Show("Ingrese un número de canal");
    	else if (ValueExists(txtAdd.Text.Trim())) MessageBox.Show("El valor ya existe...");
    	else
    	{
    		agregarCanal(); //Quizá debas envolver la operación en un controlador de errores
    		MessageBox.Show("Número de canal ingresado correctamente");
    	}
    }

    domingo, 31 de diciembre de 2017 2:27
  • Muchas gracias Willams Morales

    mi pregunta a llegado a la solución requerida.

    Les agradezco a todos por el aporte saludos y feliz fin de año nuevo.


    JavierLg12

    domingo, 31 de diciembre de 2017 5:33
  • Buen dia Willams Morales

    ¿tengo una pequeña duda, como puedo validar existencia en mas de un campo? 


    JavierLg12

    domingo, 31 de diciembre de 2017 17:52

Todas las respuestas

  • Hola.

    public bool Existe(string numero)
    {
      var entity = dbContext.Canales.SingleOrDefault(c => c.Numero == numero);
      return entity != null;
    }

    Offtopic: qué raro que un a variable string se llame "numero", ¿no?

    Salu2

    viernes, 29 de diciembre de 2017 6:19
  • Hola.

    public bool Existe(string numero)
    {
      var entity = dbContext.Canales.SingleOrDefault(c => c.Numero == numero);
      return entity != null;
    }

    Offtopic: qué raro que un a variable string se llame "numero", ¿no?

    Salu2

    si jejejeje 

    y como muestro un Mensaje de que el registro que ingreso ya existe?


    JavierLg12

    viernes, 29 de diciembre de 2017 13:03
  • Hola JavierLg12

    De acuerdo a tu consulta, puedes utilizar el siguiente código ejemplo que te voy a compartir que puede serte muy útil.

    if (this.IsNuevo)

        // Evitar que se registren registros duplicados

        {                       

            DataTable tabla = NPais.Mostrar();

            if (tabla.Rows.Count >= 0)

            {

                repetido = false;

                foreach (DataRow fila in tabla.Rows)

                {

                    if (fila["nombre"].ToString() == txtPais.Text.Trim().ToUpper())

                    {

                        MessageBox.Show("El Registro ya Existe!!","Sistema de Ventas", MessageBoxButtons.OK, MessageBoxIcon.Information);

                        repetido = true;                                       

                        break;

                    }

                }                           

            }

            else

            {

                MessageBox.Show("No ha ingresado valores!!");

            }

            if(!repetido)

            {

                rpta = NPais.Insertar(this.txtPais.Text.Trim().ToUpper());

            }

        }

    }

    Quedamos al pendiente de cualquier actualización de tu parte.

    Saludos Cordiales y feliz año nuevo.

    Gracias por usar los foros de MSDN.

    Pablo Rubio
     _____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    viernes, 29 de diciembre de 2017 16:47
    Moderador
  • A que le llamamos this.IsNuevo y que es NPais.Mostrar();

    que sustituyo en vez de lo apuntado.

    rpta = NPais.Insertar(this.txtPais.Text.Trim().ToUpper()); en esta linea no se que es NPais.Insertar

    saludos y buen fin de año


    JavierLg12

    viernes, 29 de diciembre de 2017 17:27
  • Hola JavierLg12

    De acuerdo a tu consulta, puedes utilizar el siguiente código ejemplo que te voy a compartir que puede serte muy útil.

    if (this.IsNuevo)

        // Evitar que se registren registros duplicados

        {                       

            DataTable tabla = NPais.Mostrar();

            if (tabla.Rows.Count >= 0)

            {

                repetido = false;

                foreach (DataRow fila in tabla.Rows)

                {

                    if (fila["nombre"].ToString() == txtPais.Text.Trim().ToUpper())

                    {

                        MessageBox.Show("El Registro ya Existe!!","Sistema de Ventas", MessageBoxButtons.OK, MessageBoxIcon.Information);

                        repetido = true;                                       

                        break;

                    }

                }                           

            }

            else

            {

                MessageBox.Show("No ha ingresado valores!!");

            }

            if(!repetido)

            {

                rpta = NPais.Insertar(this.txtPais.Text.Trim().ToUpper());

            }

        }

    }

    Quedamos al pendiente de cualquier actualización de tu parte.

    Saludos Cordiales y feliz año nuevo.

    Gracias por usar los foros de MSDN.

    Pablo Rubio
     _____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    En mi caso no entiendo como implementar el ejemplo que me das en mi consulta, ahí algunas lineas que no comprendo como anteriormente lo comente, o que poner si me pudieran orientar a la solución sera de mas.

    Saludos, Feliz fin de año y prospero año nuevo a todos  

     

    JavierLg12

    sábado, 30 de diciembre de 2017 4:00
  • Ya monte el codigo amigo me creo en mi clase Canales 

            internal static System.Data.DataTable Mostrar()
            {
                throw new NotImplementedException();
            }
    
            internal static object Insertar(string p)
            {
                throw new NotImplementedException();
            }

    que le tengo que agregar o quitar o asi lo dejo.

    y en formulario de registro me creo 

            public bool IsNuevo { get; set; }
    
            public bool repetido { get; set; }
    
            public object rpta { get; set; }


    JavierLg12

    sábado, 30 de diciembre de 2017 19:19
  • Feliz fin de año y prospero año Pablo Rubio 

    Mira me quedo asi es correcto: 

            private void agregarCanal()
            {
                if (this.IsNuevo) // Evitar que se registren registros duplicados
                {
                    DataTable dt = Canales.Mostrar();
                    if (dt.Rows.Count >= 0)
                    {
                        repetido = false;
                        foreach (DataRow fila in dt.Rows)
                        {
                            if (fila["Numero"].ToString() == txtAdd.Text.Trim().ToUpper())
                            {
                                MessageBox.Show("El Numero de canal ya Existe!!", "Registro de canales", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                repetido = true;
                                break;
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("Ingrese un numero de canal!!");
                    }
                    if (!repetido)
                    {
                        rpta = Canales.Insertar(this.txtAdd.Text.Trim().ToUpper());
                    }
                }
            }

    A un no lo corro pero ahi observaciones de tu parte amigo saludos.


    JavierLg12

    domingo, 31 de diciembre de 2017 0:54
  • Pablo Rubio

    No me funciono no registra no da alerta, que hice mal


    JavierLg12

    domingo, 31 de diciembre de 2017 1:05
  • Matías ya te ha mostrado como escribir una consulta contra el modelo de clases (contexto), ¿por qué abordas una solución basada en la clase DataTable siendo que accedes a los datos a través de la abstracción que ofrece Entity Framework?

    - Método para validar existencia

    private bool ValueExists(string _Value)
    {
    	return con.Canales.Any(x => x.Numero.Equals(_Value)); //Reducir el ámbito del contexto
    }

    - Invocar método

    private void btnAgregar_Click(object sender, EventArgs e)
    {
    	if (txtAdd.Text.Trim() == string.Empty) MessageBox.Show("Ingrese un número de canal");
    	else if (ValueExists(txtAdd.Text.Trim())) MessageBox.Show("El valor ya existe...");
    	else
    	{
    		agregarCanal(); //Quizá debas envolver la operación en un controlador de errores
    		MessageBox.Show("Número de canal ingresado correctamente");
    	}
    }

    domingo, 31 de diciembre de 2017 2:27
  • Muchas gracias Willams Morales

    mi pregunta a llegado a la solución requerida.

    Les agradezco a todos por el aporte saludos y feliz fin de año nuevo.


    JavierLg12

    domingo, 31 de diciembre de 2017 5:33
  • Buen dia Willams Morales

    ¿tengo una pequeña duda, como puedo validar existencia en mas de un campo? 


    JavierLg12

    domingo, 31 de diciembre de 2017 17:52
  • Buen dia, 

    ¿Como le pudiera hacer para modificar un registro, si solo modifico un campo de mi formulario que no me alerte que los datos ingresados ya existen?


    JavierLg12

    lunes, 9 de julio de 2018 15:10
  • oye amigo 

    ¿como puedo hacer para hacer una actualización (update) a un registro?

    • Uso el método de validar existencia.  

    Saludos.


    JavierLg12

    jueves, 6 de septiembre de 2018 21:42
  • Estimado Programador semi-jr:

    Este hilo ya ha tenido su resolución y tu pregunta es diferente, para que alguien te pueda ayudar, introduce un nuevo mensaje, con la misma.

    Además si lo deseas hacer con Entity Framework, puedes hacerlo en los foros de MSDN., ya que la resolución será completamente diferente.

    Si lo deseas hacer con SQL, este es tu sitio.

    Gracias

    viernes, 7 de septiembre de 2018 5:41