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

Actualizar base de datos con DataAdapter.Update

Estas en el tema de Actualizar base de datos con DataAdapter.Update en el foro de .NET en Foros del Web. Hola!! tengo una duda y es que estoy intentando utilizar el método update de un DataAdapter para actualizar una base de datos y el problema ...
  #1 (permalink)  
Antiguo 15/07/2011, 04:05
 
Fecha de Ingreso: julio-2011
Ubicación: Barcelona
Mensajes: 9
Antigüedad: 12 años, 8 meses
Puntos: 0
Actualizar base de datos con DataAdapter.Update

Hola!!
tengo una duda y es que estoy intentando utilizar el método update de un DataAdapter para actualizar una base de datos y el problema que tengo es que en el momento que lanzo el update me salta error:
"Update requiere que UpdateCommand sea válido cuando se pasa la colección DataRow con filas modificadas."
leiendo por foros encontré una solución que era utilizando un CommandBuilder y a la hora de lanzar el update me salta el siguiente error:
"La generación SQL dinámica no es compatible con varias tablas de base."
Por lo que tengo entendido no se pueden utilizar "INNER JOINS" en consulta para llenar el DataSet i luego lanzar el update.
Querría saber cual es la forma para actualizar la base de datos a través de DataAdapter.Update(DataSet)
la consulta SQL es la siguiente:

SELECT tblArticulos.IdArt, tblArticulos.Codigo, tblArticulos.NomArt, tblColores.NomColor, tblTallas.NomTalla, tblArtCentro.Precio, tblArtCentro.Descuento, tblArticulos.PCoste, tblArticulos.Etiquetas, tblArticulos.Activo
FROM ((tblArticulos INNER JOIN tblArtCentro ON tblArticulos.IdArt=tblArtCentro.IdArt) INNER JOIN tblColores ON tblArticulos.IdColor = tblColores.IdColor) INNER JOIN tblTallas ON tblArticulos.IdTalla = tblTallas.IdTalla WHERE Activo='S' AND tblArtCentro.IdCen=" & NumCentro ORDER BY Codigo, NomColor, tblArticulos.IdTalla

la forma que utilizo es crear un commando con su conexion i su codigo de consulta, despues le asigno al dataadapter i luego lo cargo con el metodo FILL.
Asigno un datagrid a la tabla i despues de cambiar los valores en la tabla actualizo con el Update la base de datos.
Muchas gracias a todos!
  #2 (permalink)  
Antiguo 15/07/2011, 08:05
Avatar de HaverRamirez  
Fecha de Ingreso: junio-2011
Ubicación: Guatemala
Mensajes: 273
Antigüedad: 12 años, 8 meses
Puntos: 33
Respuesta: Actualizar base de datos con DataAdapter.Update

Mira, creo que estamos confundiendo cosas, el datadapter.update es cuando utilizar datasets u origenes de datos conectados directamente a la base de datos, o sea, creas una nueva conexion con el origen de datos, miras que tablas necesitas, y jalas el objeto al form ahi si te va a funcionar el datadataper.update, lo que hay que analizar es como estas haciendo las cosas, otro punto es, tambien puedes hacer update con instrucciones sql...
  #3 (permalink)  
Antiguo 15/07/2011, 20:35
 
Fecha de Ingreso: diciembre-2010
Mensajes: 63
Antigüedad: 13 años, 2 meses
Puntos: 5
Respuesta: Actualizar base de datos con DataAdapter.Update

Saludos:

Los primero que debes tener claro es que el dataadapter no actualiza varias tablas y simpre debe haber una clave primaria por lo menos en sqlServer otra solucion a tu problema seria que tu mismo prepapares la sentencia update,aunque es un poquito largo y tedioso, lo hace asi:

adapter.UpDateCommand.CommandText = "update.....;update ...; update"

y asi sucesivamente dependiendo de las columnas que traigas espero haberte ayudado;
__________________
En la vida siempre encontraras a alguien inferior y Superior a ti
  #4 (permalink)  
Antiguo 18/07/2011, 02:52
 
Fecha de Ingreso: julio-2011
Ubicación: Barcelona
Mensajes: 9
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Actualizar base de datos con DataAdapter.Update

Cita:
Iniciado por tiger015 Ver Mensaje
Saludos:

Los primero que debes tener claro es que el dataadapter no actualiza varias tablas y simpre debe haber una clave primaria por lo menos en sqlServer otra solucion a tu problema seria que tu mismo prepapares la sentencia update,aunque es un poquito largo y tedioso, lo hace asi:

adapter.UpDateCommand.CommandText = "update.....;update ...; update"

y asi sucesivamente dependiendo de las columnas que traigas espero haberte ayudado;
Es decir que no se podría actualizar varias tablas al mismo tiempo con dataadapter.Update ?

únicamente podría traerme una tabla, cambiar datos y después lanzar el update no?

y con la sentencia update ( updatecommand.commandText) puedes actualizar varias tablas??

Siempre eh actualizado datos con instrucciones sql y parece que es lo mejor.
Gracias por la respuesta
  #5 (permalink)  
Antiguo 18/07/2011, 21:20
 
Fecha de Ingreso: diciembre-2010
Mensajes: 63
Antigüedad: 13 años, 2 meses
Puntos: 5
Respuesta: Actualizar base de datos con DataAdapter.Update

No has entendido bien, Si se puede solo que el Comando update lo tienes que hacer tu con las tablas relacionadas que usas en tu consulta por ejemplo:

tengo 2 tablas, tabla 1 usuario con los campos ID,Usuario y la otra tipo con los campos IDUsuario,Tipo

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

SqlCommand comand;
SqlDataAdapter adapter;
SqlConnection Con;
DataTable tabla = new DataTable();
SqlParameter parametros;

private void Form1_Load(object sender, EventArgs e)
{
try
{
this.Con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename='C:\Users\Rai my Alcantara\Documents\adapter.mdf';Integrated Security=True;Connect Timeout=30;User Instance=True");
adapter = new SqlDataAdapter();

//consulta a dos tablas relacionadas aqui creo el selectcommand
comand = new SqlCommand("select usuario.ID,usuario.Usuario,tipo.IDUsuario,tipo.Tip o from usuario inner join tipo on usuario.ID = tipo.IDUsuario", this.Con);

// aqui se lo paso al adapter
adapter.SelectCommand = comand;

//aqui indico los campo que se actualizaran

comand = new SqlCommand("update usuario set ID = @ID,Usuario = @Usuario where ID = @IDviejo; update tipo set IDUsuario = @IDUsuario,Tipo = @Tipo where IDUsuario = @IDUsuarioviejo",this.Con);

//y aqui le paso los valores
comand.Parameters.Add("@ID", SqlDbType.Int, 4, "ID");

parametros = comand.Parameters.Add("@IDviejo",SqlDbType.Int,4," ID");
parametros.SourceVersion = DataRowVersion.Original;

comand.Parameters.Add("@Usuario", SqlDbType.VarChar,50, "Usuario");
comand.Parameters.Add("@IDUsuario", SqlDbType.Int, 4, "IDUsuario");

parametros = comand.Parameters.Add("@IDUsuarioviejo", SqlDbType.Int, 4, "IDUsuario");
parametros.SourceVersion = DataRowVersion.Original;

comand.Parameters.Add("@Tipo", SqlDbType.VarChar,50, "Tipo");

adapter.UpdateCommand = comand;

adapter.Fill(this.tabla);
}
catch (SqlException Ex)
{
MessageBox.Show(Ex.Message);
}
dataGridView1.DataSource = tabla;

}

private void button1_Click(object sender, EventArgs e)
{
this.adapter.Update(this.tabla);
}

//puedes practicar ya lo probe y funciona si tienes alguna duda solo pregunta
__________________
En la vida siempre encontraras a alguien inferior y Superior a ti
  #6 (permalink)  
Antiguo 18/07/2011, 21:27
 
Fecha de Ingreso: diciembre-2010
Mensajes: 63
Antigüedad: 13 años, 2 meses
Puntos: 5
Respuesta: Actualizar base de datos con DataAdapter.Update

Ah y para el insert y delete es lo mismo solo cambias la sentencia
y de esta forma no es obligatorio tener un campo primario espero que le saques provecho
__________________
En la vida siempre encontraras a alguien inferior y Superior a ti
  #7 (permalink)  
Antiguo 18/07/2011, 21:58
Avatar de HaverRamirez  
Fecha de Ingreso: junio-2011
Ubicación: Guatemala
Mensajes: 273
Antigüedad: 12 años, 8 meses
Puntos: 33
Respuesta: Actualizar base de datos con DataAdapter.Update

Mira mi estimado cubino, un dataset u origen de datos, que se crea cuando seleccionas en el menu Datos nuevo origen de datos, te crea un objeto dataset, dentro del dataset tambien crea objetos Datadapter, entonces que pasa, cuando arrastras el dataset a tu proyecto ya sea en Grid o en forma de textbox y labels con la barra de desplazamiento (de esto hay muchos ejemplos busca a Beth Massy ella sabe de todo, solo que esta en ingles) bueno, entonces se mantiene un monitoreo del cambio del dataset y el dataset o el datadapter no me acuerdo bien pero cuando modificas una linea del grid o textbox, se captura y se almacena que fila modificaste, que fila eliminaste y que fila insertaste, prueba esto, con la propiedad del dataset.haschanges o changed algo asi, el asunto es que despues cuando le das al adapter el update, este se encarga de recorrer el dataset y verificar que cambios se hicieron y ejecutarlos contra la base de datos por eso es que el datadapter tiene este metodo, de lo contrario crea querys para hacer tus updates, cuando no usas dataset tipados u origen de datos...

Etiquetas: sql, visualbasic, vbnet
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 13:17.