Saludos a todoa estoy progrmando un sistema en vb.net y a la hora de actualizar me manda el siguiente error
Infracción de concurrencia: UpdateCommand afectó a 0 de los 1 registros esperados.
Codigo de error :
en System.Data.Common.DbDataAdapter.UpdatedRowStatusE rrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandIn...fo[] batchCommands, Int32 commandCount)
en System.Data.Common.DbDataAdapter.UpdatedRowStatus( RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
en System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
en System.Data.Common.DbDataAdapter.UpdateFromDataTab le(DataTable dataTable, DataTableMapping tableMapping)
en System.Data.Common.DbDataAdapter.Update(DataTable dataTable)
en SystemSTP.frm_form.btn_guarda_Click(Object sender, EventArgs e) en E:...Formsfrm_planta.vb:línea 549
el codigo es el siguiente
Private Sub frm_planta_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Conexion.Open()
' La cadena de selección
Dim sSel As String = "SELECT * from plan_prub ORDER BY ficha ASC"
Try
' Crear un nuevo objeto del tipo DataAdapter
NpDataAdapter = New Npgsql.NpgsqlDataAdapter(sSel, Conexion) ' SqlDataAdapter(sSel, sCnn)
' Crear los comandos de insertar, actualizar y eliminar
Dim cb As New Npgsql.NpgsqlCommandBuilder(NpDataAdapter) ' SqlCommandBuilder(da)
cb.QuotePrefix = "["
cb.QuoteSuffix = "]"
' Asignar los comandos al DataAdapter
' (se supone que lo hace automáticamente, pero...) debe tener la tabla una llave primaria o mandara error
NpDataAdapter.UpdateCommand = cb.GetUpdateCommand()
NpDataAdapter.InsertCommand = cb.GetInsertCommand()
NpDataAdapter.DeleteCommand = cb.GetDeleteCommand()
'
' Esta base de datos usa el ID con valores automáticos
NpDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
'
DataTab = New DataTable()
' Llenar la tabla con los datos indicados
NpDataAdapter.Fill(DataTab)
'mostrar el primer registro
If DataTab.Rows.Count > 0 Then
btn_primero_Click(Nothing, Nothing)
txt_busqueda.Select()
Else
fila = -1
btn_modifica.Enabled = False
End If
Catch ex As Exception
MessageBox.Show("ERROR al conectar o recuperar los datos:" & vbLf & ex.Message, "Conectar con la base", MessageBoxButtons.OK, MessageBoxIcon.[Error])
End Try
End Sub
Private Sub asignarDatos(ByVal dr As DataRow)
' Usar los datos que hay en los textbox
If Rdb_m.Checked = True Then
dr("s") = DBNull.Value '"M"
Else
dr("s") = DBNull.Value '"F"
End If
dr("ficha") = txt_ficha.Text
dr("nombre") = txt_nombre.Text
End Sub
Private Sub btn_guarda_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_guarda.Click
Dim DataRo As DataRow = DataTab.Rows(fila)
' Asignar los datos de los textbox a la fila
asignarDatos(DataRo)
Try
NpDataAdapter.Update(DataTab)
DataTab.AcceptChanges()
Catch ex As DBConcurrencyException
MsgBox("Error de concurrencia: " & vbLf & ex.Message & vbLf & vbLf & "Codigo de error :" & vbLf & ex.StackTrace, MsgBoxStyle.Critical, "Error")
End Sub