Ayuda con SqlDataAdapter, por favor.

29/07/2004 - 00:40 por Miguel Arenas | Informe spam
Tengo este problema al actualizar SqlDataAdapter.
En el evento form_load lleno dataset y lo asgino al
DataGrid, este dataset esta declarado en este evento
Form_load y aqui mismo se cierra.


En un boton tengo Este Codigo, que esdonde marca el
siguiente error
An unhandled exception of
type 'System.InvalidOperationException' occurred in
system.data.dll
Additional information: Update requires a valid
UpdateCommand when passed DataRow collection with modified
rows.

'**** Variable DGSqlTabla es un DataGrid ****

Dim Cn As System.Data.SqlClient.SqlConnection = New
SqlClient.SqlConnection(pARAMETROS)
Dim sdasqlTabla As New System.Data.SqlClient.SqlDataAdapter
Dim DssqlTabla As System.Data.DataSet = New
System.Data.DataSet
Dim Wsql As String

Wsql = ""

sdasqlTabla.SelectCommand = New
System.Data.SqlClient.SqlCommand
Wsql = "Select * from sqlTabla "
sdasqlTabla.SelectCommand.Connection = Cn
sdasqlTabla.SelectCommand.CommandType = CommandType.Text
sdasqlTabla.SelectCommand.CommandText = Wsql
Cn.Open()
DssqlTabla = DGsqlTabla.DataSource

Dim tblsqlTabla As DataTable = DssqlTabla.Tables
(0).GetChanges(DataRowState.Modified)
If Not tblsqlTabla.HasErrors Then
sdasqlTabla.Update(tblsqlTabla)'Aqui marca error.
End If
tblsqlTabla = Nothing
DssqlTabla = Nothing
sdasqlTabla = Nothing
Cn.Close()
Cn = Nothing

Preguntas similare

Leer las respuestas

#1 DJ_MIAO
29/07/2004 - 02:43 | Informe spam
Flaco para que no escribas tanto usa el asistende.El
control de sqldataadapter tiralo en la forma y el sale.
ya hay el crea todo lo necesario para insert,deletey
update.

Si me das tu mail te puedo enviar unos print screen de
como hacerlo.Por este medio no se puede.
De la forma que la loca te dice hay que escribir mucho y
exacto y si son 40 campos? De la dorma que te digo es
automatico.


Miao...

Mostrar la cita
adapter (para que
Mostrar la cita
vinculado al dataGrid-), y
Mostrar la cita
declara un insert
Mostrar la cita
similar con SQL
Mostrar la cita
( "UPDATE tabla SET
Mostrar la cita
conexion)
Mostrar la cita
EN EL QUERY
Mostrar la cita
OleDb.OleDbParameter("?",
Mostrar la cita
TamañoDelCampo2, "campo2"))
Mostrar la cita
OleDb.OleDbParameter("?",
Mostrar la cita
OleDb.OleDbParameter("?",
Mostrar la cita
DE SELECCION
Mostrar la cita
(ComBuild.GetInsertCommand.CommandText, conexion)
Mostrar la cita
PARAMETROS QUE TE PIDE
Mostrar la cita
OleDb.OleDbParameter("?",
Mostrar la cita
OleDb.OleDbParameter("?",
Mostrar la cita
OleDb.OleDbParameter("?",
Mostrar la cita
escribió en el mensaje
Mostrar la cita
modified
Mostrar la cita
System.Data.SqlClient.SqlDataAdapter
Mostrar la cita
CommandType.Text
Mostrar la cita
#2 Alejandra Parra
29/07/2004 - 03:15 | Informe spam
Tienes que declarar un update command para el data adapter (para que
actualice los registros cambiados en el dataSet - vinculado al dataGrid-), y
si hay insercion de nuevos registros, tambien debes declara un insert
command
Tambien puedes ayudarte con el CommandBuilder
Te doy un ejemplo con ambos. Yo uso OLEDB pero es muy similar con SQL

SIN COMMAND BUILDER

dataAdapter.UpdateCommand = New OleDb.OleDbCommand( "UPDATE tabla SET
campo1= ? , campo2= ? , campo3= ? WHERE campo4 = ?", conexion)
****LOS PARAMETROS DEBEN SER EN EL ORDEN EN EL QUE ESTEN EN EL QUERY
dataAdapter.UpdateCommand.Parameters.Add(New OleDb.OleDbParameter("?",
TipoDeDatoDelCampo1, TamañoDelCampo1, "campo1"))
dataAdapter.UpdateCommand.Parameters.Add(New
OleDb.OleDbParameter("?",TipoDeDatoDelCampo2, TamañoDelCampo2, "campo2"))
dataAdapter.UpdateCommand.Parameters.Add(New OleDb.OleDbParameter("?",
TipoDeDatoDelCampo3, TamañoDelCampo3, "campo3"))
dataAdapter.UpdateCommand.Parameters.Add(New OleDb.OleDbParameter("?",
TipoDeDatoDelCampo4, TamañoDelCampo4, "campo4"))

Es lo mismo con el InsertCommand

CON COMMAND BUILDER

Dim ComBuild As OleDb.OleDbCommandBuilder = New
OleDb.OleDbCommandBuilder(dataAdapter)
dataAdapter = New OleDb.OleDbDataAdapter
dataAdapter.SelectCommand = New OleDb.OleDbCommand(QUERY DE SELECCION
ORIGINAL,conexion)
ComBuild.DataAdapter = dataAdapter
dataAdapter.InsertCommand = New
OleDb.OleDbCommand(ComBuild.GetInsertCommand.CommandText, conexion)

***LA DIFERENCIA CON ESTOS, ES QUE YA DEBES SABER LOS PARAMETROS QUE TE PIDE
EL INSERT COMMAND GENERADO
dataAdapter.InsertCommand.Parameters.Add(New OleDb.OleDbParameter("?",
OleDb.OleDbType.VarChar, 7, "campo1"))
dataAdapterInsertCommand.Parameters.Add(New OleDb.OleDbParameter("?",
OleDb.OleDbType.VarChar, 20, "campo2"))
dataAdapter.InsertCommand.Parameters.Add(New OleDb.OleDbParameter("?",
OleDb.OleDbType.Date, 8, "campo3"))

ESPERO QUE TE HAYA SIDO DE AYUDA

Ing. Alejandra Parra
Mexico


"Miguel Arenas" escribió en el mensaje
news:616201c474f3$d3402d90$
Mostrar la cita
#3 Miguel Arenas
29/07/2004 - 18:08 | Informe spam
Ok, Muchas Gracias a todos por su ayuda. Voy a hacer la
prueba y les aviso.
Ads by Google
Search Busqueda sugerida