部分code,大家帮忙分析一下。Global.asax文件
<script runat="server">    string SqlString;
    ConnectDB connect;
    SendCommand sendto;    void Application_Start(object sender, EventArgs e) 
    {
        connect = new ConnectDB();
        sendto = new SendCommand(Server.MapPath(@"~/Bin/SCCommandClient.dll"));
    }
    
    void Application_End(object sender, EventArgs e) 
    {
        connect.CloseConnect();
    }
</script>
数据库ConnectDB.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using MySql.Data.MySqlClient;public class ConnectDB
{
    public static MySqlConnection conn;
    public static MySqlCommand comm;    public ConnectDB()
    {
        conn = new MySqlConnection();
        conn.ConnectionString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];
        try
        {
            conn.Open();
        }
        catch (Exception ex)
        {
            conn.Open();
        }
        
    }    public static MySqlDataReader DataReader(string SqlString)
    {
        MySqlDataReader dr;
        try
        {
            MySqlCommand comm = new MySqlCommand(SqlString, conn);
            dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
           
        }
        catch(Exception e)
        {
        }
        return dr;
    }    public void CloseConnect()
    {
        conn.Close();
        conn.Dispose();
    }
}
页面
SqlString = "SELECT UserLevel,UserPer FROM Users WHERE UserName = 'mm'";
        reader = ConnectDB.DataReader(SqlString);
        if (reader.Read())
        {
            userlevel = Convert.ToInt32(reader["Userlevel"]);
        }
        reader.close();
开发的一个网站,其中数据读取全部使用的是DataReader,使用上面的代码,一个用户访问没有问题,
但是多个用户访问同一页面时,就会有时出现Invalid attempt to Read when reader is closed,
访问越多,提交多出现就多。
这里有几个问题问下大家:
1.Application_Start这个是每个用户访问服务器时都会调用的吧。数据类connection初始化在这里只有一次,是不是会有问题。
2.我的ConnectDB类里面的成员对象都是静态的,静态的属于全局变量,我测试发现,静态成员可以被多个登录用户共享其内容,就是不是属于用户全局,而是系统全局,那是不是我的connection由于是静态的,多用户访问都是用的同一个connection,不知道大家听懂意思没,还是我的理解有误。
3.大量使用datareader是不是会造成问题,因为它必须保持数据连接,而且独占模式,当另一个datareadre来访问时,就出现问题,我这样理解对不对
4.出现的问题,请大家帮忙,怎么可以解决。
谢谢!

解决方案 »

  1.   

    你的第三点已经把问题阐述清楚了。。CommandBehavior.CloseConnectionSqlDataReader dr=cmd.ExecuteReader(CommandBehavior.CloseConnection)注意控制你的 SqlDataReader 状态
      

  2.   

    CommandBehavior.CloseConnection
    使用这个关闭reader时虽然也会关闭相应connection,
    但如果多用户登陆他们的connection应该都互不影响八.
    我这里是不是应该每次访问数据库都创建连接比较好,访问完就关闭,而不是一直使用一个connection.
      

  3.   

    是不是和我使用了
    public static MySqlConnection conn;
    public static MySqlCommand comm;
    作为静态成员,造成所有用户都使用的同一连接有关
      

  4.   

     public static MySqlConnection conn;
        public static MySqlCommand comm;不能这样搞吧,多个人会相互影响的。
      

  5.   

    不要使用public static MySqlConnection conn;