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
%>