Bloqueo

30/12/2009 - 14:56 por Carmelo Enrique Gonzalez | Informe spam
Hola amigos soy nuevo en visual basic 2008, y se me presenta el siguiente
inconveniente. Al momento de guardar la información no puedo realizar una
consulta a la tabla que estoy actualizando. A continuación les escribo el
código que utilizo
Using sqlCon As New SqlConnection(cCadenaDeConexion)
sqlCon.Open()
Dim cmd As SqlCommand
Dim tran As SqlTransaction = sqlCon.BeginTransaction
Try
cdContador.Fill(dtsContador, "spa_Contador")
nContador =
IIf(IsDBNull(dtsContador.Tables("spa_Contador").Rows(nPos).Item("Adm_Caja")),
0, dtsContador.Tables("spa_Contador").Rows(nPos).Item("Adm_Caja")) + 1

sCadSQL = "UPDATE spa_Contador " & _
"SET Adm_Caja = @Adm_Caja " & _
"WHERE IDContador = @IDContador"

cmd = New SqlCommand(sCadSQL, sqlCon)
cmd.Transaction = tran

'Asigna el codigo
dtsCajas.Clear()
cdCajas.Fill(dtsCajas, "Adm_Caja")
cCodigo = LlenarCadena(nContador, 4, "0", "",
dtsCajas, "Adm_Caja", "CajaID")

'Carga los parametros
With cmd
.Parameters.AddWithValue("@IDContador", 1)
.Parameters.AddWithValue("@Adm_Caja",
CDbl(cCodigo))
End With

'ejecuta la insercion
cmd.ExecuteNonQuery()
EL PROBLEMA LO TENGO AQUÍ. POR EJEMPLO YO COLOQUE AQUÍ UN PUNTO DE
INTERRUPCION Y TRATE DE ENTRAR DESDE OTRO EQUIPO AL MODULO AL MOMENTO DE
CARGAR ME DICE QUE SE AGOTA EL TIPO Y NO ENTRA QUE PUEDO HACER..

'Carga los parametros de la consulta
sCadSQL = "INSERT INTO Adm_Caja " & _
"(CajaID, Caja)" & _
"VALUES (@CajaID, @Caja)"

cmd = New SqlCommand(sCadSQL, sqlCon)
cmd.Transaction = tran
'Carga los parametros
With cmd
.Parameters.AddWithValue("@CajaID", cCodigo)
.Parameters.AddWithValue("@Caja",
txtNombre.Text.Trim)
End With

'ejecuta la insercion
cmd.ExecuteNonQuery()

'graba
tran.Commit()

Catch ex As Exception
tran.Rollback()
MsgBox(ex.Message, MsgBoxStyle.Information, "Error
del sistema")
Finally
dtsCajas.Clear()
cdCajas.Fill(dtsCajas, "Adm_Caja")
If Not bError Then
cbCodigo.Text = ""
mnuCancelar_Click(sender, e)
cbCodigo.Text = cCodigo
Control("Agregar caja", cCodigo, cDescripcion,
"")
End If
End Try
End If
End Using

Quiero que al momento de guardar otros usuarios puedan acceder a la tabla
sin problemas y no esperar que termine que guardar para poder tener
acceso...

Gracias por su ayuda
 

Leer las respuestas

#1 Gustavo Cantero
30/12/2009 - 15:15 | Informe spam
Carmelo:
Parecería ser un problema de bloqueos, te recomiendo este
artículo donde explica los distintos tipos de transacciones y los tipos
de "isolation" (aislamiento) de cada uno:

http://www.programandoamedianoche.c...modos-de-a
islamiento-en-sql-server-y-adonet/

Suerte!

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar



De: Carmelo Enrique Gonzalez [mailto:]
Expuesto a las: Miércoles, 30 de Diciembre de 2009 10:56 a.m.
Expuesto en: microsoft.public.es.sqlserver
Conversación: Bloqueo
Asunto: Bloqueo

Hola amigos soy nuevo en visual basic 2008, y se me presenta el
siguiente
inconveniente. Al momento de guardar la información no puedo realizar
una
consulta a la tabla que estoy actualizando. A continuación les escribo
el
código que utilizo
Using sqlCon As New SqlConnection(cCadenaDeConexion)
sqlCon.Open()
Dim cmd As SqlCommand
Dim tran As SqlTransaction = sqlCon.BeginTransaction
Try
cdContador.Fill(dtsContador, "spa_Contador")
nContador IIf(IsDBNull(dtsContador.Tables("spa_Contador").Rows(nPos).Item("Adm_Caj
a")),
0, dtsContador.Tables("spa_Contador").Rows(nPos).Item("Adm_Caja")) + 1

sCadSQL = "UPDATE spa_Contador " & _
"SET Adm_Caja = @Adm_Caja " & _
"WHERE IDContador = @IDContador"

cmd = New SqlCommand(sCadSQL, sqlCon)
cmd.Transaction = tran

'Asigna el codigo
dtsCajas.Clear()
cdCajas.Fill(dtsCajas, "Adm_Caja")
cCodigo = LlenarCadena(nContador, 4, "0", "",
dtsCajas, "Adm_Caja", "CajaID")

'Carga los parametros
With cmd
.Parameters.AddWithValue("@IDContador", 1)
.Parameters.AddWithValue("@Adm_Caja",
CDbl(cCodigo))
End With

'ejecuta la insercion
cmd.ExecuteNonQuery()
EL PROBLEMA LO TENGO AQUÍ. POR EJEMPLO YO COLOQUE AQUÍ UN PUNTO DE
INTERRUPCION Y TRATE DE ENTRAR DESDE OTRO EQUIPO AL MODULO AL MOMENTO DE

CARGAR ME DICE QUE SE AGOTA EL TIPO Y NO ENTRA QUE PUEDO HACER..

'Carga los parametros de la consulta
sCadSQL = "INSERT INTO Adm_Caja " & _
"(CajaID, Caja)" & _
"VALUES (@CajaID, @Caja)"

cmd = New SqlCommand(sCadSQL, sqlCon)
cmd.Transaction = tran
'Carga los parametros
With cmd
.Parameters.AddWithValue("@CajaID", cCodigo)
.Parameters.AddWithValue("@Caja",
txtNombre.Text.Trim)
End With

'ejecuta la insercion
cmd.ExecuteNonQuery()

'graba
tran.Commit()

Catch ex As Exception
tran.Rollback()
MsgBox(ex.Message, MsgBoxStyle.Information,
"Error
del sistema")
Finally
dtsCajas.Clear()
cdCajas.Fill(dtsCajas, "Adm_Caja")
If Not bError Then
cbCodigo.Text = ""
mnuCancelar_Click(sender, e)
cbCodigo.Text = cCodigo
Control("Agregar caja", cCodigo,
cDescripcion,
"")
End If
End Try
End If
End Using

Quiero que al momento de guardar otros usuarios puedan acceder a la
tabla
sin problemas y no esperar que termine que guardar para poder tener
acceso...

Gracias por su ayuda

Preguntas similares