Foros del Web » Programando para Internet » ASPX (.net) »

Actualizar varios valores en DataSet y reflejar en base de datos

Estas en el tema de Actualizar varios valores en DataSet y reflejar en base de datos en el foro de ASPX (.net) en Foros del Web. Hola gente. En esta oportunidad estoy intentando rellenar un DataSet de una tabla con nombre "tabla" que tiene dos campos "id" y "nombre". Una vez ...
  #1 (permalink)  
Antiguo 09/01/2006, 17:08
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 18 años, 8 meses
Puntos: 2
Actualizar varios valores en DataSet y reflejar en base de datos

Hola gente. En esta oportunidad estoy intentando rellenar un DataSet de una tabla con nombre "tabla" que tiene dos campos "id" y "nombre". Una vez con el DataSet lleno, modifico MAS DE UN VALOR del mismo (osea cambio un par de nombres) y luego intento reflejar esos cambios en la base de datos.

Con la operación INSERT no tuve problemas al agregar mas de un dato, ya que con DataRow nuevaFila=ds.Tables[0].NewRow(); voy agregando filas al DataSet y luego con el InsertCommand del adaptador envia todo a la base.

El tema es que la consulta de actualización tiene un WHERE. Entonces si yo le pongo comandoActualizar=new System.Data.OleDb.OleDbCommand("UPDATE tabla SET nombre=@valNombre WHERE id=1"); anda barbaro, pero solo me modifica el nombre con id 1 mientras que yo en el DataSet habia modificado varios nombre.

Entonces mi consulta seria como puedo hacer para que todos los cambios del DataSet se reflejen en la base de datos y no solo la fila con id 1.

Se agradece de antemano cualquier ayuda.
Saludos.
__________________
R4DS en español | R4DS en inglés
  #2 (permalink)  
Antiguo 09/01/2006, 18:47
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 18 años, 8 meses
Puntos: 2
Bueno ya lo solucioné mirando un ejemplo de un tutorial de Mircrosoft.
A veces me apuro demasiado al hacer un pedido de ayuda aquí

Para los que tengan mi mismo problema les dejo un ejemplo completo y comentado que realiza:

-Conexion a base de datos Access. Tabla "tabla" campos "id" y "nombre"
-Llenado de DataSet
-Modificacion de 2 datos del DataSet
-Actualización de estos cambios en la base de datos

Código:
<%@ Page Language="C#" Debug="true" %>

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>

<script runat="server">
void Page_Load(Object Src, EventArgs E)
{
	// Declaro variables
	System.Data.OleDb.OleDbConnection conexion;
	System.Data.OleDb.OleDbCommand comando;
	OleDbDataAdapter adaptador;
	DataSet ds=new DataSet(); // Le asigno un objeto de la clase DataSet
	
	// Genero el objeto conexion e invoco al metodo que la abre
	conexion=new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=d:/base1.mdb;");
	conexion.Open();
	
	// Genero el comando y le asigno la conexion que va a utilizar
	comando=new System.Data.OleDb.OleDbCommand("SELECT * FROM tabla");
	comando.Connection=conexion;
	
	// Genero el adaptador y establezco que haya una consulta de seleccion (comando)
	adaptador=new OleDbDataAdapter();
	adaptador.SelectCommand=comando;
	
	// Lleno el DataSet con la respuesta de la consulta
	adaptador.Fill(ds);

	// Cambio en memoria el contenido de la 1º y 2º fila del DataSet
	ds.Tables[0].Rows[0]["nombre"]="Nuevo Nombre";
	ds.Tables[0].Rows[1]["nombre"]="Nuevo Nombre 2";
	
	// Creo el nuevo comando para actualizar un registro
	System.Data.OleDb.OleDbCommand comandoActualizar;
	comandoActualizar=new System.Data.OleDb.OleDbCommand("UPDATE tabla SET nombre=@valNombre WHERE id=@valId");
	comandoActualizar.Connection=conexion;

	// Asigno al adaptador el comando de actualizacion
	adaptador.UpdateCommand=comandoActualizar;	
	
	// Defino los comandos variables de la consulta de actualizacion
	comandoActualizar.Parameters.Add("@valNombre", OleDbType.VarChar, 50, "nombre");
	OleDbParameter workParam=adaptador.UpdateCommand.Parameters.Add("@valId", OleDbType.Integer);
    workParam.SourceColumn="id";
    workParam.SourceVersion=DataRowVersion.Original;
	
	// Realizo las consultas a las base de datos
	adaptador.Update(ds);
	
	conexion.Close();
}
</script>
Espero que a alguien le resulte útil
Saludos.
__________________
R4DS en español | R4DS en inglés
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 20:38.