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

20/04/2006 - 15:47 por barajoider | Informe spam
Os 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 Lucas
20/04/2006 - 19:31 | Informe spam
Lo que pasa es que te falta pasarle los comandos Insert, Update, etc.

Lo puedes hacer manualmente, pero hay una forma automática de hacerlo.
Usando un CommandBuilder. Para tu caso sería algo como:

Dim MiDataAdapter As OleDbDataAdapter
Dim cb As OleDbCommandBuilder

MiDataAdapter = New OleDbDataAdapter("SELECT * FROM " & tabla, conexion)
cb = New OleDbCommandBuilder(MiDataAdapter)

conexion.Open()´
'El código sigue igual

Otra cosa, no es que quiera ser entometido, pero creo que para capturar
errores deberías usar el Try.. Catch en vez del On error. En fin, me parece
que es la mejor opción.

Espero haberte ayudado. Nos vemos.

Preguntas similares