Donde en el .NET System.Data namespace es el código que determina, cuando se ejecuta la actualización-comando, si una fila en una tabla SQL Server 2K se ha cambiado después de que el programa cliente lo haya leído, es decir, que la versión del lado del cliente de la fila está "obsoleta"?.NET System.Data espacio de nombres descompilación: ¿dónde puedo encontrar el código relacionado con las violaciones de concurrencia de SQL Server
Me gustaría utilizar un decompilador para mirar el código y descubrir cómo se determina que ha ocurrido una infracción de concurrencia. Sé que tendrá algo que ver con una columna de marca de tiempo en la tabla y/o @@ rowcount, pero me gustaría ver qué sucede cuando la biblioteca ejecuta un comando de actualización incluido en un proceso almacenado.
El procedimiento almacenado tendría esta estructura:
create proc foo_update
@id int,
@rowversion timestamp,
@val varchar(5)
as
begin
update foo set a = @val
where id = @id and mytimestampcolumn = @rowversion;
end
es decir, se actualizará ninguna fila si ha cambiado debido a la cláusula where que compara la rowversion en el System.Data del lado del cliente. DataRow al valor de la marca de tiempo de la fila en la base de datos, y el proceso se ejecutará correctamente y no generará un error. Sin embargo, las bibliotecas SqlClient, en su utilidad, informan este escenario como una infracción de concurrencia.
Gracias
¿Estás utilizando un 'SqlDataAdapter'? ¿Cómo lo llamas? ¿Qué desea lograr al encontrar este código fuente, omitir el error de violación de concurrencia? –
@ Jordão: Quería ver qué condiciones eran necesarias para que se generara el error, es decir, si la biblioteca estaba comparando los valores de la marca de tiempo o simplemente observando el número de registros afectados. – Tim