none
Evitar el duplicado de registros RRS feed

  • Pregunta

  • Hola que tal, soy algo nuevo en esto y estoy trabajando con lectura de datos seriales y C# y a todo esto involucrando SQL el tema es el siguiente:

    Tomo datos seriales (son 3 números) y esos los guardo en una tabla y a esos 3 números les asigno un nombre un dni, etc y luego con el siguiente código los llamo desde la BD y con eso duplico los registros al volver a tomar los mismos datos, pero al tomar datos seriales distintos el programa me vuelve a duplicar los datos ya que en las variables quedaron asignados los datos anteriores como podría evitar eso ? 

    Aclaracion: Si la lectura serial no se encentra registrada en la BD en las variables nombre1,card y dni  quedan asignados los valores que tomaron cuando se encontró algo registrado no importa si en la BD no hay valores yo pensé que al estar vacíos los campos las variables también quedarían vacías pero no es así. Desde ya muchisimas gracias por cualquier tipo de ayuda saludos!

                try
                {
                    query1 = "SELECT*FROM asistencia where idnfc='" + uid + "'";
                    conexion1.Open();
                    cmd1 = new MySqlCommand(query1, conexion1);
                    dr = cmd1.ExecuteReader();
                    while (dr.Read())
                    {
                        card = Convert.ToString(dr["idnfc"]);
                        nombre1 = Convert.ToString(dr["nombre"]);
                        dni = Convert.ToString(dr["dni"]);
                    }
                }
                catch (Exception ex) { MessageBox.Show("error: " + ex); }
                finally { conexion1.Close(); dr.Close(); }

    • Editado Mauro19 martes, 16 de agosto de 2016 20:51
    martes, 16 de agosto de 2016 20:49

Respuestas

  • hola

    lo primero que podria mecionar es que debes usar parametro en el codigo, NUNCA se unen los valores en un string

    conexion1.Open();
    
    string query1 = "SELECT * FROM asistencia where idnfc = ?uid";
    MySqlCommand cmd1 = new MySqlCommand(query1, conexion1);
    cmd1.Parameters.AddWithValue("?uid", uid)
    
    MySqlDataReader dr = cmd1.ExecuteReader();
    if (dr.Read())
    {
    	card = Convert.ToString(dr["idnfc"]);
    	nombre1 = Convert.ToString(dr["nombre"]);
    	dni = Convert.ToString(dr["dni"]);
    }

    ademas si solo vas a recuperar un valor se usa el "if" no el "while"

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 16 de agosto de 2016 21:12
  • hola

    >>pero al tomar datos seriales distintos el programa me vuelve a duplicar los datos ya que en las variables quedaron asignados los datos anteriores como podría evitar eso ?

    si estas recuperando varios datos y quieres convervar todos estos deberias definir una lista donde ir agregando

    entoncs con uan clase

    public class Persona{
    
       public string card {get;set;}
       public string nombre1 {get;set;}
       public string dni {get;set;}
    
    }

    puedes definir un List<Persona> donde ir agregando los valores de cada select que ejecutas contra la db

    MySqlDataReader dr = cmd1.ExecuteReader(); if (dr.Read()) {

    Persona p = new Persona(){ card = Convert.ToString(dr["idnfc"]), nombre1 = Convert.ToString(dr["nombre"]), dni = Convert.ToString(dr["dni"])

    }

    lista.Add(p); }

    entonces si tienes 3 dni, puedes conservar en memoria todos estos sin perder el dato anterior

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 16 de agosto de 2016 21:21

Todas las respuestas

  • hola

    lo primero que podria mecionar es que debes usar parametro en el codigo, NUNCA se unen los valores en un string

    conexion1.Open();
    
    string query1 = "SELECT * FROM asistencia where idnfc = ?uid";
    MySqlCommand cmd1 = new MySqlCommand(query1, conexion1);
    cmd1.Parameters.AddWithValue("?uid", uid)
    
    MySqlDataReader dr = cmd1.ExecuteReader();
    if (dr.Read())
    {
    	card = Convert.ToString(dr["idnfc"]);
    	nombre1 = Convert.ToString(dr["nombre"]);
    	dni = Convert.ToString(dr["dni"]);
    }

    ademas si solo vas a recuperar un valor se usa el "if" no el "while"

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 16 de agosto de 2016 21:12
  • Mauro19,

    La verdad que no entiendo que tiene que ver el caso que mencionas con SQL Server, quizá debas dejar más claro el problema que presentas o lo que requieres.

    martes, 16 de agosto de 2016 21:15
  • hola

    >>pero al tomar datos seriales distintos el programa me vuelve a duplicar los datos ya que en las variables quedaron asignados los datos anteriores como podría evitar eso ?

    si estas recuperando varios datos y quieres convervar todos estos deberias definir una lista donde ir agregando

    entoncs con uan clase

    public class Persona{
    
       public string card {get;set;}
       public string nombre1 {get;set;}
       public string dni {get;set;}
    
    }

    puedes definir un List<Persona> donde ir agregando los valores de cada select que ejecutas contra la db

    MySqlDataReader dr = cmd1.ExecuteReader(); if (dr.Read()) {

    Persona p = new Persona(){ card = Convert.ToString(dr["idnfc"]), nombre1 = Convert.ToString(dr["nombre"]), dni = Convert.ToString(dr["dni"])

    }

    lista.Add(p); }

    entonces si tienes 3 dni, puedes conservar en memoria todos estos sin perder el dato anterior

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 16 de agosto de 2016 21:21
  • Mira sucede esto del puerto serial tomo unos datos y los guardo en la BD llamandose idnfc a ese idnfc les asigno un nombre y otras cosas. Luego marcando otra vez el idnfc llamo a los datos esos para verlos en un data grid peeero al marcar otro idnfc distinto al guardado  en las variables nombre,dni y card quedan guardados los datos llamados con el primer idncf ignorando que los campos de la BD estén vacios
    martes, 16 de agosto de 2016 22:40
  • Disculpame la ignorancia pero por que no puedo unir los valores en un string ? de todos modos gracias por la ayuda, enseguida intento modificando esas cosas y le cuento que tal queda la cosa
    martes, 16 de agosto de 2016 22:42