Infracción de concurrencia

04/08/2004 - 12:27 por Carmen | Informe spam
Tengo una página con un datagrid y dos botones, uno para añadir filas al
grid y otro para borrar filas del grid.

Código Page_load:

Dim cadenaconexion As String = "..."
Dim Conexion As SqlConnection= New SqlConnection(cadenaconexion)
Dim CadenaSql As String ="SELECT * FROM FicherosContrato "
Dim adap As SqlDataAdapter = New SqlDataAdapter(CadenaSql, Conexion)
DS = New DataSet()
adap.Fill(DS, "FicherosContrato")

Código Botón de añadir:

Conexion.Open()
Dim fila as DataRow = DS.Tables("FicherosContrato").NewRow()
fila("...") = Relleno los valores de la fila
If DS.Tables("FicherosContrato").Rows.Count = 0 Then
DS.Tables("FicherosContrato").Rows.Add(fila)
Else
DS.Tables("FicherosContrato").Rows.InsertAt(fila,
DS.Tables("FicherosContrato").Rows.Count)
End If
adap.Update(DS, "FicherosContrato")
fila.AcceptChanges()
DS.Tables("FicherosContrato").AcceptChanges()
Conexion.Close()
dgr.DataSource = DS.Tables("FicherosContrato")
dgr.DataBind()

Código del botón de borrar:

Conexion.Open()
Dim fila as DataRow = DS.Tables("FicherosContrato").Rows(e.Item.ItemIndex)
fila.Delete()
adap.Update(DS, "FicherosContrato")
DS.Tables("FicherosContrato").AcceptChanges()
Conexion.Close()
dgr.DataSource = DS.Tables("FicherosContrato")
dgr.DataBind()

Si pulso el botón de añadir y a continuación el de borrar sobre la fila que
acabo de añadir me da un error de Infracción de concurrencia. Si voy a otra
página y vuelvo, ya puedo eliminar el registro recién añadido sin problemas.
¿Por qué me da este error de concurrencia? ¿Cómo puedo evitarlo? ¿Qué esto
haciendo mal?
 

Leer las respuestas

#1 Pablo O. Abbate
04/08/2004 - 13:06 | Informe spam
Hola Carmen,

Imagino que has omitido parte del código por cuestiones de brevedad. Pero
hasta donde puedo ver, te faltan los comandos de modificación en tu
DataAdapter.
Tu creas el nuevo adaptador programaticamente haciendo:
Dim CadenaSql As String ="SELECT * FROM FicherosContrato "
Dim adap As SqlDataAdapter = New SqlDataAdapter(CadenaSql, Conexion)


Pero esto solo te crea el comando select, los otros comandos (insert,
update, delete) no son creados.

Te digo esto porque, generalmente, el error de concurrencia se produce
cuando uno de los comandos de modificación no puede encontrar la fila que
debe modificar y devuelve 0 filas actualizadas. Esto se interpreta como que
alguien ha modificado el contenido de alguna(s) columna(s) de la fila en
cuestión y, por lo tanto, hay un problema de concurrencia.

Sería interesante que adjuntaras la porción de código que te genera los
comandos de dml para ver que puede estar mal.
¿Estás utilizando el CommandBuilder?

Pablo O. Abbate
MCDBA - MCAD - MCSD - MCT
www.auladat.es



"Carmen" escribió en el mensaje
news:%
Tengo una página con un datagrid y dos botones, uno para añadir filas al
grid y otro para borrar filas del grid.

Código Page_load:

Dim cadenaconexion As String = "..."
Dim Conexion As SqlConnection= New SqlConnection(cadenaconexion)
Dim CadenaSql As String ="SELECT * FROM FicherosContrato "
Dim adap As SqlDataAdapter = New SqlDataAdapter(CadenaSql, Conexion)
DS = New DataSet()
adap.Fill(DS, "FicherosContrato")

Código Botón de añadir:

Conexion.Open()
Dim fila as DataRow = DS.Tables("FicherosContrato").NewRow()
fila("...") = Relleno los valores de la fila
If DS.Tables("FicherosContrato").Rows.Count = 0 Then
DS.Tables("FicherosContrato").Rows.Add(fila)
Else
DS.Tables("FicherosContrato").Rows.InsertAt(fila,
DS.Tables("FicherosContrato").Rows.Count)
End If
adap.Update(DS, "FicherosContrato")
fila.AcceptChanges()
DS.Tables("FicherosContrato").AcceptChanges()
Conexion.Close()
dgr.DataSource = DS.Tables("FicherosContrato")
dgr.DataBind()

Código del botón de borrar:

Conexion.Open()
Dim fila as DataRow DS.Tables("FicherosContrato").Rows(e.Item.ItemIndex)
fila.Delete()
adap.Update(DS, "FicherosContrato")
DS.Tables("FicherosContrato").AcceptChanges()
Conexion.Close()
dgr.DataSource = DS.Tables("FicherosContrato")
dgr.DataBind()

Si pulso el botón de añadir y a continuación el de borrar sobre la fila


que
acabo de añadir me da un error de Infracción de concurrencia. Si voy a


otra
página y vuelvo, ya puedo eliminar el registro recién añadido sin


problemas.
¿Por qué me da este error de concurrencia? ¿Cómo puedo evitarlo? ¿Qué esto
haciendo mal?


Preguntas similares