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

Actualizar base de datos desde conjunto de datos

Estas en el tema de Actualizar base de datos desde conjunto de datos en el foro de .NET en Foros del Web. Despues de actualizar un campo en un conjunto de datos, quiero que se actualice en el origen de datos o base de datos original. He ...
  #1 (permalink)  
Antiguo 07/02/2005, 11:23
 
Fecha de Ingreso: febrero-2003
Mensajes: 12
Antigüedad: 22 años, 1 mes
Puntos: 0
Actualizar base de datos desde conjunto de datos

Despues de actualizar un campo en un conjunto de datos, quiero que
se actualice en el origen de datos o base de datos original.

He utilizado este ejemplo segun la ayuda de MSDN, pero no funciona.
Me dice lo siguiente:
"La generación SQL dinámica para UpdateCommand no es compatible con
SelectCommand, que no devuelve ninguna información sobre columnas clave."

Si utilizo OleDb sí me funciona el ejemplo pero con Sql Server no
me funciona.

Alguien sabe dónde está el error?

Gracias


SqlConnection conn = new SqlConnection("Persist Security Info=False;"+
"Integrated Security=SSPI;database=mibase;server=localhost");

string sql="select numero, nombre, ciudad, cantidad from clientes";
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand= new SqlCommand(sql,conn);
SqlCommandBuilder cb = new SqlCommandBuilder(da);

DataSet ds = new DataSet();
da.Fill(ds, "clientes");

//Modificacion de un campo:
ds.Tables["clientes"].Rows[0]["nombre"]="Maite2";

da.Update(ds.Tables["clientes"]);

dataGrid1.DataSource=ds.Tables["clientes"];
  #2 (permalink)  
Antiguo 07/02/2005, 12:37
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 9 meses
Puntos: 7
Prueba declarando el SqlDataAdapter de la siguiente manera:

SqlConnection conn = new SqlConnection("Persist Security Info=False;"+
"Integrated Security=SSPI;database=mibase;server=localhost");

string sql="select numero, nombre, ciudad, cantidad from clientes";
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
SqlCommandBuilder cb = new SqlCommandBuilder(da);

DataSet ds = new DataSet();
da.Fill(ds, "clientes");

//Modificacion de un campo:
ds.Tables["clientes"].Rows[0]["nombre"]="Maite2";

da.Update(ds.Tables["clientes"]);

dataGrid1.DataSource=ds.Tables["clientes"];
__________________
Charlie.
  #3 (permalink)  
Antiguo 07/02/2005, 12:49
 
Fecha de Ingreso: febrero-2003
Mensajes: 12
Antigüedad: 22 años, 1 mes
Puntos: 0
Gracias pero no funciona

Acabo de probarlo pero no funciona.
Me sale el mismo mensaje de error.
Gracias
  #4 (permalink)  
Antiguo 07/02/2005, 13:23
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 9 meses
Puntos: 7
Pues nun se me ocurre nada, a mi me chufa de las dos maneras.
__________________
Charlie.
  #5 (permalink)  
Antiguo 07/02/2005, 13:23
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 20 años, 2 meses
Puntos: 7
Según veo simplemente estás asignando la propiedad SelectCommand del DataAdapter, si quieres que se actualize tu fuente de datos también debes asignar las propiedades InsertCommand, DeleteCommand y UpdateCommand con las sentencias SQL o procedimientos almacenados correctos.

Para el acceso a datos a una base de datos SQL Server de una forma eficiente te sugiero que utilizes el Data Access Application Blocks

http://msdn.microsoft.com/library/de.../html/daab.asp

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #6 (permalink)  
Antiguo 07/02/2005, 14:26
 
Fecha de Ingreso: febrero-2003
Mensajes: 12
Antigüedad: 22 años, 1 mes
Puntos: 0
Hola xknown

Gracias por el link sobre Data Access Application Blocks. Desconocia este opcion. Le he echado una ojeda tambien desde este link http://www.microsoft.com/spanish/msd...es/daab-rm.asp en castellano donde explica en qué consiste.
De todas maneras, me quedo con las ganas de terminar con el asunto inicial. Sigo sin entender del todo cómo solucionarlo con lo que me indicabas. Lo de asignar la propiedad UpdateCommand.

Gracias
  #7 (permalink)  
Antiguo 07/02/2005, 14:37
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 20 años, 2 meses
Puntos: 7
Me refiero a que en el código que envías haces:

da.SelectCommand= new SqlCommand(sql,conn);

Sobre el cual haces la operación SELECT, entonces también debes tener asignado las
propiedades InsertCommand, DeleteCommand y UpdateCommand

da.DeleteCommand= new SqlCommand(sql,conn);// sql contendría una operación DELETE o un procedimiento almacenado que haga esa operación
da.InsertCommand= new SqlCommand(sql,conn);// sql contendría una operación INSERT o un procedimiento almacenado que haga esa operación
da.UpdateCommand= new SqlCommand(sql,conn);// sql contendría una operación UPDATE o un procedimiento almacenado que haga esa operación

Si tienes Visual Studio .Net esta tarea es automática aunque te genera mucho código (puedes ver cómo funciona), sino tiene que hacerlo manualmente.

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #8 (permalink)  
Antiguo 07/02/2005, 15:21
 
Fecha de Ingreso: febrero-2003
Mensajes: 12
Antigüedad: 22 años, 1 mes
Puntos: 0
Me ha funcionado de esta manera:

SqlConnection conn = new SqlConnection("Persist Security Info=False;"+
"Integrated Security=SSPI;database=mibase;server=localhost");

string sql="select numero, nombre, ciudad, cantidad from clientes";
SqlDataAdapter da = new SqlDataAdapter(sql, conn);

//NO UTILIZAR -> SqlCommandBuilder cb = new SqlCommandBuilder(da);

//Añadir esta sql
string sqlupdate="update clientes set nombre='Maite2' where nombre='luis'";

//Y añadir da.UpdateCommand
da.UpdateCommand = new SqlCommand(sqlupdate,conn);

//NO UTILIZAR -> SqlCommandBuilder cb = new SqlCommandBuilder(da);

DataSet ds = new DataSet();
da.Fill(ds, "clientes");

//Modificacion de un campo:
ds.Tables["clientes"].Rows[0]["nombre"]="Maite2";

da.Update(ds.Tables["clientes"]);

dataGrid1.DataSource=ds.Tables["clientes"];

Gracias
  #9 (permalink)  
Antiguo 07/02/2005, 17:49
 
Fecha de Ingreso: noviembre-2002
Ubicación: Zapopan,Jalisco
Mensajes: 45
Antigüedad: 22 años, 3 meses
Puntos: 0
Tomando Tu Proble

PERDON PERO TOMANDO ESTE EJEMPLO DE PROBLEMAS TENGO UNA PREGUTNA. DEBE AGREGAR ALÑGUNA REFERENCIA EN ESPECIAL PARA QUE EL SqlCommand FUNCIONE. A MI ME MARCA EL ERROR

No se puede encontrar el tipo o el nombre de espacio de nombres 'SqlCommandBuilder' (¿falta una directiva using o una referencia de ensamblado?)
__________________
Ing. José Alfredo González
Jefe de Sistema
Camsal, S.A. de C.V.
  #10 (permalink)  
Antiguo 07/02/2005, 18:01
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 23 años, 1 mes
Puntos: 50
Te falta hacer la referncia a su Namespace, coloca lo siguiente hasta arriba:

vb.net
Imports System.Data.SqlClient

c#
using System.Data.SqlClient


Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
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 14:25.