Usuario
Actualizar tabla automaticamente con un ciclo for c# y sql

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
- Editado Cristian J Velasquez martes, 3 de julio de 2018 1:09
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.
-
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
-
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
- Editado Cristian J Velasquez martes, 3 de julio de 2018 8:07
-
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
-
-
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.
-
-
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