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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 barajoider
21/04/2006 - 10:03 | Informe spam
Tienes razón ya me funciona perfectamente, muchas gracias!
hola


"Hector Obregon [eMVP] [MSDN RD]" wrote:

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



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida