本人新手,因为需要做了个站点,在制作的时候访问没问题,但是让学生参与的时候,五十几个人,就要出错,请大虾指点,谢谢!网页界面
多人访问时的出错页面
网页界面的那个页面的代码
<%@ Page Language="C#"  MasterPageFile="MasterPage3.master" AutoEventWireup="true" CodeFile="SZDknowledge.aspx.cs" Inherits="student_knowledge" %><%@ Register assembly="AspNetPager" namespace="Wuqi.Webdiyer" tagprefix="webdiyer" %><asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<script src="/images/dhtmlwindow.js" type="text/javascript"></script> 
   <script type="text/javascript">
     function opwins(url){
    var win=dhtmlwindow.open("dealbox", "iframe", url, "提示:鼠标点此移动窗口,拖动窗口右下角改变窗口大小", "width=640px,height=480px,left=100px,top=50px,resize=1,scrolling=0","recal");
    }
   </script> 
<link href="/images/dhtmlwindow.css" rel="Stylesheet" type="text/css" />
    <div>
    
        <table align="center" width="100%">
            <tr>
                <td width="180px" valign="top">
<asp:TreeView ID="TreeView1" runat="server" EnableViewState="False" ShowLines="True">
                 </asp:TreeView>
                </td>
                 <td valign="top">
                
                    <asp:Image ID="Image1" runat="server" ImageUrl="~/images/line.gif" />
                
                </td>
                <td valign="top">
                    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                        ConnectionString="<%$ ConnectionStrings:xxzdConnectionString %>" 
                        SelectCommand="SELECT [ClassName], [ClassID] FROM [ZDClass] where Tdepth=4">
                        
                    </asp:SqlDataSource>
                    
                    <br />
                    
                    <asp:DataList Id="dlCategories" runat="server" >
                        <ItemTemplate>
                           <%# DataBinder.Eval(Container, "DataItem.ClassName") %>
                            <br />
                            
                           <%# ShowResource(Convert.ToString(DataBinder.Eval(Container.DataItem, "ClassID")))%>
                                   
                            <br />
                            <br />
                        </ItemTemplate>
                    </asp:DataList>
                        
                    <br />
                    <table style="width: 98%; background-color: #D2E9FF;" cellpadding="0" 
                        cellspacing="0"> 
                    <tr> 
                    <td style="width:976px; height:25px;"> 
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                    <asp:Label ID="Label7" runat="server" Text="当前页码"></asp:Label>                     
                    <asp:Label ID="labPage" runat="server" Text="1"></asp:Label>                    
                    <asp:Label ID="Label6" runat="server" Text="/"></asp:Label>                     
                    <asp:Label ID="labBackPage" runat="server"></asp:Label> 
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                    <asp:LinkButton ID="lnkbtnOne" runat="server" Font-Underline="False" ForeColor="Red" 
                    OnClick="lnkbtnOne_Click">首页</asp:LinkButton> 
                    <asp:LinkButton ID="lnkbtnUp" runat="server" Font-Underline="False" ForeColor="Red" 
                    OnClick="lnkbtnUp_Click">上一页</asp:LinkButton> 
                    <asp:LinkButton ID="lnkbtnNext" runat="server" Font-Underline="False" ForeColor="Red" 
                    OnClick="lnkbtnNext_Click">下一页</asp:LinkButton> 
                    <asp:LinkButton ID="lnkbtnBack" runat="server" Font-Underline="False" ForeColor="Red" 
                    OnClick="lnkbtnBack_Click">尾页</asp:LinkButton> 
                        <asp:HiddenField ID="HiddenField1" runat="server" />
                        </td> 
                    </tr> 
                    </table> 
                        
                    </td>
            </tr>
        </table>
    
    </div>
</asp:Content>

解决方案 »

  1.   

    相关cs代码
    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Data.SqlClient;
    public partial class student_knowledge : System.Web.UI.Page
    {    protected void Page_Load(object sender, EventArgs e)
        {
            InitTree();
                    if (!IsPostBack)
            {
                DataAccess.IsAdmin(3);
                                       //传递参数后 根据参数返回相应数据
                if (Request["classID"] != null)
                {
                    try
                    {
                        int ClassID = Convert.ToInt32(Request.QueryString["classID"]);
                        if (ClassID == 0)
                        {
                            SqlDataSource1.SelectCommand = "SELECT * FROM ZDClass where Tdepth=4 order by classid";
                                                   
                        }
                        else
                        {
                            string childclassid = getchild(ClassID);
                            SqlDataSource1.SelectCommand = "SELECT * FROM ZDClass where Tdepth=4 and ClassID in (" + childclassid + ") ";
                           
                        }                    HiddenField1.Value = SqlDataSource1.SelectCommand;
                        dlBind(SqlDataSource1.SelectCommand);                     //SqlDataSource1.ConnectionString = ConfigurationManager.ConnectionStrings["xxzdConnectionString"].ConnectionString;
                        
                        
                    }
                    catch
                    {
                        Response.Write("<script language=\"javascript\">alert('参数传递错误!');history.back();</script>");
                        Response.End();
                    }
                    finally
                    {
                        // int ClassID = Convert.ToInt32(Request.QueryString["classID"]);
                        DataAccess.Close();
                        
                    }
                }
            }    }    public void dlBind(string chasql) 
        {
        string strCon = ConfigurationManager.ConnectionStrings["xxzdConnectionString"].ConnectionString; 
        int curpage = Convert.ToInt32(this.labPage.Text); 
        PagedDataSource ps = new PagedDataSource(); 
        SqlConnection sqlcon = new SqlConnection(strCon); 
        sqlcon.Open();
        string sqlstr = "SELECT * FROM ZDClass where Tdepth=4 ";
        if (chasql != "")
        {
            sqlstr = chasql;
        }    SqlDataAdapter MyAdapter = new SqlDataAdapter(sqlstr,sqlcon);     DataSet ds = new DataSet(); 
        MyAdapter.Fill(ds, "classid"); 
        ps.DataSource = ds.Tables["classid"].DefaultView; 
        ps.AllowPaging = true; //是否可以分页 
        ps.PageSize = 10; //显示的数量 
        ps.CurrentPageIndex = curpage - 1; //取得当前页的页码 
        this.lnkbtnUp.Enabled = true; 
        this.lnkbtnNext.Enabled = true; 
        this.lnkbtnBack.Enabled = true; 
        this.lnkbtnOne.Enabled = true; 
        if (curpage == 1) 
        { 
        this.lnkbtnOne.Enabled = false;//不显示第一页按钮 
        this.lnkbtnUp.Enabled = false;//不显示上一页按钮 
        } 
        if (curpage == ps.PageCount) 
        { 
        this.lnkbtnNext.Enabled = false;//不显示下一页 
        this.lnkbtnBack.Enabled = false;//不显示最后一页 
        } 
        this.labBackPage.Text = Convert.ToString(ps.PageCount);
        this.dlCategories.DataSource = ps;
        this.dlCategories.DataKeyField = "classid";
        this.dlCategories.DataBind();
        sqlcon.Close();
        sqlcon.Dispose();
        }     protected void lnkbtnOne_Click(object sender, EventArgs e) 
        { 
        this.labPage.Text = "1"; 
        this.dlBind(HiddenField1.Value.ToString()); 
        } 
        protected void lnkbtnUp_Click(object sender, EventArgs e) 
        { 
        this.labPage.Text = Convert.ToString(Convert.ToInt32(this.labPage.Text) - 1);
        this.dlBind(HiddenField1.Value.ToString());  
        } 
        protected void lnkbtnNext_Click(object sender, EventArgs e) 
        { 
        this.labPage.Text = Convert.ToString(Convert.ToInt32(this.labPage.Text) + 1);
        this.dlBind(HiddenField1.Value.ToString()); 
        } 
        protected void lnkbtnBack_Click(object sender, EventArgs e) 
        { 
        this.labPage.Text = this.labBackPage.Text;
        this.dlBind(HiddenField1.Value.ToString()); 
        }
        private string getchild(int parid)
        {
            string getchildstr="0";
            int ttdepth;
            string sql = "select * from zdclass where ClassID="+parid.ToString();
            ttdepth = Convert.ToInt16(DataAccess.GetDataTable(sql).Rows[0]["Tdepth"]);
            if (ttdepth == 4)
            {
                getchildstr = getchildstr + "," + parid.ToString();
            }
            else
            {
                string Sql = "select * from zdclass where ParentID=" + parid.ToString();
                DataTable dt = DataAccess.GetDataTable(Sql);
                DataRow[] drs = dt.Select("ParentID=" + parid.ToString());
                foreach (DataRow dr in drs)
                {
                    if (dr["Tdepth"].ToString() == "4")
                    {
                        getchildstr = getchildstr + "," + dr["ClassID"].ToString();
                    }
                    else
                    {
                        getchildstr = getchildstr + "," + getchild(Convert.ToInt16(dr["ClassID"]));
                    }
                }
            }
            return getchildstr;
        
        }    public string ShowResource(string classids) 
        {
            string showresourcestr = "";
            string Sql = "select * from ZDResource where Rnode=" + Convert.ToInt16(classids)+" and Rstat=0";
            DataTable dt = DataAccess.GetDataTable(Sql);
            DataRow[] drs = dt.Select("Rnode=" + Convert.ToInt16(classids));
            string picurl = "";
            foreach (DataRow dr in drs)
            {
                string rrtype = dr["Rtype"].ToString();
                switch (rrtype)
                {
                    case "文本": picurl = "/images/wenben.png"; break;
                    case "图片": picurl = "/images/tupian.png"; break;
                    case "视频": picurl = "/images/shipin.png"; break;
                    case "FLASH":picurl = "/images/flash.png"; break;
                    case "实验": picurl = "/images/default.png"; break;
                    default: picurl = ""; break;
                }
                string urlget = "SZDshowresource.aspx?rid=" + dr["Rid"];
                showresourcestr = showresourcestr + "<a href='#' onclick=javascript:opwins('" + urlget + "'); return false;><img src='" + picurl + "'></a>";
            }
            return showresourcestr;
        
        }
            private void InitTree()
        {
            TreeView1.Nodes.Clear();
            TreeNode rootNode = new TreeNode();
            rootNode.Text = "知识结构";
            rootNode.Value = "0";
            rootNode.NavigateUrl = "?classID=0";
            TreeView1.Nodes.Add(rootNode);
            //string Sql = "select * from zdclass where Tdepth<4 order by SortNumber asc";
            DataTable dt = DataAccess.getinittreetable();
            AddNote(dt, rootNode, 0);
            TreeView1.ExpandAll();
        }
        //子节点生成
        private void AddNote(DataTable dt, TreeNode node, int fatherid)
        {
            DataRow[] drs = dt.Select("ParentID=" + fatherid.ToString());
            foreach (DataRow dr in drs)
            {
                TreeNode childNode = new TreeNode();
                string ChiText = "";            childNode.Text = dr["className"].ToString() + ChiText.ToString();
                childNode.Value = dr["classid"].ToString();
                childNode.NavigateUrl = "?classID=" + dr["classid"].ToString();            node.ChildNodes.Add(childNode);            AddNote(dt, childNode, Convert.ToInt32(dr["classid"]));
            }
        }  
    }
      

  2.   

    用到的数据库操作类
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.SessionState;/// <summary>
    /// 数据类
    /// </summary>
    public class DataAccess
    {
        private static SqlConnection Conn = new SqlConnection();
        private static SqlCommand Cmd = new SqlCommand();
           public DataAccess()
        {    }    /// <summary>
        /// 打开连接
        /// </summary>    public static void Open()
        {
            if (Conn.State.Equals(ConnectionState.Closed))
            {
                Conn.ConnectionString = ConfigurationManager.ConnectionStrings["xxzdConnectionString"].ConnectionString;
                Cmd.Connection = Conn;
                Conn.Open();
            }
        }    /// <summary>
        /// 关闭连接
        /// </summary>
        public static void Close()
        {
            if (Conn.State == ConnectionState.Open)
            {
                Conn.Close();
                Conn.Dispose();
                Cmd.Dispose();
            }
        }    public static DataTable getcunchutable()
        {
            try
            {            Open();                     SqlCommand cmd = new SqlCommand("getclass", Conn);
                cmd.CommandType = CommandType.StoredProcedure;
                SqlDataAdapter Da = new SqlDataAdapter(cmd);
                DataTable Dt = new DataTable();            Da.Fill(Dt);
                return Dt;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
            finally
            {
                Close();
            }
        }    public static DataTable getinittreetable()
        {
            try
            {            Open();            SqlCommand cmd = new SqlCommand("inittree", Conn);
                cmd.CommandType = CommandType.StoredProcedure;
                SqlDataAdapter Da = new SqlDataAdapter(cmd);
                DataTable Dt = new DataTable();            Da.Fill(Dt);
                return Dt;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
            finally
            {
                Close();
            }
        }
        public static DataSet GetDataSet(string sql)
        {
            try
            {
                Open();
                SqlDataAdapter Da = new SqlDataAdapter(sql, Conn);
                DataSet Ds = new DataSet();
                Da.Fill(Ds);
                return Ds;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
            finally
            {
                Close();
            }
        }    public static DataTable GetDataTable(string sql)
        {
            try
            {
                Open();
                SqlDataAdapter Da = new SqlDataAdapter(sql, Conn);
                DataTable Dt = new DataTable();
                Da.Fill(Dt);
                return Dt;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
            finally
            {
                Close();
            }
        }    public static int ExecuteCmd(string sql)
        {
            try
            {
                Open();
                Cmd.CommandType = CommandType.Text;
                Cmd.CommandText = sql;
                Cmd.ExecuteNonQuery();
                return 1;
            }
            catch
            {
                return -1;
            }
            finally
            {
                Close();
            }
        }    /// <summary>
        /// 统计记录条数
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static int CountCmd(string sql)
        {
            try
            {
                Open();
                Cmd.CommandType = CommandType.Text;
                Cmd.CommandText = sql;
                return (int)Cmd.ExecuteScalar();
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
            finally
            {
                Close();
            }
        }    public static DataTable getusertable(string user)
        {
            try
            {            Open();            SqlCommand cmd = new SqlCommand("getuserinfo", Conn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@user", SqlDbType.VarChar, 50);
                cmd.Parameters["@user"].Value = user;
                SqlDataAdapter Da = new SqlDataAdapter(cmd);
                DataTable Dt = new DataTable();            Da.Fill(Dt);
                return Dt;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
            finally
            {
                Close();
            }
        }    /// <summary>
        /// 判断管理员
        /// </summary>
        public static void IsAdmin(int lev)
        {
            /*
            string  user=HttpContext.Current.Session["UserName"].ToString();
            DataTable dtu = DataAccess.getusertable(user);
            int llev=3;
            if (Convert.ToInt16(dtu.Rows.Count) > 0)
            {
            llev = Convert.ToInt16(dtu.Rows[0]["GroupID"]);
            }
            if (llev != lev)
            {
            HttpContext.Current.Response.Write(@"<script>alert('用户身份不匹配,请不要使用旁注!');location='\\default.aspx';</script>");
            System.Web.HttpContext.Current.Response.End();
            }
           */            
        }
        public static string showgroupid(int lev)
        {
            switch (lev)
            {
                case 1: return "管理员"; break;
                case 2: return "教师"; break;
                case 3: return "学生"; break;
                default: return "学生";
            }    }    public static string showclass(int lev)
        {
            string Sql = "select * from ZDClass where ClassID=" + lev ;
            string classname=GetDataTable(Sql).Rows[0]["Classname"].ToString();
            return classname;    }    public static void Message(System.Web.UI.Page page, string nr)
        {        page.RegisterStartupScript("message", "<script language='javascript'>alert('" + nr + "');</script>");
          
           
        }
        public static void Message1(System.Web.UI.Page page, string nr, string Url)
        {        page.RegisterStartupScript("message", "<script language='javascript'>alert('" + nr + "'); location='" + Url + "'</script>");
        }    public static void Message2(System.Web.UI.Page page, string nr)
        {        page.RegisterStartupScript("message", "<script language='javascript'>alert('" + nr + "'); window.opener.reloadparent();self.close();</script>");
        }
        
        ///   <summary>   
        ///   判断是否为数字   
        ///   </summary>   
        ///   <param   name="myObj">传递的参数</param>   
        ///   <returns>返回真假值</returns>   
        public static bool isNumber(Object myObj)
        {
            try
            {
                int i = Convert.ToInt32(myObj);
                return (true);
            }
            catch
            {
                return (false);
            }
        }
    }因为是边学边做的,很多都是从网上找来,修改下做出来的,
    我知道问题肯定是出在数据库操作上,只是不知道怎么去修改,
    请大虾指点啊!谢谢!!!!!!
      

  3.   

    DataAccess的所有数据库操作方法都加上
    lock(typeof(DataAccess)){
    ...
    }
      

  4.   

    你看看DataReader运行后没有关闭,估计不用50多人把,有一个人打开后第二个人在打就会出现这个问题吧。你逐步调试一下,把报错的地方一步一步修改
      

  5.   


    正解,有些列名并没有对上,比哪查询时没有name名,但前台绑定了name,或者查询是name但绑定的是namf还就是数据库要及时关闭,放进using中使用吧。建议你下载一个MSDN,看看USING的用法
      

  6.   

    我跟你一模一样的问题,困扰我好几天了,今天上午刚解决的,静态变量问题。
    private static SqlConnection Conn = new SqlConnection();
    private static SqlCommand Cmd = new SqlCommand();
    千万不要定义成静态的,把它定义到方法里头去,什么时候用什么时候new对象实例化 调用连接串  这样每个人都会有自己的一个连接对象 再把web.config里面加上这个MultipleActiveResultSets=True这样写: <add name="userDB" connectionString="server=.;database=Media;uid=sa;pwd=sa;MultipleActiveResultSets=True"/>
      

  7.   

    感谢各位的支持
    谢谢xiaoyatoupiqizhuai帮我解决了问题