Update requiere que insertcommand sea válido cuando se pasa la c ol

20/04/2006 - 15:46 por barajoider | Informe spam
holaOs explico brevemente mi codigo,
tengo una bd sql server,entonces lo que hago es leer una tabla llamada x da=
y la cargo en un dataset toda la tabla select * from tabla esa tabla la
guardo en un xml. luego borro la tabla del sql server, y luego cargo en un
dataset el xml con la tabla q he borrado, pero que tiene la info, intento
añadir todos los elementos del dataset de xml al dataset de la tabla q ahora
esta vacia y no me deja esta es la funcion a ver si sabeis decirme donde
falla. Al añadir las rows al dataset no da ningun error pq coge los valores
que toca, pero es cuando quiero volcar el dataset relleno a la bd que me dice
lo siguiente

"Update requiere que insertcommand sea válido cuando se pasa la colección
datarow con nuevas filas"

aqui va el codigo

Public Sub actualiza_campos(ByVal tabla As String, ByVal dt As DataSet)
On Error GoTo error1
Dim conexion As New OleDb.OleDbConnection
conexion.ConnectionString = objeto.Database.Alias &
";Password=smarteam;"


Dim MiDataAdapter As New OleDb.OleDbDataAdapter
MiDataAdapter.SelectCommand = New OleDb.OleDbCommand("SELECT * FROM
" & tabla, conexion)
conexion.Open()

Dim custDS As DataSet = New DataSet
MiDataAdapter.Fill(custDS, tabla)

Dim row As DataRow
Dim Fila As DataRow
Dim x, i As Long
Dim cadena() As String
Dim aux As String
Dim MiTabla As DataTable = dt.Tables("table")

cadena = NombresColumnas(dt, tabla)

For Each Fila In MiTabla.Rows
&nbs p; row = custDS.Tables(tabla).NewRow()
&nbs p; For i = 0 To UBound(cadena)
&nbs p; row(cadena(i)) = Fila.Item(cadena(i))
&nbs p; Next i
&nbs p; custDS.Tables(tabla).Rows.Add(row)
Next

MiDataAdapter.Update(custDS, tabla)
conexion.Close()
On Error GoTo 0
Exit Sub
error1:
MsgBox(Err.Description)
End Sub

Friend Function NombresColumnas(ByVal dbdataset As DataSet, ByVal
nombretabla As String) As String()
Dim columna As Data.DataColumn
Dim i, j As Integer
Dim nomCol() As String
'
j = dbdataset.Tables(0).Columns.Count - 1
ReDim nomCol(j)
For i = 0 To j
&nbs p; columna = dbdataset.Tables(0).Columns(i)
&nbs p; nomCol(i) = columna.ColumnName
Next
Return nomCol
End Function
 

Leer las respuestas

#1 Hector Obregon [eMVP] [MSDN RD]
21/04/2006 - 04:58 | Informe spam
Hola,

Un DataAdapter puede contener comandos para insertar (InsertCommand), borrar
(DeleteCommand), obtener (SelectCommand), o actualizar (UpdateCommand). En
tu código sólo defines el SelectCommand. Para poder usar update tienes que
definir los otros tres para que el DataAdapter sepa como insertar las filas.

Lo puedes hacer a mano o usando esta clase:
http://msdn2.microsoft.com/en-US/li...andbuilder(VS.80).aspx

Saludos,

Héctor Obregón
http://msdnfan.blogspot.com


"barajoider" wrote in message
news:

holaOs explico brevemente mi codigo,
tengo una bd sql server,entonces lo que hago es leer una tabla llamada x
da> y la cargo en un dataset toda la tabla select * from tabla esa tabla la
guardo en un xml. luego borro la tabla del sql server, y luego cargo en un
dataset el xml con la tabla q he borrado, pero que tiene la info, intento
añadir todos los elementos del dataset de xml al dataset de la tabla q
ahora
esta vacia y no me deja esta es la funcion a ver si sabeis decirme donde
falla. Al añadir las rows al dataset no da ningun error pq coge los
valores
que toca, pero es cuando quiero volcar el dataset relleno a la bd que me
dice
lo siguiente

"Update requiere que insertcommand sea válido cuando se pasa la colección
datarow con nuevas filas"

aqui va el codigo

Public Sub actualiza_campos(ByVal tabla As String, ByVal dt As DataSet)
On Error GoTo error1
Dim conexion As New OleDb.OleDbConnection
conexion.ConnectionString = objeto.Database.Alias &
";Password=smarteam;"


Dim MiDataAdapter As New OleDb.OleDbDataAdapter
MiDataAdapter.SelectCommand = New OleDb.OleDbCommand("SELECT * FROM
" & tabla, conexion)
conexion.Open()

Dim custDS As DataSet = New DataSet
MiDataAdapter.Fill(custDS, tabla)

Dim row As DataRow
Dim Fila As DataRow
Dim x, i As Long
Dim cadena() As String
Dim aux As String
Dim MiTabla As DataTable = dt.Tables("table")

cadena = NombresColumnas(dt, tabla)

For Each Fila In MiTabla.Rows
&nbs p; row = custDS.Tables(tabla).NewRow()
&nbs p; For i = 0 To UBound(cadena)
&nbs p; row(cadena(i)) = Fila.Item(cadena(i))
&nbs p; Next i
&nbs p; custDS.Tables(tabla).Rows.Add(row)
Next

MiDataAdapter.Update(custDS, tabla)
conexion.Close()
On Error GoTo 0
Exit Sub
error1:
MsgBox(Err.Description)
End Sub

Friend Function NombresColumnas(ByVal dbdataset As DataSet, ByVal
nombretabla As String) As String()
Dim columna As Data.DataColumn
Dim i, j As Integer
Dim nomCol() As String
'
j = dbdataset.Tables(0).Columns.Count - 1
ReDim nomCol(j)
For i = 0 To j
&nbs p; columna = dbdataset.Tables(0).Columns(i)
&nbs p; nomCol(i) = columna.ColumnName
Next
Return nomCol
End Function

Preguntas similares