Bloqueos de Tabla VB.Net y SQL2008

09/07/2012 - 23:39 por cesardgo | Informe spam
Buen dia, tengo una situacion de bloqueos en la que quisiera aclarar algunas dudas.

Estoy utilizando vb.net 2008 accesando una base de datos sql server 2008, base de datos Pubs con una tabla adicional creada llamada parametros. esto para propositos de pruebas de bloqueos.

Cuando Inicio una transaccion en vb.net, despues de ejecutar un select o un update, la tabla completa se bloquea. Existe alguna forma de solo bloquear los registros afectados o que NO bloquee las tablas de consulta? he intentado varias cosas y no he podido encontrar alguna forma de hacer esto.

Para ver el efecto de los bloqueos estoy corriendo el siguiente script paso a paso y que despues de aplicar el Cmd.ExecuteNonQuery() para la tabla authors, poder consultar la tabla pubs de almenos los registros NO incluidos en el update, sin que haya terminado la transaccion. actualmente me bloquea toda la tabla incluyendo la tabla de parametros (he intentado las instrucciones con y sin las opciones de NoLock y RowLock):



Dim Trans As SqlClient.SqlTransaction = Nothing
Dim cn As New SqlClient.SqlConnection("server=miserver\sql2008; DataBase=pubs; user id=sa; pwd=sa")

Try
Dim Cmd As New SqlClient.SqlCommand("Select * from parametros with(nolock) ", cn)

Dim Ds As New DataSet
Dim SQL As String = ""


cn.Open()
'' Trans = cn.BeginTransaction(IsolationLevel.Snapshot)
Trans = cn.BeginTransaction

'obteniendo parametros.
SQL = "Select * from parametros with(nolock)"

Cmd.CommandText = SQL
Cmd.CommandType = CommandType.Text
Cmd.Transaction = Trans
Dim Da As New SqlClient.SqlDataAdapter(Cmd)

Da.Fill(Ds)

If Ds.Tables(0).Rows.Count > 0 Then
'lectura de parametros
Dim Num As Integer = Ds.Tables(0).Rows(0)(0)
Num += 1

'actualizacion de parametros.
SQL = "Update Parametros With(ROWLOCK) Set Consecutivo=@Num"
Cmd.CommandText = SQL

Cmd.Parameters.Clear()
Cmd.Parameters.AddWithValue("@Num", Num)
Cmd.ExecuteNonQuery()

SQL = "Update Authors With(ROWLOCK) Set Phone=@Telefono, Zip=@Zip Where au_lname=@Nombre"
Cmd.CommandText = SQL
Cmd.Parameters.Clear()
Cmd.Parameters.AddWithValue("@Telefono", "2203-050" & Num)
Cmd.Parameters.AddWithValue("@Zip", 10000 + Num)
Cmd.Parameters.AddWithValue("@Nombre", "Einstein")
Cmd.ExecuteNonQuery()

LblMensajes.Text = "Actualizado consecutivo: " & Num
End If

Trans.Commit()

cn.Close()

------------------------------------------
Saludos y se agradece la ayuda.
 

Preguntas similares