2012-03-30 12 views
5

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

+0

¿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? –

+0

@ 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

Respuesta

0

Encontré el código correspondiente en System.Data.Common.DbDataAdapter.cs - la infracción de concurrencia se produce cuando la cantidad de registros afectados es cero.

2

En lugar de utilizar decompilador, ven a código real. ver la siguiente publicación del blog para más detalles. http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx

+0

Hasta ahora, no se ha podido encontrar el enlace 'descargar el código fuente'. – Tim

+1

Encontrado: http://referencesource.microsoft.com/netframework.aspx – Tim

+0

@Attila Ozgur: Gracias por la ayuda. Tener el código fuente real para buscar me llevó finalmente a la respuesta. Veo que el sitio web SO te otorga el 50% de la recompensa automáticamente. – Tim

Cuestiones relacionadas