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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 Maxi Accotto
02/01/2010 - 05:36 | Informe spam
Carmelo a esto se los llama Bloqueos y hay distintos tipos, no todos ellos
bloquean la tabla por completo.
Revise los links que le pasaron y lea sobre los loqueos en SQL server para
entender su funcionamiento.

Una forma de disminuirlos en un update es que en el where haya indices
adecuados



Maxi Accotto
MVP en SQL Server
http://blog.maxiaccotto.com

"Carmelo Enrique Gonzalez" wrote in message
news:
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


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida