asp.net 高并发下 一个web页面同时调用2个方法,这2个方法都是查询数据库,查询的结果乱掉了

问题描述

asp.net 高并发下 一个web页面同时调用2个方法,这2个方法都是查询数据库,查询的结果乱掉了

问题描述:这个问题只有在高并发情况下才会出现。
具体如下:
后台.cs有2个方法,这2个方法在前端.aspx通过流的方式调用(<%%>),然而DaoJiShi()这个方法获得的是gd()方法的数据,gd()获得的是DaoJiShi()方法的数据,那么在相应的方法里遍历DaTable的时候就会报列不存的情况。
这个问题让我很困惑,这样写已经很多项目了,都没这个问题。这个项目有时候会高并发,我测试也是疯狂刷新页面的时候才会出现,混迹CSDN5年了,突然怀疑自己不会写代码了
开始我怀疑是查询数据的公共方法QueryDataSetByParameters是静态(static)的原因,改成现在的动态的也会出现问题
我尽量少的去掉业务逻辑,关联的代码进行测试,代码贴出来,希望各位一起探讨下,如下:
aspx页面代码:

  <div class="wrap">
        <div class="box2">
            <ul>
                <%=gd()%>
            </ul>
            <ui>剩余时间:<%=intEndTime %></ui>
        </div>
    </div>

aspx.cs代码:

 public partial class mobile_FuDai3 : System.Web.UI.Page
{
    public int intEndTime = 0;
    protected void Page_Load(object sender, EventArgs e)
    {

        int intCount = DaoJiShi();

    }
    public int DaoJiShi()
    {
        string path = Server.MapPath("./log/error");
        int inth = DateTime.Now.Hour;
        int intResult = 0; DataTable Dt = null;
        try
        {
            string strSql = @"select isnull(COUNT(0),0) djs from kww_hongbao
                        where type=17 and comment='抢福袋红包' and datepart(hh,createtime)= @H and userid=-1 and DATEDIFF(DAY,createtime,GETDATE())=0";
            SqlParameter[] Sp = { new SqlParameter("@H", inth) };
            DataSet ds = SqlDataOperator.QueryDataSetByParameters(strSql, Sp);
            if (ds != null && ds.Tables.Count > 0)
            {
                Dt = ds.Tables[0];
                if (Dt != null && Dt.Rows.Count > 0)
                {
                    intResult = Convert.ToInt32(Dt.Rows[0][0]);
                }
                Dt.Dispose();
            }
            ds = null;
        }
        catch (Exception ex)
        {
            Writer.WriteLog(path, "nr" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") +"错误信息1:" + ex.ToString() + "<br/>");
            foreach (DataColumn dc in Dt.Columns)
            {
                Response.Write(string.Format("1.列名:{0} ,数据类型:{1},值:{2}<br/>", dc.ColumnName, dc.DataType, dc.DefaultValue.ToString()));
                Writer.WriteLog(path, "nr" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + string.Format("1.列名:{0} ,数据类型:{1},值:{2}<br/>", dc.ColumnName, dc.DataType, dc.DefaultValue.ToString()));
            }
        }

        return intResult;
    }
    //头部滚动栏
    public string gd()
    {
        string strStatus = string.Empty;
        string strResult = string.Empty;
        string path = Server.MapPath("./log/error");
        StringBuilder sb = new StringBuilder();
        string strCache = "cache_fudai_gundong";
        string strSql = @"select top 100 t2.nickname,isnull(Convert(decimal(18,2),t1.num*0.0001),0) num from kww_hongbao t1
                            join kww_user t2
                            on t1.userid=t2.userid
                            where t1.type=17 order by t1.createtime desc";
        SqlParameter[] paramList = null;
        DataTable Dt = null;
        try
        {
            DataSet Ds = SqlDataOperator.QueryDataSetByParameters(strSql, paramList);
            if (Ds != null && Ds.Tables.Count > 0)
            {
                Dt = Ds.Tables[0];
                if (Dt != null && Dt.Rows.Count > 0)
                {
                    foreach (DataRow dr in Dt.Rows)
                    {
                        string strNickname = dr["nickname"].ToString();
                        if (strNickname.Length > 2)
                        {
                            strNickname = strNickname.Substring(0, 2);
                        }
                        string strNum = dr["num"].ToString();
                        sb.AppendLine("<li>" + strNickname + "***抢到" + strNum + "元</li>");
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Writer.WriteLog(path, "nr" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "错误信息1:" + ex.ToString() + "<br/>");
            DataSet Ds1 = new SqlDataOperatorAuto().QueryDataSetByParameters(strSql, paramList);
            foreach (DataColumn dc in Dt.Columns)
            {
                Response.Write(string.Format("2.列名:{0} ,数据类型:{1},值:{2}<br/>", dc.ColumnName, dc.DataType, dc.DefaultValue.ToString()));
                Writer.WriteLog(path, "nr" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + string.Format("2.列名:{0} ,数据类型:{1},值:{2}<br/>", dc.ColumnName, dc.DataType, dc.DefaultValue.ToString()));
            }
        }
        Dt.Dispose();
        return sb.ToString();
    }
}

调用的公共查询数据库类方法:
/*参数化查询数据库 防止SQL注入*/

 public  DataSet QueryDataSetByParameters(string strSql, SqlParameter[] paramList)
        {
            SqlConnection SqlConn = new SqlConnection(sqlConfigStr);
            DataSet Ds = new DataSet();
            string strResult = string.Empty;
            try
            {

                SqlConn.Open();
                SqlDataAdapter Da = new SqlDataAdapter();
                Da.SelectCommand = new SqlCommand();
                Da.SelectCommand.Connection = SqlConn;
                Da.SelectCommand.CommandType = CommandType.Text;
                Da.SelectCommand.CommandText = strSql;
                if (paramList != null)
                {
                    Da.SelectCommand.Parameters.AddRange(paramList);
                }
                Da.Fill(Ds);
                Da.Dispose();
            }
            catch
            {

            }
            finally
            {
                SqlConn.Close();
                SqlConn.Dispose();
            }
            return Ds;
        }

解决方案

怎么没人回答呢,应该是一个比较有意思的话题吧,难道是我没描述清楚么,高并发带来的异常,很吸引人吧

时间: 2024-09-20 04:01:04

asp.net 高并发下 一个web页面同时调用2个方法,这2个方法都是查询数据库,查询的结果乱掉了的相关文章

如何能在微信中内嵌一个web页面

问题描述 如何能在微信中内嵌一个web页面 想问一下如何能在微信公众平台中内嵌一个web页面呢?具体方向是什么呢?本人对这个不太懂.想咨询一下

web页面php调用shell脚本,执行svn update 更新的问题。

问题描述 web页面php调用shell脚本,执行svn update 更新的问题. 大神们,求救! SvnUpdate.php代码: <?php set_time_limit(0); system("/usr/bin/sudo /usr/www/SvnUpdate.sh"); ?> SvnUpdate.sh代码: time="$(date +"%Y%m%d-%H%M%S")" codes="/usr/www/codes&q

新增一个Web页面

web|页面 现在我们来练习新增一个页面,选择Project>Add Web Item>Active Server Page在弹出的对话框中的Name框内输入first.asp,然后点击"打开"按钮,first.asp被自动生成. Visual InterDev提供了三种察看HTML及ASP页面的方法,它们是Design,Source和Quick View方式,这三种察看方式是Visual InterDev 6的基础,它们取代了1.0版本中的简单源代码编辑器,并且支持DTC

一个Web页面的问题分析

几个月之前我接到一个新的开发任务,要在一个旧的Web页面上面增添一些新的功能.在开发的过程中发现旧的代码中有很多常见的不合适的写法,结合这些问题,如何写出更好的,更规范的,更可维护的代码,就是这篇文章要阐述的内容. 首先我查看了该Web页面的HTML代码,发现了一些典型的问题: HTML页面中包含了很多Javascript和CSS代码 HTML页面中引用了大量的外部Javascript文件和CSS文件 接下来就这些问题,我们逐个讨论一下: HTML页面中包含了很多Javascript和CSS代码

mina高并发下响应时间过长的一些失败的尝试及寻求正确方法

问题描述 楼楼做这个mina的服务端的时间大概不到一个月. 楼楼之前主要是做http的编码,对socket的了解也不是很深, 但因为mina的易用性所以整个服务端也算是很快就搭建起来了. 在和客户端对接测试的时候稳定性和服务端的功能也都还算满意.所以兴冲冲的就开始做压力测试了. 压力测试一做就做出来一身冷汗. 楼楼的服务器是4核的,所以服务端启动的ioprocesser=5. 目前最大的问题是: 当session数量到达100以上时. 客户端收到服务端响应的时间大约就要2到3秒, 当同时并发2W

手机Web页面 如何调用手机相册 跟 摄像头

问题描述 在做微名片页面,需要手机调用摄像头及手机相册,麻烦告知小弟,不胜感激! 解决方案 解决方案二:这个难实现啊,我知道app中webview嵌入html页面可以调到,但是纯web页面没搞出来,帮顶解决方案三:这个是可以实现的不如你登陆手机QQ进入QQ空间,里面有上传照片的部分.然后用浏览器打开复制地址然后在传到电脑..然后用电脑打开手机网站然后看源码..可能是手机QQ吧反正有一个版本是可以实现的看到过是网页的

怎样实现表结构定义完后,自动生成bean,并可以web页面里调用。

问题描述 其实就是怎样自动生成BEAN类文件,再进行编译后,交给前台页面使用. 解决方案 解决方案二:hibernate框架可以达到这个效果解决方案三:hibernate表结构是完成后期用户定义的,hibernate也可以吗?

新手发帖,围观~~急,web页面上调用本地exe程序(比如已安装的程序)[

问题描述 functionopenClientdemo(){try{varstr="C:\ProgramFiles\NetAppSoft.exe";varWSH=newActiveXObject("Wscript.Shell").run(str);}catch(e){alert("找不到文件"+str+"请确认是否正确安装了软件");}}这样写,后面换成cmd.exe就可以执行,但是是上面的路径就会报错,找不到文件,请高手指点

ASP建立WEB页面计数器

web|计数器|页面 用ASP建立WEB页面的计数器通常有两种简单的方法,一个是建立global.asa,另外一个是直接写一个ASP文件来进行计数.一般使用一个文档来保存浏览数量.    1.用global.asa来写计数器写一个global.asa文件,存放到虚拟目录的根目录下面,源代码如下:    <Script language ="Vbscript" Runat="server"> sub Application_onStart()  count