-

asp操作sqlserver同个表同一个记录时,被锁

asp操作sqlserver同个表同一个记录时,被锁

<!--#Include virtual = "/Inc/Config.Asp"-->  
<%
'sqlserver数据库,不可同时操作一个表的某条数据,会被后者锁住,不可更新了'

call openconn()

call test1(2233,2233)
' call test1(2233,100)
' call test1(0,0) 
sub test1(id1,id2)
    'rs更新' 写操作id2233
    rs.open "select * from " & db_PREFIX & "Member Where id="&id1 ,conn,1,3
    rs("username")="aaaa=" & getrnd(5)
    rs.update
    call echoBlueB("rs 读1 username",rs("username"))
    doevents

    'rsx更新' 写操作id2233 锁住写操作
    rsx.open "select * from " & db_PREFIX & "Member Where id="&id2 ,conn,1,3
    call echo("rsx 读1 username",rsx("username"))
    rsx("username")="bbbb=" & getrnd(5)
    rsx.update

    call echo("rsx 更新读2 username",rsx("username"))
    doevents

    ' rsx.close  '就算关闭了,也同样不可写操作'

    '在access数据库里没有这个问题'
    call echoBlueB("rs 读2 username",rs("username"))    '读出来的不是rsx更新后的内容,说明rs里只是原来的旧数据,和数据库已经没有连接了'
    doevents

    'rs再更新'
    rs("username")="cccc=" & getrnd(5)
    rs.update
    call echoBlueB("rs 读3 username",rs("username"))
end sub
%>

        

处理方法,成功


<!--#Include virtual = "/Inc/Config.Asp"-->  
<%
'sqlserver数据库,不可同时操作一个表的某条数据,会被后者锁住,不可更新了'

call openconn()

call test1(2233,2233)
' call test1(2233,100)
' call test1(0,0) 
sub test1(id1,id2)
    'rs更新' 写操作id2233
    rs.open "select * from " & db_PREFIX & "Member Where id="&id1 ,conn,1,3
    rs("username")="aaaa=" & getrnd(5)
    rs.update
    call echoBlueB("rs 读1 username",rs("username"))
    doevents

    'rsx更新' 写操作id2233 锁住写操作
    rsx.open "select * from " & db_PREFIX & "Member Where id="&id2 ,conn,1,3
    call echo("rsx 读1 username",rsx("username"))
    rsx("username")="bbbb=" & getrnd(5)
    rsx.update

    call echo("rsx 更新读2 username",rsx("username"))
    doevents

    dim isErr:isErr=false
    'rs再更新' 
    On Error Resume Next         ' 关闭正常的错误处理,继续执行  
    rs("username") = "newvalue"  
    rs.Update  
    If Err.Number <> 0 Then  
        ' 处理错误,可能是因为Recordset被锁  
        Response.Write "发生错误: " & Err.Description  
        isErr=true
        Err.Clear  

    End If   
    On Error GoTo 0   '恢复正常的错误处理  
     '继续执行其他代码,此时如果遇到错误会按默认方式处理
    

    if isErr then
        Set rs = CreateObject("Adodb.RecordSet") 
        rs.open "select * from " & db_PREFIX & "Member Where id="&id1 ,conn,1,3
        rs("username") = "newvalue"  
        rs.Update 
    end if



end sub
%>