// 在 global.asax 中添加代码:<%@ Import namespace="DataAccess" %><script language="c#" runat="server">
// Import 输入了自己在bin目录下的类库,该类中可以有一个全局的对象 Manager
// 它管理当前所有的会话,可以利用 Session.SessionID 作为 Hashtable 的 key 实现,
// 其中 Hashtable 中储存了会话,或者其它任何自己需要的“会话级”全局对象void Application_Start()
{
    // 初始化,比如
    Manager.OnAppStart();
}
void Application_End()
{
    Manager.OpAppEnd();
}
void Session_Start()
{
    // 将建立新对象,并把 id 作为 key , 对象作为 object 添加到 hashtable 中
    Manager.OnSessionStart(Session.SessionID);
}
void Session_End()
{
    // 关闭连接
    Manager.OnSessionEnd(Session.SessionID);
}
</script>为了使用这个连接,可以简单的实现为:
SqlConnection conn = null;void Page_Load(Object o, EventArgs e)
{    
    conn = Manager.GetConnection(Session.SessionID);
    if(conn == null) error("非法的连接");
}
//我实现过类似的方法,,不过,,我接触 asp 才一个多月,该方法可能有很多弊端,另外,在会话级保存整个连接,,,会不会花费太大了?

解决方案 »

  1.   

    用session传递connection对象应该可以
      

  2.   

    我在上面提供的那种方法就是啊,写得详细点:namespace DataAccess
    {
        public class Mamager
        {
            Hashtable ht = null;        static public void OnAppStart(){
                ht = new Hashtable();
            }        static public void OnAppEnd(){
                //ht.Clear();
            }        // 在整个会话开始时打开连接
            static public void OnSessionStart(String key)
                SqlConnection conn = new SqlConnection(GlobalSetting.ConnStr);
                conn.Open();            ht.Add(key, conn);
            }
      
            // 任何时候,你都可以得到这个连接,只要会话是有效的
            static public SqlConnection GetConnection(String key)
                SqlConnection conn = (SqlConnection)ht[key];
                return conn;
            }        // 然后,在会话结束的时候,关闭连接
            static public void OnSessionEnd(String key)
                SqlConnection conn = (SqlConnection)ht[key];
                if(conn != null) conn.Close();
            }
    // 当请求很频繁时,不一定没个会话都是“有效”的,只有经过“认证”后的会话才建立连接,进行审计,可以简单的对 Manager 修改:
            static public void SetupConnection(String key)
                SqlConnection conn = new SqlConnection(GlobalSetting.ConnStr);
                conn.Open();
                ht.Add(key, conn);
            }
            static public void OnSessionStart(String key)
                // return; 修改后,不是每次都建立连接
            }
    // 然后,在我们的 login.aspx 中,
    void btn_Submit(...)
    {
        if(Login(name, pwd) == true){
            Manager.SetupConnection(Session.SessionID);
        }
    }
      

  3.   

    可以在session甚至application中保存连接对象,我以前做过
      

  4.   

    归纳上面的意见,基本上就是在SEESSION中保存数据库连接,然后在需要的时候,
    直接SqlConnection=Session["my_connection"]就可以了,再不用PROVIDER和my_connection.open之类的语句了,是这样吗?我也知道这样做不好
    但是老板要求的
    我也没办法
    还是多谢各位大哥