Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   ASPX (.net) (http://www.forosdelweb.com/f78/)
-   -   Actualizar varios valores en DataSet y reflejar en base de datos (http://www.forosdelweb.com/f78/actualizar-varios-valores-dataset-reflejar-base-datos-362599/)

zaqpz 09/01/2006 17:08

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.

zaqpz 09/01/2006 18:47

Bueno ya lo solucioné mirando un ejemplo de un tutorial de Mircrosoft.
A veces me apuro demasiado al hacer un pedido de ayuda aquí :-D

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.


La zona horaria es GMT -6. Ahora son las 07:50.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.