none
Actualizar tabla automaticamente con un ciclo for c# y sql RRS feed

  • Pregunta

  • Tengo una tabla asi 

    la cual la quiero actualizar toda con un ciclo y for

    la tabla contiene la siguiente esctructura 

    id    nombre            posicion 

    1    cristian              2

    2    jose jose            3

    3    juan carlos         4

    4    andres               5

    quiero actualizarla con ciclo for  el codigo es el siguiente 

    este es el metodo con la sulta sql para actualizar

      private int ActualizarPosicion(int numero) 
            {
                Int32 rest = 0;
                try
                {
                    string consulta = "UPDATE Equipos set e_posicion='" + numero + "'";
                     using(SqlConnection conex = Controlador.ObtenerConxeion())
                     {
                        SqlCommand cmd = new SqlCommand(consulta, conex);
                       rest = cmd.ExecuteNonQuery();
                    }
                }
                catch (Exception E){

                    MessageBox.Show("" + E.Message);
                }

                return rest;
            }

    y este el el código del boto actualizar

    int posicion = 1;

     for (int i = 0; i<30; i++){

     actu =  this.ActualizarPosicion(posicion++);
    }

    la varible posicion la inicialize en 1 y la estoy pasando como parametro dentro del ciclo for incrementandola de 1 en 1 

    osea que cada vez que se inserta un registro la variable posicion aumneta 1

    En problema que tengo es que aunque inicializase la varible posicion esta no se me incrementa, Si se me actualiza corectamente pero pero el campo de la tabla posisicon que me todo 1 asi 1 1 1 1 1 1 1 1  1

    y lo que quiero es que me quede 1 2 3 4 5 asi 

    No se si es que tengo algo malo en el ciclo o en el metodo ActualizarPosicion


    martes, 3 de julio de 2018 0:33

Todas las respuestas

  • Lo que veo es que tu consulta Update no tiene un Where, con lo que siempre te actualizará el mismo campo en TODOS los registros. Es decir, la primera vez que llamas a ActualizarPosicion, todos los registros se cambiarán a 1, la segunda vez todos a 2, etc., Con lo que al cabo de unas milésimas de segundo el ciclo terminará y todos los registros tendrán el valor 30. Lo que no me explico es que todos tengan un 1 en lugar de un 30. Tendrías que seguir el programa con el debugger paso a paso viendo lo que hace en cada momento, a ver dónde difiere el comportamiento.
    martes, 3 de julio de 2018 5:31
    Moderador
  • Hola:

    Además de lo que te indica Alberto, porqué no usas i+1 en vez de posición ya que estas usando una variable para el bucle, no tiene sentido a priori, utilizar otra, si es el mismo ciclo.

    ¿Y para que tener un método que devuelve un entero si no se hace nada con él?

    Si no lo utilizas.

    actu=ActualizarPosicion(i+1);

    Un saludo

    martes, 3 de julio de 2018 6:28
  • Lo hice con el where pero tampoco me funcion

    le explico lo que paso 

    lo hice con esta consuta 

    string consulta = "UPDATE Equipos set e_posicion='" + numero + "' where e_posicion between '"+ inicial +"' and '"+ final +"'";

    si se me actualiza desde donde yo quiera hasta donde yo quiera pero todo se actualiza con el mismo dato no se por no incrementa, osea que el ciclo si esta funcionado creo por que la actualizacion me la hace las veces que yo quieraa segun el valor que le de osea si quiero actualizar 2. 3 0 4 resgistros los  actualiza.

    ademas el ciclo no me cambia el valor de la variable como tu dices que la primera vez a 1 y la segunda vez a 2

    pero lo que no logro hacer es incremetar la variable  aumente de 1 en 1


    martes, 3 de julio de 2018 7:53
  • Hola cristian:

    Lo que has puesto: Inicia el for i=0

    (actualiza todos los registros pon en eposicion = 0+1 donde e.posicion este entre ej. 0 y 20)

    Registros actualizados 20

    segunda vuelta del for

    (actualiza todos los registros pon en eposicion = 1+1 donde e.posicion este entre ej. 0 y 20)

    registros actualizados 20

    tercera vuelta del for ….

    Si pones un punto de interrupción dentro del bucle observarás como i se incrementa paulatinamente.

    Si lo que quieres es que la actualización sea solo 1 registro el where tiene que apuntar a un registro.

    Por ejemplo por su identificador id

    Sino y no quieres numerarlo haz el bucle inverso, decrementando.

    Además la consulta los campos numéricos los pasas entre apostrofes.

    Un saludo

    martes, 3 de julio de 2018 10:16
  • no no lo eh podido resolver 
    martes, 3 de julio de 2018 10:42
  • Yo tengo claro el origen, pero no veo exactamente tu destino.

    d    nombre            posicion 

    1    cristian              2

    2    jose jose            3

    3    juan carlos         4

    4    andres               5

    Tu destino es, por ejemplo cambiar posición de los registros de jose jose y juan carlos quedando en su campo posicion 1 y 2..... 

    O es reenumerar todos los campos posicion.... es la parte que no esta, al menos yo no lo veo, del todo bien planteada.

    Tampoco a priori, yo por lo menos no entiendo porque lo haces en un bucle, cuando la update te puede dar en una pasada ese resultado. Si lo haces por simple conocimiento, me parece genial... pero sino, no hace falta.


    martes, 3 de julio de 2018 11:18
  • se duplico la pregunta

    Rellenar fila de una tabla automaticamente



    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 3 de julio de 2018 13:23
  • hola

    >>En problema que tengo es que aunque inicializase la varible posicion esta no se me incrementa, Si se me actualiza corectamente pero pero el campo de la tabla posisicon

    pero tienes que actualizar usando posicion he id, no puedes uar el mismo campo

    UPDATE tabla SET posicion = @numero WHERE id= @id

    o sea deberias ir cambiando el id y que posicion quieres asignarle

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 3 de julio de 2018 13:25