日期:2014-05-19  浏览次数:20491 次

关于读取数据库记录时`用户刷新过快导致错误! 希望高手帮我看下!谢谢咯!
关于读取数据库记录时`用户刷新过快导致错误!   希望高手帮我看下!谢谢咯!

为什么用asp.net读取数据的时候。
如果用户刷新频率太快了
就会出现错误!数据读取错误`
只有在用户一直刷新的时候才会出现。
而且只要一出错。
其他用户继续访问。也会出错。
但是一会就好了`
请问是怎么回事`

错误信息有的时候不一样。。
反正都是跟数据库读取错误有关


以下是出错的代码段`

public   void   page_tongji(string   Qwhere,   string   Qtable,   string   Qtop)
        {
                conn   =   new   SqlConnection(sql);
                SqlCommand   cmd;
                //如果数据库连接关闭`就打开...
                if   (conn.State   ==   ConnectionState.Open)   {   conn.Close();   }   else   {   conn.Open();   }

                cmd   =   new   SqlCommand( "QQ_count ",   conn);
                cmd.CommandType   =   CommandType.StoredProcedure;
                cmd.Parameters.Add( "@table ",   SqlDbType.Char);
                cmd.Parameters.Add( "@where ",   SqlDbType.VarChar);
                cmd.Parameters[ "@where "].Value   =   Qwhere;
                cmd.Parameters[ "@table "].Value   =   Qtable;
                Page_Count   =   Convert.ToInt32(cmd.ExecuteScalar());
                //得到当前可以分为多少页
                if   ((Page_Count   %   Convert.ToInt32(Qtop))   !=   0)
                        Page_Qpage   =   (Page_Count   /   Convert.ToInt32(Qtop))   +   1;
                else
                        Page_Qpage   =   (Page_Count   /   Convert.ToInt32(Qtop));
                cmd.Dispose();
                conn.Close();   //关
        }


错误提示是:
Page_Count   =   Convert.ToInt32(cmd.ExecuteScalar());  
阅读器关闭时   Read   的尝试无效。


------解决方案--------------------
你这个connection难道是static类型的?
最好就是个局部变量
SqlConnection conn = new SqlConnection(sql);
SqlCommand cmd;
//如果数据库连接关闭`就打开...
if (conn.State == ConnectionState.Open) { conn.Close(); } else { conn.Open(); }

cmd = new SqlCommand( "QQ_count ", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add( "@table ", SqlDbType.Char);
cmd.Parameters.Add( "@where ", SqlDbType.VarChar);
cmd.Parameters[ "@where "].Value = Qwhere;
cmd.Parameters[ "@table "].Value = Qtable;
Page_Count = Convert.ToInt32(cmd.ExecuteScalar());
//得到当前可以分为多少页
if ((Page_Count % Convert.ToInt32(Qtop)) !=