zoukankan      html  css  js  c++  java
  • [有人帮我说明了原因,明天找人测试一下]紧急求助!!(请您帮看看我的一个在线考试系统的部分代码是否有问题啊?)

    将此文章发布到首页是想让大家帮助我找到问题所在,所以恳请DuDu别把我文章给转移区域!!小弟先谢过了!!

    我做了个在线测试的系统。答题时是用Ajax技术来向一个数据处理页ashx页页面发送答案,然后在该ashx页面通过存储过程对答案进行提交。当本系统初次使用的时候50人考试没有任何问题,不过,自从第一次使用之后,就出现了如下的现象:
        在内存512M的2003服务器系统下,人数少的的时候使用本系统进行答题时不会出现问题,可是当人数超过10左右时就会出现这样或那样的问题。或者说“某某表不存在”,或者说DataReader未关闭。可是我已经仔细研究了代码,我认为能优化的地方都已经优化了。现在实在找不出解决办法了,吐血了都快,希望大家快帮帮我啊!
    我所用到的操作类的部分主要代码是这样的:

      1using System;
      2using System.Data;
      3using System.Data.SqlClient;
      4using System.Text;
      5
      6namespace DataAccess
      7{
      8    public class dbControl
      9    {
     10        private static dbControl m_objDBcontrol = null;
     11
     12        private static string strSql;//数据库连接字符串
     13        private SqlConnection myConn = null;
     14
     15        构造函数
     21
     22        实例化数据库操作对象
     45
     46        通过带有参数的Sql语句获取DataReader[推荐使用此方法], SqlLDataReader类型
     80
     81        通过带有参数的Sql语句获取DataTable[推荐使用此方法],返回值:DataTable类型
    123
    124        执行返回值不是表的的存储过程
    152
    153        执行返回值为单个数据表的存储过程
    208
    209        执行具有输出参数的存储过程[我用的就是此方法!!]
    245
    246        Connection对象处理
    271
    272    }

    273}

    274

    然后我调用该类时这样调用:在一个基类中生成该对象,然后各个需要进行数据库操作的页面继承此基类

    1 protected dbControl objDB = dbControl.GetDBOpterator(System.Configuration.ConfigurationManager.ConnectionStrings["HDHTTestOnline_ConnectionString"].ConnectionString);


    连接字符串是这样的:

    1<connectionStrings>
    2        <add name="TestOnline_ConnectionString" connectionString="server=192.168.0.79;database=TestOnline;user=sa;password=sa;"/>
    3 </connectionStrings>


    以下是答题页面的代码:
    答题页面我是这样设计的:每道题目上有一个“保存”按钮,用户需要每答一题点击一次它,点击保存按钮时触发如下事件:

     1 postTarget="PaperDealHandler.ashx?questionid=" + escape(questionid) + "&answer=" + escape(answer);
     2            
     3            //将要处理的题目的ID及其答案提交到数据处理程序中
     4            var wRequest=new Sys.Net.WebRequest();
     5            wRequest.set_url(postTarget);
     6            wRequest.set_httpVerb("POST");
     7            
     8            timer=window.setTimeout("showSaving()",timelength);//设置timelength秒之后显示"正在保存"的timeout
     9            
    10            wRequest.add_completed(OnWebRequestCompleted);//提交完成时的事件
    11            wRequest.invoke();

    以下是ashx页面的数据处理的代码:
     1 try
     2            {
     3                string RecruId = context.Session["RecruId"].ToString();//招聘ID
     4                string TestID = context.Session["TestID"].ToString();//测试ID
     5                string PaperID = context.Session["PaperID"].ToString();//试卷ID
     6                string StuID = context.Session["StuID"].ToString();//考生编号
     7
     8                //Session["lastTime"]用来保存考生上次提交试题的时间
     9                if (Session["lastTime"!= null)
    10                {
    11                    DateTime dtBegin = DateTime.Parse(Session["lastTime"].ToString());
    12                    DateTime dtEnd = DateTime.Now;
    13
    14                    TimeSpan ts;
    15                    ts = dtEnd.Subtract(dtBegin);
    16
    17                    SqlParameter[] spTimeSpan = new SqlParameter[7];
    18                    spTimeSpan[0= new SqlParameter("@RecruID", RecruId);
    19                    spTimeSpan[1= new SqlParameter("@TestID", TestID);
    20                    spTimeSpan[2= new SqlParameter("@PaperID", PaperID);
    21                    spTimeSpan[3= new SqlParameter("@StuID", StuID);
    22                    spTimeSpan[4= new SqlParameter("@SpentHours", ts.Hours);
    23                    spTimeSpan[5= new SqlParameter("@SpentMinutes", ts.Minutes);
    24                    spTimeSpan[6= new SqlParameter("@SpentSeconds", ts.Seconds);
    25
    26                    objDB.sp_Execute("pro_stuAnswerTime", DataAccess.dbControl.sp_ReturnType.AffectedRowsCount, spTimeSpan);
    27                    //重新将当前时间同仁给Session["lastTime"];
    28                    Session["lastTime"= DateTime.Now.ToString();
    29                }

    30
    31                SqlParameter[] spTemp = new SqlParameter[6];
    32                spTemp[0= new SqlParameter("@RecruID", RecruId);
    33                spTemp[1= new SqlParameter("@TestID", TestID);
    34                spTemp[2= new SqlParameter("@PaperID", PaperID);
    35                spTemp[3= new SqlParameter("@StuID", StuID);
    36                spTemp[4= new SqlParameter("@QuestionID", QuestionID);
    37                spTemp[5= new SqlParameter("@AnswerInfo", Answer);
    38
    39                int i = (int)objDB.sp_Execute("pro_InsertStuAnswer", DataAccess.dbControl.sp_ReturnType.AffectedRowsCount, spTemp);
    40

    pro_InsertStuAnswer存储过程的代码:
     1/*
     2  存储过程名:pro_InsertStuAnswer
     3  输入参数:
     4    @RecruID 招聘ID
     5    @TestID  考试ID
     6    @PaperID 试卷ID
     7    @StuID   考生ID
     8    @QuestionID 问题ID
     9    @AnswerInfo 问题答案
    10  输出参数:
    11    @@ROWCOUNT    操作影响的行数
    12  用途:
    13  对某生的某次考试的成绩的添加和修改
    14*/

    15
    16CREATE PROCEDURE dbo.pro_InsertStuAnswer
    17    @RecruID int,
    18    @TestID int,
    19    @PaperID int,
    20    @StuID int,
    21    @QuestionID bigint,
    22    @AnswerInfo varchar(50)
    23    
    24AS
    25    if (select count(*from  tb_StuAnswers where RecruID=@RecruID and  TestID=@TestID and PaperID=@PaperID and StuID=@StuID and QuestionID=@QuestionID)=0
    26        begin
    27            --没有记录,则向表中插入该条记录
    28            insert into Tb_StuAnswers(RecruID,TestID,PaperID,StuID,QuestionID,AnswerInfo) values(@RecruID,@TestID,@PaperID,@StuID,@QuestionID,@AnswerInfo);
    29        end
    30    else
    31        begin
    32        --数据库已有该记录,则说明考生为修改答案
    33            update Tb_StuAnswers set AnswerInfo=@AnswerInfo where  RecruID=@RecruID and  TestID=@TestID and PaperID=@PaperID and StuID=@StuID and QuestionID=@QuestionID    
    34        end
    35    return @@ROWCOUNT;
    36    RETURN
    37GO
    38
    1 protected dbControl objDB = dbControl.GetDBOpterator(System.Configuration.ConfigurationManager.ConnectionStrings["HDHTTestOnline_ConnectionString"].ConnectionString);
    点个广告:
  • 相关阅读:
    android 服务与多线程
    “产品级敏捷” 的这条路; 逐步的形成一高效的产品开发生态系统
    hdoj 1116 Play on Words 【并查集】+【欧拉路】
    辛星跟您玩转vim第四节之操作文本内容
    UVa 10828 Back to Kernighan-Ritchie 高斯消元+概率DP
    CMMI过程改进反例
    UVA 11077
    Yii 框架 URL路径简化
    交水费一波四折
    雷观(十五):提高生产力和程序员价值的2种方法
  • 原文地址:https://www.cnblogs.com/hanxianlong/p/935238.html
Copyright © 2011-2022 走看看