DataSet Update

31/05/2005 - 05:31 por aventurero | Informe spam
Realmente este consulta ya la he realizado en otro foro, pero lo hago aquí
porque no he encontrado la solución.
He venido trabajando sobre actualización de varios registros y no he
resuelto el problema.
Creo que cada vez me acerco más
Les pido el favor de ayudarme en lo que puedan.
Página ASP.NET VB.NET, SQL Server 2000
EL CODIGO
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim cadsql As String = "SELECT * FROM TablaCliente"
Dim cadenaConexion As String System.Configuration.ConfigurationSettings.AppSettings("ConString")
Dim con As New SqlConnection(cadenaConexion)
Dim cmd As New SqlCommand(cadsql, con)
Dim Asoat As New SqlDataAdapter(cmd)
Dim Ssoat As New DataSet
Dim cantidad As Int32 = 0
Dim row As DataRow
Try
con.Open()
Asoat.Fill(Ssoat, "TablaCliente")
cmd.CommandText = "SELECT * FROM TablaVehiculo"
Asoat.Fill(Ssoat, "TablaVehiculo ")
cmd.CommandText = "SELECT * FROM TablaSuc where codigo = '1'"
Asoat.Fill(Ssoat, "TablaSuc")
For Each row In Ssoat.Tables("TablaVehiculo").Rows
row("motor") = "NEW NEW"
Next
For Each row In Ssoat.Tables("TablaCliente").Rows
row("telefono") = "TELE TELE"
Next

Dim cb As New SqlCommandBuilder(Asoat)
Asoat = cb.DataAdapter
cantidad = Asoat.Update(Ssoat, "TablaSuc")
cantidad = Asoat.Update(Ssoat, "TablaCliente")
cantidad = Asoat.Update(Ssoat, "TablaVehiculo ")
MsgBox1.ShowMessage("Actualización de datos OK")
Catch ex As Exception
MsgBox1.ShowMessage("Falló Actualización en la base de datos: "
& ex.Message)
Return
Finally
con.Close()
End Try
ERROR GENERADO (ex.Message):
"Falta DataColumn 'codigo' en DataTable 'TablaCliente' para SourceColumn
'codigo'."

Pero..
1. La columna "codigo" corresponde es a la tabla "TablaSuc"
2. No genera ningún error cuando no se hacen modificaciones a ninguna tabla
3. El error sale siempre con respecto a la tabla que se ha modificado (en
una de ellas), siempre con una columna de otra
 

Leer las respuestas

#1 Carlos Durán Urenda
31/05/2005 - 17:29 | Informe spam
Hola Aventurero

Primero que nada, te recomendaría que utilizaras un Adaptador de datos para
cada tabla y no estar cambiando el SelectCommand Cada que llenas una tabla,
esto debido a lo siguiente, considera la talba como un origen de datos, y el
adaptador es precisamente eso, un mecanizmo que adapta los datos del origen
de datos para trabajarlos dentro de net. El adaptador no unicamente se
utiliza para obtener los datos, tambien para modificar, insertar y eliminar
del origen de datos.

lo correcto sería un adaptador para cada tabla, por consiguiente SqlCommand
para cada tabla

El error que te produce es por que cambiaste el SelectCommand del adaptador
y tratas de actualizar una tabla que ya no corresponde a ese comando. he ahi
la importancia de usar un adaptador por tabla.

Segundo. Estas utilizando el commandBuilder, pero no estas obteniendo los
comandos necesarios para la actualizacion, eliminacion e insersion de datos,
en este caso tambien te recomiendo crear un CommandBuilder por cada
Adaptador de Datos, mas o menos de la siguiente manera...

Dim con As New SqlConnection(cadenaConexion)

Dim SQL1 as String ="Insturccion SQL Necesaria"
Dim cmd1 As New SqlCommand(SQL1, con)
Dim AD1 As New SqlDataAdapter(cmd1)

Dim SQL2 as String ="Insturccion SQL Necesaria"
Dim cmd2 As New SqlCommand(SQL2, con)
Dim AD2 As New SqlDataAdapter(cmd2)


Dim SQL3 as String ="Insturccion SQL Necesaria"
Dim cmd3 As New SqlCommand(SQL3, con)
Dim AD3 As New SqlDataAdapter(cmd3)

' hasta este punto el adaptador solo esta configurado para leer datos, ya
que no se han
' especificado los comandos de actualizacion, insersion y eliminacion

' AQUI SE CONFIGURAN LOS COMANDOS PARA HACER EL UPDATE

Dim cb1 As New SqlCommandBuilder(AD1)
With AD1
.InsertCommand = cb1.GetInsertCommand
.DeleteCommand = cb1.DeleteCommand
.UpdateCommand = cb1.UpdateCommand
End With
Dim cb2 As New SqlCommandBuilder(AD2)
With AD2
.InsertCommand = cb2.GetInsertCommand
.DeleteCommand = cb21.DeleteCommand
.UpdateCommand = cb2.UpdateCommand
End With
Dim cb3 As New SqlCommandBuilder(AD3)
With AD3
.InsertCommand = cb3.GetInsertCommand
.DeleteCommand = cb3.DeleteCommand
.UpdateCommand = cb3.UpdateCommand
End With
' en este momento ya estan configurados los adaptadores para hacer el
update, observa
' que no fue necesario abrir la conexion

'ahora si puedes hacer los fills
' modificar los datos
' y ejecutar el update de cada adaptador



Saludos
Carlos Durán



"aventurero" escribió en el mensaje
news:
Realmente este consulta ya la he realizado en otro foro, pero lo hago aquí
porque no he encontrado la solución.
He venido trabajando sobre actualización de varios registros y no he
resuelto el problema.
Creo que cada vez me acerco más
Les pido el favor de ayudarme en lo que puedan.
Página ASP.NET VB.NET, SQL Server 2000
EL CODIGO
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim cadsql As String = "SELECT * FROM TablaCliente"
Dim cadenaConexion As String > System.Configuration.ConfigurationSettings.AppSettings("ConString")
Dim con As New SqlConnection(cadenaConexion)
Dim cmd As New SqlCommand(cadsql, con)
Dim Asoat As New SqlDataAdapter(cmd)
Dim Ssoat As New DataSet
Dim cantidad As Int32 = 0
Dim row As DataRow
Try
con.Open()
Asoat.Fill(Ssoat, "TablaCliente")
cmd.CommandText = "SELECT * FROM TablaVehiculo"
Asoat.Fill(Ssoat, "TablaVehiculo ")
cmd.CommandText = "SELECT * FROM TablaSuc where codigo = '1'"
Asoat.Fill(Ssoat, "TablaSuc")
For Each row In Ssoat.Tables("TablaVehiculo").Rows
row("motor") = "NEW NEW"
Next
For Each row In Ssoat.Tables("TablaCliente").Rows
row("telefono") = "TELE TELE"
Next

Dim cb As New SqlCommandBuilder(Asoat)
Asoat = cb.DataAdapter
cantidad = Asoat.Update(Ssoat, "TablaSuc")
cantidad = Asoat.Update(Ssoat, "TablaCliente")
cantidad = Asoat.Update(Ssoat, "TablaVehiculo ")
MsgBox1.ShowMessage("Actualización de datos OK")
Catch ex As Exception
MsgBox1.ShowMessage("Falló Actualización en la base de datos: "
& ex.Message)
Return
Finally
con.Close()
End Try
ERROR GENERADO (ex.Message):
"Falta DataColumn 'codigo' en DataTable 'TablaCliente' para SourceColumn
'codigo'."

Pero..
1. La columna "codigo" corresponde es a la tabla "TablaSuc"
2. No genera ningún error cuando no se hacen modificaciones a ninguna
tabla
3. El error sale siempre con respecto a la tabla que se ha modificado (en
una de ellas), siempre con una columna de otra



Preguntas similares