Foros del Web » Programación para mayores de 30 ;) » .NET »

copnsulta update sql

Estas en el tema de copnsulta update sql en el foro de .NET en Foros del Web. hola buenos dias para todos necestito una gran ayuda > tengo cargado un dataset como resultado de una cosulta sql... el cual > quiero recorrer ...
  #1 (permalink)  
Antiguo 06/07/2009, 09:39
 
Fecha de Ingreso: febrero-2009
Mensajes: 8
Antigüedad: 15 años, 2 meses
Puntos: 0
copnsulta update sql

hola buenos dias para todos necestito una gran ayuda

> tengo cargado un dataset como resultado de una cosulta sql... el cual
> quiero recorrer con un foreach para que me tome una a una las rows del
> data set y ejecute un UPDATE en cada una de esas rows.. ( para si se cumple una consicion... se se mofique un campo de una columna de una tabla... segun los registrosque se me cargaron en el dataset.. segun una consulta sql...

les paso parte del codigo
.....-
SqlDataAdapter daEst = new SqlDataAdapter("Select CEDULA from Estudiantes
> WHERE ID_GRUPO = '" + idGrup + "'", conn);
>
> daEst.Fill(dsEst, "estu");
>
> int estu = dsEst.Tables["estu"].Rows.Count;
>
> SqlDataAdapter daEq = new SqlDataAdapter("Select * from Equipos WHERE
> FECHA_ASIGNADA_ESTUDIANTE is Null", conn);
>
> daEq.Fill(dsEqui, "equi");
>
> int equi = dsEqui.Tables["equi"].Rows.Count;
>>
> foreach (DataRow drEst in dsEst.Tables["estu"].Rows)
>
> {
>
> SqlCommand cmd = new SqlCommand("UPDATE Equipos SET CEDULA = pCEDULA,
> FECHA_ASIGNADA_ESTUDIANTE = pHOY WHERE FECHA_ASIGNADA_ESTUDIANTE IS NULL",
> conn);
>
> ci= dsEst.Tables["estu"].Rows[indice].Field<string>("CEDULA");
>
> cmd.Parameters.AddWithValue("pCEDULA",ci);
>
> cmd.Parameters.AddWithValue("pHOY", DateTime.Now);
>
> cmd.ExecuteNonQuery();
>
> indice++;
>
> }
>
> }





El problema es que el UPDATE me actualiza todas las filas de la tabla con> los datos que le paso mediante el Parameters.AddWithValue(....), y no va> iterando una a una con el foreach, y no le puedo poner un WHERE a la> consulta me parece... porque no tengo nada por lo cual filtrar simplmente> quiero que actulice.. una a una...

muchas gracias por su valiosa ayuda
>
  #2 (permalink)  
Antiguo 06/07/2009, 10:07
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: copnsulta update sql

El error esta en que envias los parametros sin arroba deberian llevar el arraba antes

@pHoy
@pCEDULA
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #3 (permalink)  
Antiguo 06/07/2009, 10:14
 
Fecha de Ingreso: febrero-2009
Mensajes: 8
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: copnsulta update sql

si ya lo probeo con el @ pero sigue igual...
actualizarme me actuliza si... pero el problema es que el foreach.. no me toma la 1º row.. sino que cuando entra al for.. me actualiza TODA la tabla de equipos con los datos q tiene el @cedula y @ hoy..
y yo solo quiero que me actulice la 1... 2... 3.. hasta las n filas q tiene el dataset.


muchas gracias si alguien me puede ayudar!!!
  #4 (permalink)  
Antiguo 06/07/2009, 10:20
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: copnsulta update sql

pasa el codigo completo porque veo que cierras 2 for pero solo has puesto uno
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #5 (permalink)  
Antiguo 06/07/2009, 10:32
 
Fecha de Ingreso: febrero-2009
Mensajes: 8
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: copnsulta update sql

en suma creo 2 data set.. uno lo cargo con todos los estudiantes,, otro los cargo con todos los equipos disponibles,
si hay mas equipos que estudiantes.... tengo que modificar los datos de la tabla EQUIPOS y cargarle el dato de la fecha de hoy y del numero de estudiante q vienen en el data set estudiante... me explico?
pero cuando hago el update.. me actuliza TODOS LOS CAMPOS DE LA TABLA ESQUIPOS con los datos de la fecha de hoy y me asigna la MISMA CEDULA a TODA LA TABLA...

me explico?
muchas muchas gracias por cualquier aporte



public bool asingancionMasivaDeEquipos(string idGrup)
{
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
DataSet dsEst = new DataSet();
DataSet dsEqui = new DataSet();

SqlDataAdapter daEst = new SqlDataAdapter("Select CEDULA from Estudiantes WHERE ID_GRUPO = '" + idGrup + "'", conn);
daEst.Fill(dsEst, "estu");
int estu = dsEst.Tables["estu"].Rows.Count;
SqlDataAdapter daEq = new SqlDataAdapter("Select * from Equipos WHERE FECHA_ASIGNADA_ESTUDIANTE is Null", conn);
daEq.Fill(dsEqui, "equi");
int equi = dsEqui.Tables["equi"].Rows.Count;
if (equi >= estu && estu > 0 && equi > 0)
{
int indice = 0;
string ci = "";
foreach (DataRow drEst in dsEst.Tables["estu"].Rows)
{

if (indice <= estu)
{
SqlCommand cmd = new SqlCommand("UPDATE Equipos SET CEDULA = @CEDULA, FECHA_ASIGNADA_ESTUDIANTE = @HOY WHERE FECHA_ASIGNADA_ESTUDIANTE IS NULL", conn);
//ci = (string)dsEst.Tables["estu"].Rows[indice]["CEDULA"];
ci= dsEst.Tables["estu"].Rows[indice].Field<string>("CEDULA");
cmd.Parameters.AddWithValue("@CEDULA",ci);
cmd.Parameters.AddWithValue("@HOY", DateTime.Now);
cmd.ExecuteNonQuery();
indice++;
}
}

return true;

}
else
{
conn.Close();
return false;
}
  #6 (permalink)  
Antiguo 06/07/2009, 11:54
Avatar de neo101  
Fecha de Ingreso: julio-2007
Mensajes: 73
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: copnsulta update sql

Hola, has probado este update en tu SQL?

UPDATE Equipos SET CEDULA = @CEDULA, FECHA_ASIGNADA_ESTUDIANTE = @HOY WHERE FECHA_ASIGNADA_ESTUDIANTE IS NULL

me da la impresión de que en la condición de tu SQL le falta identificar a que estudiante ponerle la cedula, ya que así, con la condición que muestras asigna la fecha de hot y cedula a todos los que esten con valor nulo en la fecha asignada.

Verificalo y cuénta como te fue, saludos...
  #7 (permalink)  
Antiguo 06/07/2009, 12:10
 
Fecha de Ingreso: febrero-2009
Mensajes: 8
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: copnsulta update sql

muchas gracias, el tema es que todas las fechas del FECHA_ASIGNADA_ESTUDIANTE son nulas..
ese es uno de los campos q tengo q modificar...
osea..


alguien me dijo algo como esto..
"Iteras sobre la coleccion de DataRows del DataTableObtener la DataRow a modificar...cambiar los valores de los campos que queres...confirmar los cambios al dataset mediante el metodo AcceptChanges()usaer el update del DataAdpater para aplicar los cambios en la BD."

pero como hago para modificar las filas del dataset???
  #8 (permalink)  
Antiguo 06/07/2009, 13:04
Avatar de neo101  
Fecha de Ingreso: julio-2007
Mensajes: 73
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: copnsulta update sql

Ok, todas las fechas son nulas, pero aun así creo que te falta una instruccion más ahi para que sepas a que fila actualizar, si todas las fechas son nulas, como identificas que cedula ponerle a que equipo?

Para modificar las filas de una tabla en un datset es necesario que fijes que "celda" necesitas actualizar y asignes el valor necesario, en los ejemplos de .net encuentras códigos asi, no obstante despues de aceptar lo cambios en la tabla, es necesario grabarlos a traes del adaptador con la instrucción UPDATE

Código:
public DataSet CreateCmdsAndUpdate(string connectionString,
    string queryString) 
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.SelectCommand = new OleDbCommand(queryString, connection);
        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

        connection.Open();

        DataSet customers = new DataSet();
        adapter.Fill(customers);

        //...
        //el código donde mueves las filas necesarias
        //...

        //ESTA INSTRUCCION TE CONFIRMA LOS CAMBIOS EN LA BD
        adapter.Update(customers);

        return customers;
    }
}
Espero haberte ayudado, pero si solo te confundo más creo que será necesario recapitular que necesitas... Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:14.