《ASP提示“乐观并发检查失败。已在此游标之外修改了该行》……求救!!!

ChenAlancoo 2015-11-20 02:49:02
各位好人,这段代码的作用是,判断学生作业的30道单选题和20道多选题(随机出题)的结果,并记录学生做错题目的ID,学生答案的相关信息,单个提交测试时没有问题,但当并发数超过10人时就开始报“ASP提示“乐观并发检查失败。已在此游标之外修改了该行”,不知道该如何修改,跪求大侠相救!!!





<!--#include file ="../inc/check_stu.asp"-->
<!--#include file ="../inc/conn.asp"-->
<!--#include file ="../inc/config.asp"-->
<%
username=Request("username")
kcjd=Request("kcjd")
if username="" or kcjd="" then
response.write"<SCRIPT language=JavaScript>alert('您的操作有误,返回首页 \n \n 友情提示');"
response.write"location.href='index_stu.asp'</SCRIPT>"
end if
set rs=server.createobject("adodb.recordset")
sql="select * from xc_ydpj_Result where username='"&username&"' and kcjd='"&kcjd&"' "
rs.open sql,conn,1,3
if not rs.eof Then
%>
<%
set rs_Tx=server.createobject("adodb.recordset")
sql_Tx="select * from xc_ydpj_Result_Tx where username='"&username&"' and kcjd='"&kcjd&"'"
rs_Tx.open sql_Tx,conn,1,1
u_right=0
u_wrong=0
for x=1 to 30
set rs_CTrue=server.createobject("adodb.recordset")
sql_CTrue="select R from xc_ydpj_Choice where id='"&rs_Tx("ChoiceId"&x)&"' "
rs_CTrue.open sql_CTrue,conn,1,3
if rs("Choice"&x)=rs_CTrue("R") then
u_right=u_right+1
set rs_A=server.createobject("adodb.recordset")
sql_A="select * from xc_ydpj_Answer_Wrong_Num "
rs_A.open sql_A,conn,1,3
rs_A.addnew
rs_A("Tx")=rs_Tx("ChoiceId"&x)
rs_A("kcjd")=kcjd
rs_A("WorR")="R"
rs_A("Year_Class")=int(left(right(username,6),4))
rs_A("Type")="C"
rs_A("username")=username
rs_A("Book_Name")=rs_CTrue("Book_Name")
rs_A.update
rs_A.close
set rs_A=nothing
else
u_wrong=u_wrong+1
rs_CTrue("Wrong_Num_Times")=rs_CTrue("Wrong_Num_Times")+1


set rs_B=server.createobject("adodb.recordset")
sql_B="select * from xc_ydpj_Answer_Wrong_Num "
rs_B.open sql_B,conn,1,3
rs_B.addnew
rs_B("Tx")=rs_Tx("ChoiceId"&x)
rs_B("kcjd")=kcjd
rs_B("WorR")="W"
rs_B("Year_Class")=int(left(right(username,6),4))
rs_B("Type")="C"
rs_B("username")=username
rs_B("Book_Name")=rs_CTrue("Book_Name")
rs_B.update
rs_B.close
set rs_C=nothing
rs_CTrue.update
end if
rs_CTrue.close
set rs_CTrue=nothing
next
rs_Tx.close
set rs_Tx=nothing
%>
<%
set rs_Tx=server.createobject("adodb.recordset")
sql_Tx="select * from xc_ydpj_Result_Tx where username='"&username&"' and kcjd='"&kcjd&"'"
rs_Tx.open sql_Tx,conn,1,1
k_right=0
k_wrong=0
for y=1 to 20
set rs_True=server.createobject("adodb.recordset")
sql_True="select R from xc_ydpj_MulChoice where id='"&rs_Tx("MulChoiceId"&y)&"' "
rs_True.open sql_True,conn,1,3
if rs("MulChoice"&y)=rs_True("R") then
k_right=k_right+1

set rs_C=server.createobject("adodb.recordset")
sql_C="select * from xc_ydpj_Answer_Wrong_Num "
rs_C.open sql_C,conn,1,3
rs_C.addnew
rs_C("Tx")=rs_Tx("MulChoiceId"&y)
rs_C("kcjd")=kcjd
rs_C("WorR")="W"
rs_C("Year_Class")=int(left(right(username,6),4))
rs_C("Type")="M"
rs_C("username")=username
rs_C("Book_Name")=rs_True("Book_Name")
rs_C.update
rs_C.close
set rs_C=nothing
else
k_wrong=k_wrong+1
rs_True("Wrong_Num_Times")=rs_True("Wrong_Num_Times")+1


set rs_D=server.createobject("adodb.recordset")
sql_D="select * from xc_ydpj_Answer_Wrong_Num "
rs_D.open sql_D,conn,1,3
rs_D.addnew
rs_D("Tx")=rs_Tx("MulChoiceId"&y)
rs_D("kcjd")=kcjd
rs_D("WorR")="W"
rs_D("Year_Class")=int(left(right(username,6),4))
rs_D("Type")="M"
rs_D("username")=username
rs_D("Book_Name")=rs_True("Book_Name")
rs_D.update
rs_D.close
set rs_D=nothing
rs_True.update
end if
rs_True.close
set rs_True=nothing
next

rs_Tx.close
set rs_Tx=nothing



%>

<%
total=(u_right*2)+(k_right*2)
rs("total")=int(total)
rs("Choice_Right_Num")=u_right
rs("MulChoice_Right_Num")=k_right
rs("Choice_Wrong_Num")=u_wrong
rs("MulChoice_Wrong_Num")=k_wrong
rs.update

%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><%=SiteName%>_南京师大附中新城初中</title>
<style>
table{border-collapse:collapse; font-size:14px;}
table td{border:1px solid #cccccc;}
</style>
</head>
<body>
<div align="center" style="line-height:50px"><p>考试结果</p></div>
<table cellSpacing=1 cellPadding=2 width="500" align=center border=0>
<tr bgcolor="#FFF7E7">
<td colspan="4" align=center height=30>考试情况表</td>
</tr>
<tr>
<td width="100" align=right height=30>考试总分:</td>
<td>100分</td>
<td width="100" align=right height=30>考生得分:</td>
<td><font color="#FF0000"><%=total%></font> 分</td>
</tr>
<tr bgcolor="#F7F7F7">
<td width="100" align=right height=30>班 级:</td>
<td><%=rs("class")%></td>
<td width="100" align=right height=30>姓 名:</td>
<td><%=rs("name")%></td>
</tr>
<tr>
<td width="100" rowspan="2" align=right bgcolor="#F7F7F7">得分情况:</td>
<td height="30" colspan="3">单选题:<font color="#FF6600"><%=u_right*1%></font> 分</td>
</tr>
<tr>
<td height="30" colspan="3">多选题:<font color="#FF6600"><%=k_right*2%></font> 分</td>
</tr>
<%
rs.close
set rs=nothing
end if
%>
<tr align="center">
<td colSpan=4 height=30>
<input name="colse" type="button" value="关闭页面" onClick="javascript:window.opener=null;window.close();">
</td>
</tr>
</table>

</body>
</html>
...全文
310 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChenAlancoo 2015-11-23
  • 打赏
  • 举报
回复
那啥,不知道称呼啥,兄弟,谢谢啦!我的代码写的比较乱,难得你看完了,还给了我建议。跟据你的建议,我看了下代码,找到了乐观并发出现的原因,应该是rs_CTrue("Wrong_Num_Times")=rs_CTrue("Wrong_Num_Times")+1等两段代码上面存在同时读写的问题。我想过很多,就是没想过是在这个上面出现问题。将这么多数据库读出写入操作放在一个页面里面,导致这个页面执行比较耗时,果断弃用,换成批量后台处理了。再次感谢啊!希望能多多向您学习!!!
yangtututu 2015-11-22
  • 打赏
  • 举报
回复
同一个数据 有人读 有人写 造成读写冲突 建议 分拆表字段 只读的 放一个表 需要写的 根据 每个人的ID 分开 自己读写自己的数据 不冲突

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧