Foros del Web » Programando para Internet » ASPX (.net) »

Problema de concurrencia...

Estas en el tema de Problema de concurrencia... en el foro de ASPX (.net) en Foros del Web. Hola, estoy teniendo un problema de concurrencia y no me logro dar cuenta donde está el error. El caso es bastante sencillo, tengo un web ...
  #1 (permalink)  
Antiguo 26/12/2006, 12:56
Avatar de .seb  
Fecha de Ingreso: marzo-2006
Ubicación: Uruguay
Mensajes: 493
Antigüedad: 18 años, 1 mes
Puntos: 1
Problema de concurrencia...

Hola, estoy teniendo un problema de concurrencia y no me logro dar cuenta donde está el error.
El caso es bastante sencillo, tengo un web form donde el usuario llena unos datos y hace click en el botón guardar. En ese momento lo que hago es llamar a una función que genera el SQL necesario, hace el insert en la base de datos y de devuelve el ID con el cual insertó.
Cuando la página obtiene ese ID llama a otra (Response.Redirect) con ese ID como parámetro y esta última muestra datos del registro insertado.

El problema que estoy teniendo es que en algún lugar se me están "cruzando" datos. Si existen dos usuarios que ingresan un registro al mismo tiempo (distintos registros) la pantalla que muestra el resultado me muestra los mismos datos en ambos casos, o sea, para uno de ellos es correcto (el registro que ingresó) pero para el otro no, le está mostrando el registro que ingresó el otro.

Alguna idea?

Desde ya muchas gracias
__________________
saludos
seba
http://sgomez.blogspot.com
  #2 (permalink)  
Antiguo 27/12/2006, 05:31
 
Fecha de Ingreso: mayo-2006
Mensajes: 178
Antigüedad: 18 años
Puntos: 3
Re: Problema de concurrencia...

Si está bien hecho el insertar es imposible problema de concurrencia en SQL Server.
  #3 (permalink)  
Antiguo 27/12/2006, 06:12
Avatar de .seb  
Fecha de Ingreso: marzo-2006
Ubicación: Uruguay
Mensajes: 493
Antigüedad: 18 años, 1 mes
Puntos: 1
Re: Problema de concurrencia...

Que poca ayuda me estás dando...
Que significa que esté bien hecho? o que significaría que esté mal hecho?
__________________
saludos
seba
http://sgomez.blogspot.com
  #4 (permalink)  
Antiguo 27/12/2006, 12:44
foo
 
Fecha de Ingreso: febrero-2006
Mensajes: 278
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: Problema de concurrencia...

como estas recuperando el ultimo id?
  #5 (permalink)  
Antiguo 27/12/2006, 12:46
Avatar de .seb  
Fecha de Ingreso: marzo-2006
Ubicación: Uruguay
Mensajes: 493
Antigüedad: 18 años, 1 mes
Puntos: 1
Re: Problema de concurrencia...

Siempre hago un select de una tabla donde se guarda el último y luego este es incrementado en 1.
Todo en la misma transacción.
__________________
saludos
seba
http://sgomez.blogspot.com
  #6 (permalink)  
Antiguo 27/12/2006, 13:52
foo
 
Fecha de Ingreso: febrero-2006
Mensajes: 278
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: Problema de concurrencia...

como no hay codigo relacionado, supongo que en lo que comentas esta el problema.

me parece que seria mejor utilizar campos autoincrementables o caso contrario especificar el nivel de aislamiento adecuado de la transaccion para de algun modo serializar el acceso a esa tabla (no creo que sea bueno en cuanto a rendimiento)
  #7 (permalink)  
Antiguo 28/12/2006, 03:11
 
Fecha de Ingreso: mayo-2006
Mensajes: 178
Antigüedad: 18 años
Puntos: 3
Re: Problema de concurrencia...

Lo mejor a la hora de insertar ( y ver su ID autonumerico) es hacer una doble sentencia SQL:

Dim Id_Insertada As Integer
Dim MiSQL As String = "INSERT INTO Mensajes(IDUserOrigen,Fecha,Asunto) VALUES (@IDUserOrigen,@Fecha,@Asunto); SELECT ID FROM Mensajes WHERE ID = @@IDENTITY"
Dim cm As New SqlCommand(MiSQL, cn)
cm.Parameters.Add(New SqlParameter("@IDUserOrigen", SqlDbType.Int, 4)).Value = Session("IDUser")
cm.Parameters.Add(New SqlParameter("@Fecha", SqlDbType.DateTime, 8)).Value = Now()
cm.Parameters.Add(New SqlParameter("@Asunto", SqlDbType.NVarChar, 100)).Value = Textbox1.Text
cm.Connection.Open()
Try
Id_Insertada = CInt(cm.ExecuteScalar())
Catch ex As Exception
RegisterStartupScript("scripalert", "<script languaje=javascript> javascript:alert('Error:');</script>")
cm.Connection.Close()
Exit Sub
End Try
cm.Connection.Close()

En la variable Id_Insertada (de tipo int) tienes el ID de la tabla insertada. Espero que esto si te sirva de algo. Yo siempre lo empleo cada vez que inserto un registro nuevo y quiero ver su ID
  #8 (permalink)  
Antiguo 09/01/2008, 06:45
Avatar de .seb  
Fecha de Ingreso: marzo-2006
Ubicación: Uruguay
Mensajes: 493
Antigüedad: 18 años, 1 mes
Puntos: 1
Re: Problema de concurrencia...

El problema estaba en el ASP.Net en si y no en las sentencias SQL.
En algunas paginas tenia variables estaticas que eran comunes a todas las sesiones y por eso se me estaban tomando los ultimos valores para todos los usuarios que hiceran esa consulta.
Con esto aprendi que las variables estaticas de ASP.Net no solo son durables dentro de la sesion del usuario sino tambien fuera de esta.
__________________
saludos
seba
http://sgomez.blogspot.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:40.