Retroceder   Foros del Web > Programación para sitios web > .NET > win forms

Respuesta
 
Herramientas Desplegado
Antiguo 23-nov-2005, 10:24   #1 (permalink)
moNTeZIon ha deshabilitado el karma
 
Avatar de moNTeZIon
 
Fecha de Ingreso: enero-2005
Ubicación: CanFenosa Martorelles BCN
Mensajes: 1.286
Enviar un mensaje por Skype™ a moNTeZIon
Infraccion de concurrencia: Update command...

Buenos dias,

He buscado en los foros de NET, WebForms y WinForms la palabra "concurrencia" y aparecen un par de posts incompletos, así que, lo planteo de nuevo.

El comportamiento es el siguiente. En un datagrid, hago altas sin problemas. Hago modificaciones sin problemas a filas que ya existen. Pero hay un caso peculiar:
Si hago una alta y relleno cuatro o cinco campos y luego le doy a "guardar cambios" (que no hace más que un Update del dataset a traves de un dataadapter) me lo guarda bien, pero una vez guardado, me voy a cualquier campo del mismo registro y lo modifico, cuando le vuelvo a dar a guardar, me salta el error:

Infraccion de concurrencia: Update command afectó a 0 registros

Dada esta situación específica, a alguien se le ocurre qué me puede estar pasando?

Gracias a todos.
__________________
..:: moNTeZIon ::..
moNTeZIon está desconectado   Responder Citando
Antiguo 23-nov-2005, 12:52   #2 (permalink)
xknown está en el buen camino
 
Avatar de xknown
 
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.249
A esto se le conoce como concurrencia optimista, dependiendo de como hayas generado el CommandText de las propiedades DeleteCommand, UpdateCommand del DataAdapter, este hace una comprobación para que los datos no hayan variado con respecto a la versión _original_ con la que llegó al DataSet (esto es útil para mantener una consistencia en tus datos), si en la ejecución de estos métodos (se ejecuta por cada fila) se devuelve 0 filas afectadas, quiere decir que los datos han variado y ya no son los mismos por lo tanto se lanza la excepción, puedes utilizar el evento RowUpdated del DataAdapter, para decidir que acción tomar.

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
xknown está desconectado   Responder Citando
Antiguo 24-nov-2005, 02:10   #3 (permalink)
moNTeZIon ha deshabilitado el karma
 
Avatar de moNTeZIon
 
Fecha de Ingreso: enero-2005
Ubicación: CanFenosa Martorelles BCN
Mensajes: 1.286
Enviar un mensaje por Skype™ a moNTeZIon
Pero el evento RowUpdated salta cada vez que se hace una modificación?
Que debería hacer en ese evento, un da.Update tambien?

De todas formas, te comento que genero la SelectCommand del dataadapter con algo como: "SELECT * FROM Urgencias WHERE... ORDER BY.."
Es que debería especificar los campos uno por uno para que genere bien los demás comandos el commandbuilder o algo así?
__________________
..:: moNTeZIon ::..
moNTeZIon está desconectado   Responder Citando
Antiguo 24-nov-2005, 11:39   #4 (permalink)
xknown está en el buen camino
 
Avatar de xknown
 
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.249
Asigna manualmente esas propiedades (UpdateCommand, DeleteCommand), si lo que quieres es ganar rendimiento y evitar ese _error_.

http://msdn.microsoft.com/library/sp...edcommands.asp
http://msdn.microsoft.com/library/de...adonetbest.asp

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
xknown está desconectado   Responder Citando
Antiguo 25-nov-2005, 02:54   #5 (permalink)
moNTeZIon ha deshabilitado el karma
 
Avatar de moNTeZIon
 
Fecha de Ingreso: enero-2005
Ubicación: CanFenosa Martorelles BCN
Mensajes: 1.286
Enviar un mensaje por Skype™ a moNTeZIon
Gracias por tus respuestas xknown. Me lo estoy mirando.

Pero, no hay la forma de poder utilizar un gran objeto como es CommandBuilder, evitando el error de concurrencia? Por alguna cosa que ya he leido por ahi, veo que la concurrencia optimista trata de cuando varias personas modifican a la vez los datos. Pero por ahora me ocurre utilizando la aplicación yo solo.

Cita:
Iniciado por xknown
si en la ejecución de estos métodos (se ejecuta por cada fila) se devuelve 0 filas afectadas, quiere decir que los datos han variado y ya no son los mismos por lo tanto se lanza la excepción, puedes utilizar el evento RowUpdated del DataAdapter, para decidir que acción tomar.
Pero porqué lanza una excepción? Si han cambiado los datos, pues que los updatee... no?
Por algo pregunto justo antes de updatear: If miDataSet.HasChanges Then...

Hay algo aqui que no entiendo.
Gracias por la aclaracion que puedan darme.
__________________
..:: moNTeZIon ::..
moNTeZIon está desconectado   Responder Citando
Antiguo 25-nov-2005, 03:30   #6 (permalink)
Jose_minglein2 tiene algunos puntos positivos de karma
 
Avatar de Jose_minglein2
 
Fecha de Ingreso: noviembre-2004
Mensajes: 2.334
Si haces un AccepChanges en el datatable tras el update no solventas este problema???
Jose_minglein2 está desconectado   Responder Citando
Antiguo 25-nov-2005, 03:47   #7 (permalink)
moNTeZIon ha deshabilitado el karma
 
Avatar de moNTeZIon
 
Fecha de Ingreso: enero-2005
Ubicación: CanFenosa Martorelles BCN
Mensajes: 1.286
Enviar un mensaje por Skype™ a moNTeZIon
Hola Jose,

Mira, siguiendo tu propuesta, me queda así el codigo para Guardar los cambios:

Código:
Private Sub GuardarCambios_miDataSet()
    Me.BindingContext(miDataSet, "Urgencias").EndCurrentEdit()
    If miDataSet.HasChanges Then
      Try
        daUrgencias.Update(miDataSet, "Urgencias")
        miDataSet.AcceptChanges()
      Catch eX As Exception
        MessageBox.Show(eX.Message)
      End Try
    End If
  End Sub
Pero me sigue mandando el error, si modifico cualquier campo de un registro que acabo de dar de alta. No ocurre, en cambio, con otros registros que modifico. Solamente me lanza la excepcion modificando los que acabo de dar de alta.
__________________
..:: moNTeZIon ::..
moNTeZIon está desconectado   Responder Citando
Antiguo 25-nov-2005, 03:50   #8 (permalink)
moNTeZIon ha deshabilitado el karma
 
Avatar de moNTeZIon
 
Fecha de Ingreso: enero-2005
Ubicación: CanFenosa Martorelles BCN
Mensajes: 1.286
Enviar un mensaje por Skype™ a moNTeZIon
Perdón, dijiste en el datatable.
He cambiado la linea de accept changes por:

miDataSet.Tables("Urgencias").AcceptChanges()

Pero nada.

Y probando como me comenta xknown, especificando los comandos a pelo, me manda este error al hacer el update:

Código:
No se han especificado valores para algunos de los parametros requeridos.
Que es cierto, he escrito los comandos, asignando cada campo a un parametro con el mismo nombre, pero no especifico los parámetros. Lo he de hacer? No debe coger los nuevos valores de cada registro modificado?

Está costando.. Gracias por la paciencia.
__________________
..:: moNTeZIon ::..

Última edición por moNTeZIon; 25-nov-2005 a las 04:11.
moNTeZIon está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 04:36.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93